summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac29
-rw-r--r--[-rwxr-xr-x]po/fr.po0
-rw-r--r--po/inkscape.pot1348
-rw-r--r--po/nl.po2219
-rw-r--r--[-rwxr-xr-x]po/zh_TW.po0
-rw-r--r--share/tutorials/Makefile.am1
-rw-r--r--share/tutorials/tutorial-advanced.ja.svg301
-rw-r--r--share/tutorials/tutorial-advanced.nl.svg101
-rw-r--r--share/tutorials/tutorial-calligraphy.svg29
-rw-r--r--share/tutorials/tutorial-interpolate.fr.svg197
-rw-r--r--share/tutorials/tutorial-interpolate.ja.svg164
-rw-r--r--share/tutorials/tutorial-tips.fr.svg339
-rw-r--r--share/tutorials/tutorial-tips.ja.svg646
-rw-r--r--share/tutorials/tutorial-tips.nl.svg700
-rw-r--r--share/tutorials/tutorial-tips.svg320
-rw-r--r--src/arc-context.cpp17
-rw-r--r--src/box3d-context.cpp73
-rw-r--r--src/box3d-side.cpp76
-rw-r--r--src/box3d-side.h13
-rw-r--r--src/box3d.cpp121
-rw-r--r--src/box3d.h18
-rw-r--r--src/color-profile-test.h12
-rw-r--r--src/color-profile.cpp31
-rw-r--r--src/conditions.cpp23
-rw-r--r--src/conn-avoid-ref.cpp30
-rw-r--r--src/connector-context.cpp82
-rw-r--r--src/console-output-undo-observer.cpp13
-rw-r--r--src/console-output-undo-observer.h9
-rw-r--r--src/desktop-events.cpp19
-rw-r--r--src/desktop-style.cpp42
-rw-r--r--src/desktop.cpp88
-rw-r--r--src/desktop.h18
-rw-r--r--src/dialogs/clonetiler.cpp55
-rw-r--r--src/dialogs/export.cpp57
-rw-r--r--src/dialogs/find.cpp10
-rw-r--r--src/dialogs/item-properties.cpp29
-rw-r--r--src/dialogs/spellcheck.cpp22
-rw-r--r--src/dialogs/text-edit.cpp11
-rw-r--r--src/dialogs/xml-tree.cpp61
-rw-r--r--src/display/canvas-grid.cpp12
-rw-r--r--src/display/nr-arena-item.cpp1
-rw-r--r--src/display/nr-filter-image.cpp13
-rw-r--r--src/document-private.h9
-rw-r--r--src/document-subset.cpp1
-rw-r--r--src/document-undo.cpp57
-rw-r--r--src/document-undo.h57
-rw-r--r--src/document.cpp554
-rw-r--r--src/document.h179
-rw-r--r--src/draw-context.cpp26
-rw-r--r--src/dropper-context.cpp9
-rw-r--r--src/dyna-draw-context.cpp15
-rw-r--r--src/eraser-context.cpp24
-rw-r--r--src/event-context.cpp24
-rw-r--r--src/extension/dbus/application-interface.cpp2
-rw-r--r--src/extension/dbus/document-interface.cpp9
-rw-r--r--src/extension/effect.cpp3
-rw-r--r--src/extension/execution-env.cpp5
-rw-r--r--src/extension/extension.cpp74
-rw-r--r--src/extension/extension.h7
-rw-r--r--src/extension/implementation/script.cpp6
-rw-r--r--src/extension/implementation/xslt.cpp9
-rw-r--r--src/extension/internal/bluredge.cpp2
-rw-r--r--src/extension/internal/cairo-png-out.cpp12
-rw-r--r--src/extension/internal/cairo-ps-out.cpp12
-rw-r--r--src/extension/internal/cairo-ps-out.h2
-rw-r--r--src/extension/internal/cairo-render-context.cpp48
-rw-r--r--src/extension/internal/cairo-renderer-pdf-out.cpp15
-rw-r--r--src/extension/internal/cairo-renderer.cpp27
-rw-r--r--src/extension/internal/cairo-renderer.h3
-rw-r--r--src/extension/internal/emf-win32-inout.cpp14
-rw-r--r--src/extension/internal/emf-win32-print.cpp12
-rw-r--r--src/extension/internal/filter/color.h467
-rw-r--r--src/extension/internal/filter/experimental.h367
-rw-r--r--src/extension/internal/filter/filter-all.cpp23
-rw-r--r--src/extension/internal/filter/filter.cpp2
-rw-r--r--src/extension/internal/filter/morphology.h107
-rw-r--r--src/extension/internal/gdkpixbuf-input.cpp12
-rw-r--r--src/extension/internal/gimpgrad.cpp3
-rw-r--r--src/extension/internal/grid.cpp11
-rw-r--r--src/extension/internal/javafx-out.cpp5
-rw-r--r--src/extension/internal/latex-pstricks-out.cpp14
-rw-r--r--src/extension/internal/latex-pstricks.cpp11
-rw-r--r--src/extension/internal/latex-text-renderer.cpp23
-rw-r--r--src/extension/internal/odf.cpp11
-rw-r--r--src/extension/internal/odf.h3
-rw-r--r--src/extension/internal/pdf-input-cairo.cpp3
-rw-r--r--src/extension/internal/pdfinput/pdf-input.cpp9
-rw-r--r--src/extension/internal/pdfinput/pdf-parser.cpp10
-rw-r--r--src/extension/internal/pdfinput/svg-builder.cpp6
-rw-r--r--src/extension/internal/pov-out.cpp3
-rw-r--r--src/extension/internal/svg.cpp14
-rw-r--r--src/extension/internal/win32.cpp7
-rw-r--r--src/extension/internal/wpg-input.cpp3
-rw-r--r--src/extension/param/notebook.cpp40
-rw-r--r--src/extension/param/notebook.h2
-rw-r--r--src/extension/param/parameter.cpp15
-rw-r--r--src/extension/param/parameter.h3
-rw-r--r--src/extension/print.h3
-rw-r--r--src/extension/system.cpp40
-rw-r--r--src/file.cpp100
-rw-r--r--src/filter-chemistry.cpp49
-rw-r--r--src/filters/blend.cpp15
-rw-r--r--src/filters/colormatrix.cpp7
-rw-r--r--src/filters/componenttransfer-funcnode.cpp25
-rw-r--r--src/filters/componenttransfer.cpp5
-rw-r--r--src/filters/composite.cpp19
-rw-r--r--src/filters/convolvematrix.cpp21
-rw-r--r--src/filters/diffuselighting.cpp19
-rw-r--r--src/filters/displacementmap.cpp15
-rw-r--r--src/filters/distantlight.cpp15
-rw-r--r--src/filters/flood.cpp7
-rw-r--r--src/filters/gaussian-blur.cpp7
-rw-r--r--src/filters/image.cpp13
-rw-r--r--src/filters/mergenode.cpp5
-rw-r--r--src/filters/morphology.cpp7
-rw-r--r--src/filters/offset.cpp11
-rw-r--r--src/filters/pointlight.cpp19
-rw-r--r--src/filters/specularlighting.cpp23
-rw-r--r--src/filters/spotlight.cpp39
-rw-r--r--src/filters/turbulence.cpp13
-rw-r--r--src/flood-context.cpp42
-rw-r--r--src/forward.h27
-rw-r--r--src/gradient-chemistry.cpp33
-rw-r--r--src/gradient-context.cpp21
-rw-r--r--src/gradient-drag.cpp37
-rw-r--r--src/graphlayout.cpp5
-rw-r--r--src/helper-fns.h12
-rw-r--r--src/helper/pixbuf-ops.cpp24
-rw-r--r--src/helper/png-write.cpp23
-rw-r--r--src/helper/stock-items.cpp42
-rw-r--r--src/id-clash.cpp15
-rw-r--r--src/ink-comboboxentry-action.cpp19
-rw-r--r--src/inkscape.cpp23
-rw-r--r--src/inkscape.h2
-rw-r--r--src/inkview.cpp33
-rw-r--r--src/interface.cpp81
-rw-r--r--src/interface.h9
-rw-r--r--src/jabber_whiteboard/dialog/choose-desktop.cpp6
-rw-r--r--src/jabber_whiteboard/node-tracker.cpp23
-rw-r--r--src/jabber_whiteboard/session-manager.cpp30
-rw-r--r--src/knot-holder-entity.cpp15
-rw-r--r--src/knot.cpp7
-rw-r--r--src/knotholder.cpp28
-rw-r--r--src/layer-fns.cpp7
-rw-r--r--src/layer-manager.cpp13
-rw-r--r--src/live_effects/effect.cpp10
-rw-r--r--src/live_effects/lpe-knot.cpp7
-rw-r--r--src/live_effects/lpe-mirror_symmetry.cpp4
-rw-r--r--src/live_effects/lpegroupbbox.cpp5
-rw-r--r--src/live_effects/lpeobject.cpp16
-rw-r--r--src/live_effects/parameter/path-reference.h2
-rw-r--r--src/live_effects/parameter/path.cpp15
-rw-r--r--src/lpe-tool-context.cpp9
-rw-r--r--src/main.cpp43
-rw-r--r--src/marker.cpp34
-rw-r--r--src/object-edit.cpp8
-rw-r--r--src/object-snapper.cpp44
-rw-r--r--src/path-chemistry.cpp41
-rw-r--r--src/persp3d.cpp58
-rw-r--r--src/pixmaps/cursor-attract.xpm2
-rw-r--r--src/pixmaps/cursor-repel.xpm2
-rw-r--r--src/print.cpp38
-rw-r--r--src/profile-manager.cpp5
-rw-r--r--src/rdf.cpp551
-rw-r--r--src/rdf.h36
-rw-r--r--src/rect-context.cpp20
-rw-r--r--src/removeoverlap.cpp3
-rw-r--r--src/satisfied-guide-cns.cpp2
-rw-r--r--src/selcue.cpp9
-rw-r--r--src/select-context.cpp21
-rw-r--r--src/selection-chemistry.cpp461
-rw-r--r--src/selection-chemistry.h2
-rw-r--r--src/selection-describer.cpp3
-rw-r--r--src/selection.cpp11
-rw-r--r--src/seltrans.cpp42
-rw-r--r--src/sp-anchor.cpp35
-rw-r--r--src/sp-animation.cpp45
-rw-r--r--src/sp-clippath.cpp170
-rw-r--r--src/sp-clippath.h107
-rw-r--r--src/sp-conn-end-pair.cpp15
-rw-r--r--src/sp-conn-end.cpp2
-rw-r--r--src/sp-defs.cpp74
-rw-r--r--src/sp-defs.h29
-rw-r--r--src/sp-ellipse.cpp43
-rw-r--r--src/sp-filter-primitive.cpp14
-rw-r--r--src/sp-filter.cpp41
-rw-r--r--src/sp-flowdiv.cpp676
-rw-r--r--src/sp-flowregion.cpp314
-rw-r--r--src/sp-flowtext.cpp139
-rw-r--r--src/sp-font-face.cpp202
-rw-r--r--src/sp-font.cpp43
-rw-r--r--src/sp-glyph-kerning.cpp55
-rw-r--r--src/sp-glyph.cpp75
-rw-r--r--src/sp-gradient-test.h15
-rw-r--r--src/sp-gradient.cpp91
-rw-r--r--src/sp-guide-attachment.h8
-rw-r--r--src/sp-guide.cpp68
-rw-r--r--src/sp-guide.h31
-rw-r--r--src/sp-image.cpp39
-rw-r--r--src/sp-item-group.cpp131
-rw-r--r--src/sp-item-notify-moveto.cpp6
-rw-r--r--src/sp-item-rm-unsatisfied-cns.cpp4
-rw-r--r--src/sp-item-transform.cpp21
-rw-r--r--src/sp-item-update-cns.cpp2
-rw-r--r--src/sp-item.cpp713
-rw-r--r--src/sp-item.h136
-rw-r--r--src/sp-line.cpp311
-rw-r--r--src/sp-line.h68
-rw-r--r--src/sp-lpe-item.cpp9
-rw-r--r--src/sp-mask.cpp135
-rw-r--r--src/sp-mask.h13
-rw-r--r--src/sp-missing-glyph.cpp25
-rw-r--r--src/sp-namedview.cpp324
-rw-r--r--src/sp-namedview.h11
-rw-r--r--src/sp-object-group.cpp177
-rw-r--r--src/sp-object-group.h46
-rw-r--r--src/sp-object-repr.cpp5
-rw-r--r--src/sp-object-repr.h10
-rw-r--r--src/sp-object.cpp700
-rw-r--r--src/sp-object.h146
-rw-r--r--src/sp-offset.cpp68
-rw-r--r--src/sp-path.cpp39
-rw-r--r--src/sp-pattern.cpp132
-rw-r--r--src/sp-pattern.h9
-rw-r--r--src/sp-polygon.cpp9
-rw-r--r--src/sp-polyline.cpp233
-rw-r--r--src/sp-polyline.h45
-rw-r--r--src/sp-rect.cpp30
-rw-r--r--src/sp-rect.h18
-rw-r--r--src/sp-root.cpp51
-rw-r--r--src/sp-script.cpp18
-rw-r--r--src/sp-shape.cpp241
-rw-r--r--src/sp-shape.h86
-rw-r--r--src/sp-skeleton.cpp27
-rw-r--r--src/sp-spiral.cpp27
-rw-r--r--src/sp-star.cpp33
-rw-r--r--src/sp-stop.cpp2
-rw-r--r--src/sp-string.cpp27
-rw-r--r--src/sp-style-elem-test.h39
-rw-r--r--src/sp-style-elem.cpp7
-rw-r--r--src/sp-switch.cpp27
-rw-r--r--src/sp-symbol.cpp17
-rw-r--r--src/sp-text.cpp123
-rw-r--r--src/sp-textpath.h2
-rw-r--r--src/sp-tref-reference.h2
-rw-r--r--src/sp-tref.cpp35
-rw-r--r--src/sp-tspan.cpp132
-rw-r--r--src/sp-use-reference.cpp2
-rw-r--r--src/sp-use-reference.h1
-rw-r--r--src/sp-use.cpp59
-rw-r--r--src/spiral-context.cpp25
-rw-r--r--src/splivarot.cpp118
-rw-r--r--src/spray-context.cpp36
-rw-r--r--src/star-context.cpp22
-rw-r--r--src/style-test.h3
-rw-r--r--src/style.cpp13
-rw-r--r--src/svg-view-widget.cpp7
-rw-r--r--src/svg-view.cpp29
-rw-r--r--src/svg/svg-path-geom-test.h60
-rw-r--r--src/test-helpers.h5
-rw-r--r--src/text-chemistry.cpp49
-rw-r--r--src/text-context.cpp119
-rw-r--r--src/text-editing.cpp242
-rw-r--r--src/text-editing.h20
-rw-r--r--src/trace/trace.cpp17
-rw-r--r--src/tweak-context.cpp96
-rw-r--r--src/ui/clipboard.cpp68
-rw-r--r--src/ui/context-menu.cpp12
-rw-r--r--src/ui/context-menu.h7
-rw-r--r--src/ui/dialog/aboutbox.cpp11
-rw-r--r--src/ui/dialog/align-and-distribute.cpp66
-rw-r--r--src/ui/dialog/color-item.cpp7
-rw-r--r--src/ui/dialog/document-properties.cpp40
-rw-r--r--src/ui/dialog/filedialogimpl-gtkmm.cpp13
-rw-r--r--src/ui/dialog/filedialogimpl-win32.cpp25
-rw-r--r--src/ui/dialog/filter-effects-dialog.cpp75
-rw-r--r--src/ui/dialog/find.cpp10
-rw-r--r--src/ui/dialog/glyphs.cpp5
-rw-r--r--src/ui/dialog/guides.cpp13
-rw-r--r--src/ui/dialog/icon-preview.cpp8
-rw-r--r--src/ui/dialog/layer-properties.cpp9
-rw-r--r--src/ui/dialog/layers.cpp11
-rw-r--r--src/ui/dialog/livepatheffect-editor.cpp21
-rw-r--r--src/ui/dialog/print.cpp11
-rw-r--r--src/ui/dialog/session-player.cpp3
-rw-r--r--src/ui/dialog/svg-fonts-dialog.cpp85
-rw-r--r--src/ui/dialog/swatches.cpp27
-rw-r--r--src/ui/dialog/tile.cpp25
-rw-r--r--src/ui/dialog/transformation.cpp31
-rw-r--r--src/ui/dialog/undo-history.cpp11
-rw-r--r--src/ui/tool/multi-path-manipulator.cpp7
-rw-r--r--src/ui/tool/node-tool.cpp36
-rw-r--r--src/ui/tool/path-manipulator.cpp30
-rw-r--r--src/ui/view/view.cpp5
-rw-r--r--src/ui/widget/color-picker.cpp7
-rw-r--r--src/ui/widget/dock-item.cpp28
-rw-r--r--src/ui/widget/entity-entry.cpp33
-rw-r--r--src/ui/widget/imageicon.cpp15
-rw-r--r--src/ui/widget/layer-selector.cpp9
-rw-r--r--src/ui/widget/licensor.cpp5
-rw-r--r--src/ui/widget/object-composite-settings.cpp5
-rw-r--r--src/ui/widget/page-sizer.cpp9
-rw-r--r--src/ui/widget/registered-widget.cpp11
-rw-r--r--src/ui/widget/registered-widget.h13
-rw-r--r--src/ui/widget/ruler.cpp8
-rw-r--r--src/ui/widget/selected-style.cpp109
-rw-r--r--src/ui/widget/style-subject.cpp3
-rw-r--r--src/ui/widget/tolerance-slider.cpp7
-rw-r--r--src/unclump.cpp20
-rw-r--r--src/uri-references.h2
-rw-r--r--src/vanishing-point.cpp17
-rw-r--r--src/verbs.cpp49
-rw-r--r--src/widgets/CMakeLists.txt1
-rw-r--r--src/widgets/Makefile_insert2
-rw-r--r--src/widgets/desktop-widget.cpp36
-rw-r--r--src/widgets/desktop-widget.h2
-rw-r--r--src/widgets/ege-paint-def.cpp25
-rw-r--r--src/widgets/fill-style.cpp39
-rw-r--r--src/widgets/gradient-selector.cpp2
-rw-r--r--src/widgets/gradient-toolbar.cpp8
-rw-r--r--src/widgets/gradient-vector.cpp41
-rw-r--r--src/widgets/icon.cpp25
-rw-r--r--src/widgets/paint-selector.cpp7
-rw-r--r--src/widgets/select-toolbar.cpp6
-rw-r--r--src/widgets/sp-attribute-widget.cpp11
-rw-r--r--src/widgets/sp-color-icc-selector.cpp2
-rw-r--r--src/widgets/sp-color-wheel-selector.cpp88
-rw-r--r--src/widgets/sp-color-wheel-selector.h5
-rw-r--r--src/widgets/sp-color-wheel.cpp1161
-rw-r--r--src/widgets/sp-color-wheel.h80
-rw-r--r--src/widgets/sp-xmlview-content.cpp9
-rw-r--r--src/widgets/stroke-style.cpp44
-rw-r--r--src/widgets/swatch-selector.cpp4
-rw-r--r--src/widgets/toolbox.cpp162
-rw-r--r--src/xml/helper-observer.cpp10
-rw-r--r--src/xml/node-iterators.h1
-rw-r--r--src/xml/rebase-hrefs.cpp7
-rw-r--r--src/xml/repr-io.cpp2
-rw-r--r--src/xml/repr-sorting.cpp42
-rw-r--r--src/xml/repr-sorting.h10
-rw-r--r--src/xml/repr-util.cpp49
-rw-r--r--src/xml/repr.cpp2
-rw-r--r--src/xml/repr.h28
343 files changed, 12089 insertions, 10869 deletions
diff --git a/configure.ac b/configure.ac
index 9cb50b06e..5b66ddc2c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -612,11 +612,12 @@ if test "x$popplernew" = "xyes"; then
AC_DEFINE(POPPLER_NEW_GFXFONT, 1, [Use GfxFont from Poppler >= 0.8.3])
fi
-AC_MSG_CHECKING(for new color space API in Poppler)
ink_svd_CPPFLAGS=$CPPFLAGS
ink_svd_LIBS=$LIBS
CPPFLAGS="$CPPFLAGS $POPPLER_CFLAGS"
LIBS="$LIBS $POPPLER_LIBS"
+
+AC_MSG_CHECKING(for new color space API in Poppler)
popplercolor="no"
AC_COMPILE_IFELSE([
#include <GfxState.h>
@@ -628,9 +629,6 @@ int main() {
return 0;
}
], [popplercolor=yes])
-CPPFLAGS=$ink_svd_CPPFLAGS
-LIBS=$ink_svd_LIBS
-
if test "x$popplercolor" = "xyes"; then
AC_DEFINE(POPPLER_NEW_COLOR_SPACE_API, 1, [Use color space API from Poppler >= 0.12.2])
AC_MSG_RESULT(yes)
@@ -638,6 +636,29 @@ else
AC_MSG_RESULT(no)
fi
+# Poppler's b604a008 commit changes this
+AC_MSG_CHECKING([whether Poppler's GfxPatch no longer uses GfxColor])
+popplergfxcolor="no"
+AC_COMPILE_IFELSE([
+#include <GfxState.h>
+
+int main() {
+ GfxPatch::ColorValue color = {c: {0}};
+ GfxPatch patch;
+ patch.color[[0]][[0]] = color;
+ return 0;
+}
+], [popplergfxcolor=yes])
+if test "x$popplergfxcolor" = "xyes"; then
+ AC_DEFINE(POPPLER_NEW_GFXPATCH, 1, [GfxPatch no longer uses GfxColor in >= 0.15.1])
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+
+CPPFLAGS=$ink_svd_CPPFLAGS
+LIBS=$ink_svd_LIBS
+
dnl ******************************
dnl Inkboard dependency checking
dnl ******************************
diff --git a/po/fr.po b/po/fr.po
index 5ede6a23a..5ede6a23a 100755..100644
--- a/po/fr.po
+++ b/po/fr.po
diff --git a/po/inkscape.pot b/po/inkscape.pot
index 9dcfb005a..fb4ee43dd 100644
--- a/po/inkscape.pot
+++ b/po/inkscape.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2010-11-02 18:43+0100\n"
+"POT-Creation-Date: 2010-12-09 17:55+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -197,7 +197,7 @@ msgstr ""
msgid "Blue Function:"
msgstr ""
-#: ../share/extensions/color_custom.inx.h:10 ../src/interface.cpp:834
+#: ../share/extensions/color_custom.inx.h:10 ../src/interface.cpp:839
#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1418
msgid "Custom"
msgstr ""
@@ -352,19 +352,7 @@ msgstr ""
msgid "Randomize"
msgstr ""
-#: ../share/extensions/color_randomize.inx.h:8
-msgid "Randomize hue"
-msgstr ""
-
-#: ../share/extensions/color_randomize.inx.h:9
-msgid "Randomize lightness"
-msgstr ""
-
-#: ../share/extensions/color_randomize.inx.h:10
-msgid "Randomize saturation"
-msgstr ""
-
-#: ../share/extensions/color_randomize.inx.h:11 ../src/flood-context.cpp:251
+#: ../share/extensions/color_randomize.inx.h:8 ../src/flood-context.cpp:251
#: ../src/ui/dialog/inkscape-preferences.cpp:888
#: ../src/widgets/sp-color-icc-selector.cpp:236
#: ../src/widgets/sp-color-icc-selector.cpp:237
@@ -1615,7 +1603,7 @@ msgid "Other Attribute:"
msgstr ""
#: ../share/extensions/interp_att_g.inx.h:19
-#: ../src/selection-chemistry.cpp:1655 ../src/seltrans.cpp:527
+#: ../src/selection-chemistry.cpp:1664 ../src/seltrans.cpp:512
#: ../src/ui/dialog/transformation.cpp:748
msgid "Scale"
msgstr ""
@@ -2024,7 +2012,7 @@ msgstr ""
#. File
#: ../share/extensions/jessyInk_mouseHandler.inx.h:1
#: ../share/extensions/jessyInk_transitions.inx.h:2 ../src/filter-enums.cpp:70
-#: ../src/interface.cpp:833 ../src/verbs.cpp:2225
+#: ../src/interface.cpp:838 ../src/verbs.cpp:2225
msgid "Default"
msgstr ""
@@ -3471,7 +3459,7 @@ msgid "Weekend:"
msgstr ""
#: ../share/extensions/svgcalendar.inx.h:32
-msgid "Year (0 for current):"
+msgid "Year (4 digits):"
msgstr ""
#: ../share/extensions/svgcalendar.inx.h:33
@@ -3719,7 +3707,7 @@ msgid "Middle and Right"
msgstr ""
#: ../share/extensions/webslicer_create_rect.inx.h:26
-#: ../src/extension/extension.cpp:740 ../src/ui/dialog/input.cpp:592
+#: ../src/extension/extension.cpp:738 ../src/ui/dialog/input.cpp:592
msgid "Name:"
msgstr ""
@@ -3817,7 +3805,7 @@ msgid ""
msgstr ""
#: ../share/extensions/web-set-att.inx.h:7
-#: ../share/extensions/web-transmit-att.inx.h:7 ../src/interface.cpp:1555
+#: ../share/extensions/web-transmit-att.inx.h:7 ../src/interface.cpp:1560
msgid "Replace"
msgstr ""
@@ -4250,7 +4238,7 @@ msgid ""
"added."
msgstr ""
-#: ../share/extensions/inkex.py:67
+#: ../share/extensions/inkex.py:78
#, python-format
msgid ""
"The fantastic lxml wrapper for libxml2 is required by inkex.py and therefore "
@@ -4262,7 +4250,7 @@ msgid ""
"%s"
msgstr ""
-#: ../share/extensions/inkex.py:231
+#: ../share/extensions/inkex.py:242
#, python-format
msgid "No matching node for expression: %s"
msgstr ""
@@ -4483,7 +4471,6 @@ msgstr ""
#: ../share/filters/filters.svg.h:176 ../share/filters/filters.svg.h:214
#: ../src/extension/internal/filter/drop-shadow.h:45
#: ../src/extension/internal/filter/drop-shadow.h:105
-#: ../src/extension/internal/filter/drop-shadow.h:165
msgid "Shadows and Glows"
msgstr ""
@@ -6317,2326 +6304,2326 @@ msgstr ""
msgid "Create a tritone palette with hue selectable by flood"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:4
msgctxt "Palette"
msgid "Blue1"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:7
msgctxt "Palette"
msgid "Blue2"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:10
msgctxt "Palette"
msgid "Blue3"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:13
msgctxt "Palette"
msgid "Red1"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:16
msgctxt "Palette"
msgid "Red2"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:19
msgctxt "Palette"
msgid "Red3"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:22
msgctxt "Palette"
msgid "Orange1"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:25
msgctxt "Palette"
msgid "Orange2"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:28
msgctxt "Palette"
msgid "Orange3"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:31
msgctxt "Palette"
msgid "Brown1"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:34
msgctxt "Palette"
msgid "Brown2"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:37
msgctxt "Palette"
msgid "Brown3"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:40
msgctxt "Palette"
msgid "Green1"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:43
msgctxt "Palette"
msgid "Green2"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:46
msgctxt "Palette"
msgid "Green3"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:49
msgctxt "Palette"
msgid "Purple1"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:52
msgctxt "Palette"
msgid "Purple2"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:55
msgctxt "Palette"
msgid "Purple3"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:58
msgctxt "Palette"
msgid "Metalic1"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:61
msgctxt "Palette"
msgid "Metalic2"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:64
msgctxt "Palette"
msgid "Metalic3"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:67
msgctxt "Palette"
msgid "Metalic4"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:70
msgctxt "Palette"
msgid "Grey1"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:73
msgctxt "Palette"
msgid "Grey2"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:76
msgctxt "Palette"
msgid "Grey3"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:79
msgctxt "Palette"
msgid "Grey4"
msgstr ""
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:82
msgctxt "Palette"
msgid "Grey5"
msgstr ""
-#. Palette: inkscape.gpl
-#. Palette: Ubuntu.gpl
+#. Palette: ./inkscape.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:85 ../share/palettes/palettes.h:1192
msgctxt "Palette"
msgid "Black"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:89
#, no-c-format
msgctxt "Palette"
msgid "90% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:93
#, no-c-format
msgctxt "Palette"
msgid "80% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:97
#, no-c-format
msgctxt "Palette"
msgid "70% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:101
#, no-c-format
msgctxt "Palette"
msgid "60% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:105
#, no-c-format
msgctxt "Palette"
msgid "50% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:109
#, no-c-format
msgctxt "Palette"
msgid "40% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:113
#, no-c-format
msgctxt "Palette"
msgid "30% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:117
#, no-c-format
msgctxt "Palette"
msgid "20% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:121
#, no-c-format
msgctxt "Palette"
msgid "10% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:125
#, no-c-format
msgctxt "Palette"
msgid "7.5% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:129
#, no-c-format
msgctxt "Palette"
msgid "5% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:133
#, no-c-format
msgctxt "Palette"
msgid "2.5% Gray"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:136
msgctxt "Palette"
msgid "White"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:139
msgctxt "Palette"
msgid "Maroon (#800000)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:142
msgctxt "Palette"
msgid "Red (#FF0000)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:145
msgctxt "Palette"
msgid "Olive (#808000)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:148
msgctxt "Palette"
msgid "Yellow (#FFFF00)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:151
msgctxt "Palette"
msgid "Green (#008000)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:154
msgctxt "Palette"
msgid "Lime (#00FF00)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:157
msgctxt "Palette"
msgid "Teal (#008080)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:160
msgctxt "Palette"
msgid "Aqua (#00FFFF)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:163
msgctxt "Palette"
msgid "Navy (#000080)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:166
msgctxt "Palette"
msgid "Blue (#0000FF)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:169
msgctxt "Palette"
msgid "Purple (#800080)"
msgstr ""
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:172
msgctxt "Palette"
msgid "Fuchsia (#FF00FF)"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:175
msgctxt "Palette"
msgid "default outer 1"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:178
msgctxt "Palette"
msgid "default outer 2"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:181
msgctxt "Palette"
msgid "default outer 3"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:184
msgctxt "Palette"
msgid "default block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:187
msgctxt "Palette"
msgid "default added blue"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:190
msgctxt "Palette"
msgid "default block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:193
msgctxt "Palette"
msgid "default alert block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:196
msgctxt "Palette"
msgid "default added red"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:199
msgctxt "Palette"
msgid "default alert block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:202
msgctxt "Palette"
msgid "default example block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:205
msgctxt "Palette"
msgid "default added green"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:208
msgctxt "Palette"
msgid "default example block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:211
msgctxt "Palette"
msgid "default covered text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:214
msgctxt "Palette"
msgid "default covered bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:217
msgctxt "Palette"
msgid "default background"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:220
msgctxt "Palette"
msgid "default text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:223
msgctxt "Palette"
msgid "default light outer 1"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:226
msgctxt "Palette"
msgid "default light outer 2"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:229
msgctxt "Palette"
msgid "default light outer 3"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:232
msgctxt "Palette"
msgid "default light block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:235
msgctxt "Palette"
msgid "default light block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:238
msgctxt "Palette"
msgid "default light block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:241
msgctxt "Palette"
msgid "default light alert block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:244
msgctxt "Palette"
msgid "default light alert block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:247
msgctxt "Palette"
msgid "default light alert block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:250
msgctxt "Palette"
msgid "default light example block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:253
msgctxt "Palette"
msgid "default light example block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:256
msgctxt "Palette"
msgid "default light example block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:259
msgctxt "Palette"
msgid "default light covered text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:262
msgctxt "Palette"
msgid "default light covered bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:265
msgctxt "Palette"
msgid "default light background"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:268
msgctxt "Palette"
msgid "default light text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:271
msgctxt "Palette"
msgid "beetle outer 1"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:274
msgctxt "Palette"
msgid "beetle outer 2"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:277
msgctxt "Palette"
msgid "beetle outer 3"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:280 ../share/palettes/palettes.h:283
#: ../share/palettes/palettes.h:286
msgctxt "Palette"
msgid "beetle added blue"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:289
msgctxt "Palette"
msgid "beetle added red"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:292
msgctxt "Palette"
msgid "beetle alert block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:295
msgctxt "Palette"
msgid "beetle added green"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:298
msgctxt "Palette"
msgid "beetle example block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:301
msgctxt "Palette"
msgid "beetle header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:304 ../share/palettes/palettes.h:316
msgctxt "Palette"
msgid "beetle added grey"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:307
msgctxt "Palette"
msgid "beetle covered bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:310
msgctxt "Palette"
msgid "beetle background"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:313
msgctxt "Palette"
msgid "beetle covered text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:319
msgctxt "Palette"
msgid "beetle text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:322
msgctxt "Palette"
msgid "albatross outer 1"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:325
msgctxt "Palette"
msgid "albatross outer 2"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:328
msgctxt "Palette"
msgid "albatross outer 3"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:331
msgctxt "Palette"
msgid "albatross background"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:334
msgctxt "Palette"
msgid "albatross block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:337
msgctxt "Palette"
msgid "albatross block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:340
msgctxt "Palette"
msgid "albatross header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:343
msgctxt "Palette"
msgid "albatross bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:346
msgctxt "Palette"
msgid "albatross covered bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:349
msgctxt "Palette"
msgid "albatross covered text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:352
msgctxt "Palette"
msgid "albatross added red"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:355
msgctxt "Palette"
msgid "albatross alert block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:358
msgctxt "Palette"
msgid "albatross added green"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:361
msgctxt "Palette"
msgid "albatross example block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:364
msgctxt "Palette"
msgid "albatross text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:367
msgctxt "Palette"
msgid "albatross added yellow"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:370
msgctxt "Palette"
msgid "albatross added white"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:373
msgctxt "Palette"
msgid "fly text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:376 ../share/palettes/palettes.h:385
msgctxt "Palette"
msgid "fly added grey"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:379
msgctxt "Palette"
msgid "fly outer"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:382
msgctxt "Palette"
msgid "fly background"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:388
msgctxt "Palette"
msgid "fly header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:391
msgctxt "Palette"
msgid "fly covered bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:394
msgctxt "Palette"
msgid "fly covered text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:397
msgctxt "Palette"
msgid "fly added red"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:400
msgctxt "Palette"
msgid "fly alert block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:403
msgctxt "Palette"
msgid "fly added green"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:406
msgctxt "Palette"
msgid "fly example block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:409
msgctxt "Palette"
msgid "fly added blue"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:412
msgctxt "Palette"
msgid "fly added default blue"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:415
msgctxt "Palette"
msgid "seagull outer 1"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:418
msgctxt "Palette"
msgid "seagull outer 2"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:421
msgctxt "Palette"
msgid "seagull outer 3"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:424
msgctxt "Palette"
msgid "seagull block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:427
msgctxt "Palette"
msgid "seagull added grey"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:430
msgctxt "Palette"
msgid "seagull block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:433
msgctxt "Palette"
msgid "seagull covered text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:436
msgctxt "Palette"
msgid "seagull covered bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:439
msgctxt "Palette"
msgid "seagull background"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:442
msgctxt "Palette"
msgid "seagull text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:445
msgctxt "Palette"
msgid "beaver outer frame"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:448 ../share/palettes/palettes.h:451
#: ../share/palettes/palettes.h:475
msgctxt "Palette"
msgid "beaver added red"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:454
msgctxt "Palette"
msgid "beaver outer 1"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:457
msgctxt "Palette"
msgid "beaver outer 2"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:460
msgctxt "Palette"
msgid "beaver outer 3"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:463
msgctxt "Palette"
msgid "beaver added blue"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:466
msgctxt "Palette"
msgid "beaver block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:469
msgctxt "Palette"
msgid "beaver added green"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:472
msgctxt "Palette"
msgid "beaver example block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:478
msgctxt "Palette"
msgid "beaver alert block header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:481
msgctxt "Palette"
msgid "beaver covered text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:484
msgctxt "Palette"
msgid "beaver covered bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:487
msgctxt "Palette"
msgid "beaver background"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:490
msgctxt "Palette"
msgid "beaver text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:493
msgctxt "Palette"
msgid "crane outer 1"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:496
msgctxt "Palette"
msgid "crane outer 2"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:499
msgctxt "Palette"
msgid "crane outer 3"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:502
msgctxt "Palette"
msgid "crane block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:505
msgctxt "Palette"
msgid "crane added orange"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:508
msgctxt "Palette"
msgid "crane block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:511
msgctxt "Palette"
msgid "crane alert block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:514
msgctxt "Palette"
msgid "crane added red"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:517
msgctxt "Palette"
msgid "crane alert block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:520
msgctxt "Palette"
msgid "crane example block"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:523
msgctxt "Palette"
msgid "crane added green"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:526
msgctxt "Palette"
msgid "crane example block header"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:529
msgctxt "Palette"
msgid "crane covered text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:532
msgctxt "Palette"
msgid "crane covered bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:535
msgctxt "Palette"
msgid "crane bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:538
msgctxt "Palette"
msgid "crane background"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:541
msgctxt "Palette"
msgid "crane text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:544
msgctxt "Palette"
msgid "wolverine outer 1"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:547
msgctxt "Palette"
msgid "wolverine outer 2"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:550
msgctxt "Palette"
msgid "wolverine outer 3"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:553
msgctxt "Palette"
msgid "wolverine outer 4"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:556
msgctxt "Palette"
msgid "wolverine added yellow"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:559
msgctxt "Palette"
msgid "wolverine added blue"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:562
msgctxt "Palette"
msgid "wolverine header text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:565
msgctxt "Palette"
msgid "wolverine added green"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:568
msgctxt "Palette"
msgid "wolverine example block title"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:571
msgctxt "Palette"
msgid "wolverine covered text"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:574
msgctxt "Palette"
msgid "wolverine covered bullet"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:577
msgctxt "Palette"
msgid "wolverine background"
msgstr ""
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:580
msgctxt "Palette"
msgid "wolverine text"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:583
msgctxt "Palette"
msgid "black (#000000)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:586
msgctxt "Palette"
msgid "dimgray (#696969)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:589
msgctxt "Palette"
msgid "gray (#808080)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:592
msgctxt "Palette"
msgid "darkgray (#A9A9A9)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:595
msgctxt "Palette"
msgid "silver (#C0C0C0)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:598
msgctxt "Palette"
msgid "lightgray (#D3D3D3)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:601
msgctxt "Palette"
msgid "gainsboro (#DCDCDC)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:604
msgctxt "Palette"
msgid "whitesmoke (#F5F5F5)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:607
msgctxt "Palette"
msgid "white (#FFFFFF)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:610
msgctxt "Palette"
msgid "rosybrown (#BC8F8F)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:613
msgctxt "Palette"
msgid "indianred (#CD5C5C)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:616
msgctxt "Palette"
msgid "brown (#A52A2A)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:619
msgctxt "Palette"
msgid "firebrick (#B22222)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:622
msgctxt "Palette"
msgid "lightcoral (#F08080)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:625
msgctxt "Palette"
msgid "maroon (#800000)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:628
msgctxt "Palette"
msgid "darkred (#8B0000)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:631
msgctxt "Palette"
msgid "red (#FF0000)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:634
msgctxt "Palette"
msgid "snow (#FFFAFA)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:637
msgctxt "Palette"
msgid "mistyrose (#FFE4E1)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:640
msgctxt "Palette"
msgid "salmon (#FA8072)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:643
msgctxt "Palette"
msgid "tomato (#FF6347)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:646
msgctxt "Palette"
msgid "darksalmon (#E9967A)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:649
msgctxt "Palette"
msgid "coral (#FF7F50)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:652
msgctxt "Palette"
msgid "orangered (#FF4500)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:655
msgctxt "Palette"
msgid "lightsalmon (#FFA07A)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:658
msgctxt "Palette"
msgid "sienna (#A0522D)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:661
msgctxt "Palette"
msgid "seashell (#FFF5EE)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:664
msgctxt "Palette"
msgid "chocolate (#D2691E)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:667
msgctxt "Palette"
msgid "saddlebrown (#8B4513)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:670
msgctxt "Palette"
msgid "sandybrown (#F4A460)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:673
msgctxt "Palette"
msgid "peachpuff (#FFDAB9)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:676
msgctxt "Palette"
msgid "peru (#CD853F)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:679
msgctxt "Palette"
msgid "linen (#FAF0E6)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:682
msgctxt "Palette"
msgid "bisque (#FFE4C4)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:685
msgctxt "Palette"
msgid "darkorange (#FF8C00)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:688
msgctxt "Palette"
msgid "burlywood (#DEB887)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:691
msgctxt "Palette"
msgid "tan (#D2B48C)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:694
msgctxt "Palette"
msgid "antiquewhite (#FAEBD7)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:697
msgctxt "Palette"
msgid "navajowhite (#FFDEAD)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:700
msgctxt "Palette"
msgid "blanchedalmond (#FFEBCD)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:703
msgctxt "Palette"
msgid "papayawhip (#FFEFD5)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:706
msgctxt "Palette"
msgid "moccasin (#FFE4B5)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:709
msgctxt "Palette"
msgid "orange (#FFA500)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:712
msgctxt "Palette"
msgid "wheat (#F5DEB3)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:715
msgctxt "Palette"
msgid "oldlace (#FDF5E6)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:718
msgctxt "Palette"
msgid "floralwhite (#FFFAF0)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:721
msgctxt "Palette"
msgid "darkgoldenrod (#B8860B)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:724
msgctxt "Palette"
msgid "goldenrod (#DAA520)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:727
msgctxt "Palette"
msgid "cornsilk (#FFF8DC)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:730
msgctxt "Palette"
msgid "gold (#FFD700)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:733
msgctxt "Palette"
msgid "khaki (#F0E68C)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:736
msgctxt "Palette"
msgid "lemonchiffon (#FFFACD)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:739
msgctxt "Palette"
msgid "palegoldenrod (#EEE8AA)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:742
msgctxt "Palette"
msgid "darkkhaki (#BDB76B)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:745
msgctxt "Palette"
msgid "beige (#F5F5DC)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:748
msgctxt "Palette"
msgid "lightgoldenrodyellow (#FAFAD2)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:751
msgctxt "Palette"
msgid "olive (#808000)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:754
msgctxt "Palette"
msgid "yellow (#FFFF00)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:757
msgctxt "Palette"
msgid "lightyellow (#FFFFE0)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:760
msgctxt "Palette"
msgid "ivory (#FFFFF0)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:763
msgctxt "Palette"
msgid "olivedrab (#6B8E23)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:766
msgctxt "Palette"
msgid "yellowgreen (#9ACD32)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:769
msgctxt "Palette"
msgid "darkolivegreen (#556B2F)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:772
msgctxt "Palette"
msgid "greenyellow (#ADFF2F)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:775
msgctxt "Palette"
msgid "chartreuse (#7FFF00)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:778
msgctxt "Palette"
msgid "lawngreen (#7CFC00)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:781
msgctxt "Palette"
msgid "darkseagreen (#8FBC8F)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:784
msgctxt "Palette"
msgid "forestgreen (#228B22)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:787
msgctxt "Palette"
msgid "limegreen (#32CD32)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:790
msgctxt "Palette"
msgid "lightgreen (#90EE90)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:793
msgctxt "Palette"
msgid "palegreen (#98FB98)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:796
msgctxt "Palette"
msgid "darkgreen (#006400)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:799
msgctxt "Palette"
msgid "green (#008000)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:802
msgctxt "Palette"
msgid "lime (#00FF00)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:805
msgctxt "Palette"
msgid "honeydew (#F0FFF0)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:808
msgctxt "Palette"
msgid "seagreen (#2E8B57)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:811
msgctxt "Palette"
msgid "mediumseagreen (#3CB371)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:814
msgctxt "Palette"
msgid "springgreen (#00FF7F)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:817
msgctxt "Palette"
msgid "mintcream (#F5FFFA)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:820
msgctxt "Palette"
msgid "mediumspringgreen (#00FA9A)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:823
msgctxt "Palette"
msgid "mediumaquamarine (#66CDAA)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:826
msgctxt "Palette"
msgid "aquamarine (#7FFFD4)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:829
msgctxt "Palette"
msgid "turquoise (#40E0D0)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:832
msgctxt "Palette"
msgid "lightseagreen (#20B2AA)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:835
msgctxt "Palette"
msgid "mediumturquoise (#48D1CC)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:838
msgctxt "Palette"
msgid "darkslategray (#2F4F4F)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:841
msgctxt "Palette"
msgid "paleturquoise (#AFEEEE)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:844
msgctxt "Palette"
msgid "teal (#008080)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:847
msgctxt "Palette"
msgid "darkcyan (#008B8B)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:850
msgctxt "Palette"
msgid "cyan (#00FFFF)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:853
msgctxt "Palette"
msgid "lightcyan (#E0FFFF)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:856
msgctxt "Palette"
msgid "azure (#F0FFFF)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:859
msgctxt "Palette"
msgid "darkturquoise (#00CED1)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:862
msgctxt "Palette"
msgid "cadetblue (#5F9EA0)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:865
msgctxt "Palette"
msgid "powderblue (#B0E0E6)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:868
msgctxt "Palette"
msgid "lightblue (#ADD8E6)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:871
msgctxt "Palette"
msgid "deepskyblue (#00BFFF)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:874
msgctxt "Palette"
msgid "skyblue (#87CEEB)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:877
msgctxt "Palette"
msgid "lightskyblue (#87CEFA)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:880
msgctxt "Palette"
msgid "steelblue (#4682B4)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:883
msgctxt "Palette"
msgid "aliceblue (#F0F8FF)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:886
msgctxt "Palette"
msgid "dodgerblue (#1E90FF)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:889
msgctxt "Palette"
msgid "slategray (#708090)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:892
msgctxt "Palette"
msgid "lightslategray (#778899)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:895
msgctxt "Palette"
msgid "lightsteelblue (#B0C4DE)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:898
msgctxt "Palette"
msgid "cornflowerblue (#6495ED)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:901
msgctxt "Palette"
msgid "royalblue (#4169E1)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:904
msgctxt "Palette"
msgid "midnightblue (#191970)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:907
msgctxt "Palette"
msgid "lavender (#E6E6FA)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:910
msgctxt "Palette"
msgid "navy (#000080)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:913
msgctxt "Palette"
msgid "darkblue (#00008B)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:916
msgctxt "Palette"
msgid "mediumblue (#0000CD)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:919
msgctxt "Palette"
msgid "blue (#0000FF)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:922
msgctxt "Palette"
msgid "ghostwhite (#F8F8FF)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:925
msgctxt "Palette"
msgid "slateblue (#6A5ACD)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:928
msgctxt "Palette"
msgid "darkslateblue (#483D8B)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:931
msgctxt "Palette"
msgid "mediumslateblue (#7B68EE)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:934
msgctxt "Palette"
msgid "mediumpurple (#9370DB)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:937
msgctxt "Palette"
msgid "blueviolet (#8A2BE2)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:940
msgctxt "Palette"
msgid "indigo (#4B0082)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:943
msgctxt "Palette"
msgid "darkorchid (#9932CC)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:946
msgctxt "Palette"
msgid "darkviolet (#9400D3)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:949
msgctxt "Palette"
msgid "mediumorchid (#BA55D3)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:952
msgctxt "Palette"
msgid "thistle (#D8BFD8)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:955
msgctxt "Palette"
msgid "plum (#DDA0DD)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:958
msgctxt "Palette"
msgid "violet (#EE82EE)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:961
msgctxt "Palette"
msgid "purple (#800080)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:964
msgctxt "Palette"
msgid "darkmagenta (#8B008B)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:967
msgctxt "Palette"
msgid "magenta (#FF00FF)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:970
msgctxt "Palette"
msgid "orchid (#DA70D6)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:973
msgctxt "Palette"
msgid "mediumvioletred (#C71585)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:976
msgctxt "Palette"
msgid "deeppink (#FF1493)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:979
msgctxt "Palette"
msgid "hotpink (#FF69B4)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:982
msgctxt "Palette"
msgid "lavenderblush (#FFF0F5)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:985
msgctxt "Palette"
msgid "palevioletred (#DB7093)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:988
msgctxt "Palette"
msgid "crimson (#DC143C)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:991
msgctxt "Palette"
msgid "pink (#FFC0CB)"
msgstr ""
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:994
msgctxt "Palette"
msgid "lightpink (#FFB6C1)"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:997
msgctxt "Palette"
msgid "Butter 1"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1000
msgctxt "Palette"
msgid "Butter 2"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1003
msgctxt "Palette"
msgid "Butter 3"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1006
msgctxt "Palette"
msgid "Chameleon 1"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1009
msgctxt "Palette"
msgid "Chameleon 2"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1012
msgctxt "Palette"
msgid "Chameleon 3"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1015
msgctxt "Palette"
msgid "Orange 1"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1018
msgctxt "Palette"
msgid "Orange 2"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1021
msgctxt "Palette"
msgid "Orange 3"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1024
msgctxt "Palette"
msgid "Sky Blue 1"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1027
msgctxt "Palette"
msgid "Sky Blue 2"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1030
msgctxt "Palette"
msgid "Sky Blue 3"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1033
msgctxt "Palette"
msgid "Plum 1"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1036
msgctxt "Palette"
msgid "Plum 2"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1039
msgctxt "Palette"
msgid "Plum 3"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1042
msgctxt "Palette"
msgid "Chocolate 1"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1045
msgctxt "Palette"
msgid "Chocolate 2"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1048
msgctxt "Palette"
msgid "Chocolate 3"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1051
msgctxt "Palette"
msgid "Scarlet Red 1"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1054
msgctxt "Palette"
msgid "Scarlet Red 2"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1057
msgctxt "Palette"
msgid "Scarlet Red 3"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1060
msgctxt "Palette"
msgid "Aluminium 1"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1063
msgctxt "Palette"
msgid "Aluminium 2"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1066
msgctxt "Palette"
msgid "Aluminium 3"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1069
msgctxt "Palette"
msgid "Aluminium 4"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1072
msgctxt "Palette"
msgid "Aluminium 5"
msgstr ""
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1075
msgctxt "Palette"
msgid "Aluminium 6"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1078
msgctxt "Palette"
msgid "Orange Hilight"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1081
msgctxt "Palette"
msgid "Orange"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1084
msgctxt "Palette"
msgid "Orange Base"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1087
msgctxt "Palette"
msgid "Orange Shadow"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1090
msgctxt "Palette"
msgid "Accent Yellow Highlight"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1093
msgctxt "Palette"
msgid "Yellow"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1096
msgctxt "Palette"
msgid "Accent Yellow Base"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1099
msgctxt "Palette"
msgid "Accent Yellow Shadow"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1102
msgctxt "Palette"
msgid "Accent Orange"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1105
msgctxt "Palette"
msgid "Accent Red"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1108
msgctxt "Palette"
msgid "Accent Red Base"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1111
msgctxt "Palette"
msgid "Accent Deep Red"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1114
msgctxt "Palette"
msgid "Human Highlight"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1117
msgctxt "Palette"
msgid "Human"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1120
msgctxt "Palette"
msgid "Human Base"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1123
msgctxt "Palette"
msgid "Environmental Shadow"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1126
msgctxt "Palette"
msgid "Environmental Blue Highlight"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1129
msgctxt "Palette"
msgid "Environmental Blue Medium"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1132
msgctxt "Palette"
msgid "Environmental Blue Base"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1135
msgctxt "Palette"
msgid "Environmental Blue Shadow"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1138 ../share/palettes/palettes.h:1147
msgctxt "Palette"
msgid "Accent Blue Shadow"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1141
msgctxt "Palette"
msgid "Accent Blue"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1144
msgctxt "Palette"
msgid "Accent Blue Base"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1150
msgctxt "Palette"
msgid "Accent Green Highlight"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1153
msgctxt "Palette"
msgid "Accent Green"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1156
msgctxt "Palette"
msgid "Accent Green Base"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1159
msgctxt "Palette"
msgid "Accent Green Shadow"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1162
msgctxt "Palette"
msgid "Ubuntu Toner"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1165
msgctxt "Palette"
msgid "Accent Magenta Highlight"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1168
msgctxt "Palette"
msgid "Accent Magenta"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1171
msgctxt "Palette"
msgid "Accent Dark Violet"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1174
msgctxt "Palette"
msgid "Grey 1"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1177
msgctxt "Palette"
msgid "Grey 2"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1180
msgctxt "Palette"
msgid "Grey 3"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1183
msgctxt "Palette"
msgid "Grey 4"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1186
msgctxt "Palette"
msgid "Grey 5"
msgstr ""
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1189
msgctxt "Palette"
msgid "Grey 6"
@@ -8931,11 +8918,11 @@ msgstr ""
msgid "Select <b>at least one non-connector object</b>."
msgstr ""
-#: ../src/connector-context.cpp:1969 ../src/widgets/toolbox.cpp:8147
+#: ../src/connector-context.cpp:1969 ../src/widgets/toolbox.cpp:8143
msgid "Make connectors avoid selected objects"
msgstr ""
-#: ../src/connector-context.cpp:1970 ../src/widgets/toolbox.cpp:8157
+#: ../src/connector-context.cpp:1970 ../src/widgets/toolbox.cpp:8153
msgid "Make connectors ignore selected objects"
msgstr ""
@@ -9006,7 +8993,7 @@ msgstr ""
msgid "Delete tiled clones"
msgstr ""
-#: ../src/dialogs/clonetiler.cpp:1087 ../src/selection-chemistry.cpp:2021
+#: ../src/dialogs/clonetiler.cpp:1087 ../src/selection-chemistry.cpp:2030
msgid "Select an <b>object</b> to clone."
msgstr ""
@@ -10700,11 +10687,11 @@ msgstr ""
msgid "Bounding box side midpoint"
msgstr ""
-#: ../src/display/snap-indicator.cpp:176 ../src/ui/tool/node.cpp:1178
+#: ../src/display/snap-indicator.cpp:176 ../src/ui/tool/node.cpp:1192
msgid "Smooth node"
msgstr ""
-#: ../src/display/snap-indicator.cpp:179 ../src/ui/tool/node.cpp:1177
+#: ../src/display/snap-indicator.cpp:179 ../src/ui/tool/node.cpp:1191
msgid "Cusp node"
msgstr ""
@@ -10780,24 +10767,24 @@ msgid "Unnamed document %d"
msgstr ""
#. We hit green anchor, closing Green-Blue-Red
-#: ../src/draw-context.cpp:578
+#: ../src/draw-context.cpp:560
msgid "Path is closed."
msgstr ""
#. We hit bot start and end of single curve, closing paths
-#: ../src/draw-context.cpp:593
+#: ../src/draw-context.cpp:575
msgid "Closing path."
msgstr ""
-#: ../src/draw-context.cpp:703
+#: ../src/draw-context.cpp:685
msgid "Draw path"
msgstr ""
-#: ../src/draw-context.cpp:863
+#: ../src/draw-context.cpp:845
msgid "Creating single dot"
msgstr ""
-#: ../src/draw-context.cpp:864
+#: ../src/draw-context.cpp:846
msgid "Create single dot"
msgstr ""
@@ -10864,7 +10851,7 @@ msgstr ""
msgid "<b>Drawing</b> an eraser stroke"
msgstr ""
-#: ../src/eraser-context.cpp:830
+#: ../src/eraser-context.cpp:833
msgid "Draw eraser stroke"
msgstr ""
@@ -10966,32 +10953,32 @@ msgstr ""
msgid "\" failed to load because "
msgstr ""
-#: ../src/extension/extension.cpp:642
+#: ../src/extension/extension.cpp:640
#, c-format
msgid "Could not create extension error log file '%s'"
msgstr ""
-#: ../src/extension/extension.cpp:741
+#: ../src/extension/extension.cpp:739
msgid "ID:"
msgstr ""
-#: ../src/extension/extension.cpp:742
+#: ../src/extension/extension.cpp:740
msgid "State:"
msgstr ""
-#: ../src/extension/extension.cpp:742
+#: ../src/extension/extension.cpp:740
msgid "Loaded"
msgstr ""
-#: ../src/extension/extension.cpp:742
+#: ../src/extension/extension.cpp:740
msgid "Unloaded"
msgstr ""
-#: ../src/extension/extension.cpp:742
+#: ../src/extension/extension.cpp:740
msgid "Deactivated"
msgstr ""
-#: ../src/extension/extension.cpp:773
+#: ../src/extension/extension.cpp:771
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 "
@@ -11473,7 +11460,7 @@ msgstr ""
#: ../src/extension/internal/bitmap/unsharpmask.cpp:45
#: ../src/ui/dialog/inkscape-preferences.cpp:211
#: ../src/ui/dialog/tracedialog.cpp:420 ../src/ui/dialog/tracedialog.cpp:453
-#: ../src/ui/dialog/tracedialog.cpp:596 ../src/widgets/toolbox.cpp:8386
+#: ../src/ui/dialog/tracedialog.cpp:596 ../src/widgets/toolbox.cpp:8382
msgid "Threshold:"
msgstr ""
@@ -11695,6 +11682,10 @@ msgstr ""
msgid "Drop shadow, color -EXP-"
msgstr ""
+#: ../src/extension/internal/filter/drop-shadow.h:165
+msgid "Experimental"
+msgstr ""
+
#: ../src/extension/internal/filter/drop-shadow.h:168
msgid "Colorizable Drop shadow"
msgstr ""
@@ -12344,7 +12335,7 @@ msgstr ""
msgid "Gamma"
msgstr ""
-#: ../src/filter-enums.cpp:92 ../src/selection-chemistry.cpp:425
+#: ../src/filter-enums.cpp:92 ../src/selection-chemistry.cpp:434
#: ../src/widgets/gradient-selector.cpp:142
msgid "Duplicate"
msgstr ""
@@ -12590,44 +12581,44 @@ msgstr[1] ""
msgid "Select <b>objects</b> on which to create gradient."
msgstr ""
-#: ../src/gradient-drag.cpp:642
+#: ../src/gradient-drag.cpp:626
msgid "Merge gradient handles"
msgstr ""
-#: ../src/gradient-drag.cpp:945
+#: ../src/gradient-drag.cpp:931
msgid "Move gradient handle"
msgstr ""
-#: ../src/gradient-drag.cpp:998 ../src/widgets/gradient-vector.cpp:768
+#: ../src/gradient-drag.cpp:984 ../src/widgets/gradient-vector.cpp:768
msgid "Delete gradient stop"
msgstr ""
-#: ../src/gradient-drag.cpp:1162
+#: ../src/gradient-drag.cpp:1148
#, 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 ""
-#: ../src/gradient-drag.cpp:1166 ../src/gradient-drag.cpp:1173
+#: ../src/gradient-drag.cpp:1152 ../src/gradient-drag.cpp:1159
msgid " (stroke)"
msgstr ""
-#: ../src/gradient-drag.cpp:1170
+#: ../src/gradient-drag.cpp:1156
#, 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 ""
-#: ../src/gradient-drag.cpp:1178
+#: ../src/gradient-drag.cpp:1164
#, c-format
msgid ""
"Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to "
"separate focus"
msgstr ""
-#: ../src/gradient-drag.cpp:1181
+#: ../src/gradient-drag.cpp:1167
#, c-format
msgid ""
"Gradient point shared by <b>%d</b> gradient; drag with <b>Shift</b> to "
@@ -12638,15 +12629,15 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: ../src/gradient-drag.cpp:1881
+#: ../src/gradient-drag.cpp:1867
msgid "Move gradient handle(s)"
msgstr ""
-#: ../src/gradient-drag.cpp:1917
+#: ../src/gradient-drag.cpp:1903
msgid "Move gradient mid stop(s)"
msgstr ""
-#: ../src/gradient-drag.cpp:2205
+#: ../src/gradient-drag.cpp:2191
msgid "Delete gradient stop(s)"
msgstr ""
@@ -12657,7 +12648,7 @@ msgstr ""
#. Add the units menu.
#: ../src/helper/units.cpp:37 ../src/widgets/select-toolbar.cpp:496
#: ../src/widgets/toolbox.cpp:1574 ../src/widgets/toolbox.cpp:3314
-#: ../src/widgets/toolbox.cpp:6038 ../src/widgets/toolbox.cpp:8405
+#: ../src/widgets/toolbox.cpp:6038 ../src/widgets/toolbox.cpp:8401
msgid "Units"
msgstr ""
@@ -12826,132 +12817,132 @@ msgstr ""
msgid "Autosave complete."
msgstr ""
-#: ../src/inkscape.cpp:661
+#: ../src/inkscape.cpp:670
msgid "Untitled document"
msgstr ""
#. Show nice dialog box
-#: ../src/inkscape.cpp:693
+#: ../src/inkscape.cpp:702
msgid "Inkscape encountered an internal error and will close now.\n"
msgstr ""
-#: ../src/inkscape.cpp:694
+#: ../src/inkscape.cpp:703
msgid ""
"Automatic backups of unsaved documents were done to the following "
"locations:\n"
msgstr ""
-#: ../src/inkscape.cpp:695
+#: ../src/inkscape.cpp:704
msgid "Automatic backup of the following documents failed:\n"
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:811
+#: ../src/interface.cpp:816
msgid "Commands Bar"
msgstr ""
-#: ../src/interface.cpp:811
+#: ../src/interface.cpp:816
msgid "Show or hide the Commands bar (under the menu)"
msgstr ""
-#: ../src/interface.cpp:813
+#: ../src/interface.cpp:818
msgid "Snap Controls Bar"
msgstr ""
-#: ../src/interface.cpp:813
+#: ../src/interface.cpp:818
msgid "Show or hide the snapping controls"
msgstr ""
-#: ../src/interface.cpp:815
+#: ../src/interface.cpp:820
msgid "Tool Controls Bar"
msgstr ""
-#: ../src/interface.cpp:815
+#: ../src/interface.cpp:820
msgid "Show or hide the Tool Controls bar"
msgstr ""
-#: ../src/interface.cpp:817
+#: ../src/interface.cpp:822
msgid "_Toolbox"
msgstr ""
-#: ../src/interface.cpp:817
+#: ../src/interface.cpp:822
msgid "Show or hide the main toolbox (on the left)"
msgstr ""
-#: ../src/interface.cpp:823
+#: ../src/interface.cpp:828
msgid "_Palette"
msgstr ""
-#: ../src/interface.cpp:823
+#: ../src/interface.cpp:828
msgid "Show or hide the color palette"
msgstr ""
-#: ../src/interface.cpp:825
+#: ../src/interface.cpp:830
msgid "_Statusbar"
msgstr ""
-#: ../src/interface.cpp:825
+#: ../src/interface.cpp:830
msgid "Show or hide the statusbar (at the bottom of the window)"
msgstr ""
-#: ../src/interface.cpp:833
+#: ../src/interface.cpp:838
msgid "Default interface setup"
msgstr ""
-#: ../src/interface.cpp:834
+#: ../src/interface.cpp:839
msgid "Set the custom task"
msgstr ""
-#: ../src/interface.cpp:835
+#: ../src/interface.cpp:840
msgid "Wide"
msgstr ""
-#: ../src/interface.cpp:835
+#: ../src/interface.cpp:840
msgid "Setup for widescreen work"
msgstr ""
-#: ../src/interface.cpp:932
+#: ../src/interface.cpp:937
#, c-format
msgid "Verb \"%s\" Unknown"
msgstr ""
-#: ../src/interface.cpp:974
+#: ../src/interface.cpp:979
msgid "Open _Recent"
msgstr ""
#. TRANSLATORS: #%s is the id of the group e.g. <g id="#g7">, not a number.
-#: ../src/interface.cpp:1079
+#: ../src/interface.cpp:1084
#, c-format
msgid "Enter group #%s"
msgstr ""
-#: ../src/interface.cpp:1090
+#: ../src/interface.cpp:1095
msgid "Go to parent"
msgstr ""
-#: ../src/interface.cpp:1181 ../src/interface.cpp:1267
-#: ../src/interface.cpp:1370 ../src/ui/widget/selected-style.cpp:468
+#: ../src/interface.cpp:1186 ../src/interface.cpp:1272
+#: ../src/interface.cpp:1375 ../src/ui/widget/selected-style.cpp:468
msgid "Drop color"
msgstr ""
-#: ../src/interface.cpp:1220 ../src/interface.cpp:1330
+#: ../src/interface.cpp:1225 ../src/interface.cpp:1335
msgid "Drop color on gradient"
msgstr ""
-#: ../src/interface.cpp:1383
+#: ../src/interface.cpp:1388
msgid "Could not parse SVG data"
msgstr ""
-#: ../src/interface.cpp:1422
+#: ../src/interface.cpp:1427
msgid "Drop SVG"
msgstr ""
-#: ../src/interface.cpp:1456
+#: ../src/interface.cpp:1461
msgid "Drop bitmap image"
msgstr ""
-#: ../src/interface.cpp:1548
+#: ../src/interface.cpp:1553
#, c-format
msgid ""
"<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do "
@@ -13825,7 +13816,7 @@ msgid "Scale the width of the pattern in units of its length"
msgstr ""
#: ../src/live_effects/lpe-patternalongpath.cpp:68
-#: ../src/widgets/toolbox.cpp:8193
+#: ../src/widgets/toolbox.cpp:8189
msgid "Spacing:"
msgstr ""
@@ -14673,94 +14664,94 @@ msgstr ""
msgid "Tutorials"
msgstr ""
-#: ../src/object-edit.cpp:439
+#: ../src/object-edit.cpp:438
msgid ""
"Adjust the <b>horizontal rounding</b> radius; with <b>Ctrl</b> to make the "
"vertical radius the same"
msgstr ""
-#: ../src/object-edit.cpp:443
+#: ../src/object-edit.cpp:442
msgid ""
"Adjust the <b>vertical rounding</b> radius; with <b>Ctrl</b> to make the "
"horizontal radius the same"
msgstr ""
-#: ../src/object-edit.cpp:447 ../src/object-edit.cpp:451
+#: ../src/object-edit.cpp:446 ../src/object-edit.cpp:450
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 ""
-#: ../src/object-edit.cpp:685 ../src/object-edit.cpp:688
-#: ../src/object-edit.cpp:691 ../src/object-edit.cpp:694
+#: ../src/object-edit.cpp:684 ../src/object-edit.cpp:687
+#: ../src/object-edit.cpp:690 ../src/object-edit.cpp:693
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:697 ../src/object-edit.cpp:700
-#: ../src/object-edit.cpp:703 ../src/object-edit.cpp:706
+#: ../src/object-edit.cpp:696 ../src/object-edit.cpp:699
+#: ../src/object-edit.cpp:702 ../src/object-edit.cpp:705
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:709
+#: ../src/object-edit.cpp:708
msgid "Move the box in perspective"
msgstr ""
-#: ../src/object-edit.cpp:927
+#: ../src/object-edit.cpp:926
msgid "Adjust ellipse <b>width</b>, with <b>Ctrl</b> to make circle"
msgstr ""
-#: ../src/object-edit.cpp:930
+#: ../src/object-edit.cpp:929
msgid "Adjust ellipse <b>height</b>, with <b>Ctrl</b> to make circle"
msgstr ""
-#: ../src/object-edit.cpp:933
+#: ../src/object-edit.cpp:932
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:937
+#: ../src/object-edit.cpp:936
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:1076
+#: ../src/object-edit.cpp:1075
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:1083
+#: ../src/object-edit.cpp:1082
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:1272
+#: ../src/object-edit.cpp:1271
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:1275
+#: ../src/object-edit.cpp:1274
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:1319
+#: ../src/object-edit.cpp:1318
msgid "Adjust the <b>offset distance</b>"
msgstr ""
-#: ../src/object-edit.cpp:1355
+#: ../src/object-edit.cpp:1354
msgid "Drag to resize the <b>flowed text frame</b>"
msgstr ""
@@ -15276,331 +15267,331 @@ msgstr ""
msgid "Select <b>object(s)</b> to duplicate."
msgstr ""
-#: ../src/selection-chemistry.cpp:450
+#: ../src/selection-chemistry.cpp:459
msgid "Delete all"
msgstr ""
-#: ../src/selection-chemistry.cpp:636
+#: ../src/selection-chemistry.cpp:645
msgid "Select <b>some objects</b> to group."
msgstr ""
-#: ../src/selection-chemistry.cpp:651 ../src/selection-describer.cpp:51
+#: ../src/selection-chemistry.cpp:660 ../src/selection-describer.cpp:51
msgid "Group"
msgstr ""
-#: ../src/selection-chemistry.cpp:665
+#: ../src/selection-chemistry.cpp:674
msgid "Select a <b>group</b> to ungroup."
msgstr ""
-#: ../src/selection-chemistry.cpp:706
+#: ../src/selection-chemistry.cpp:715
msgid "<b>No groups</b> to ungroup in the selection."
msgstr ""
-#: ../src/selection-chemistry.cpp:712 ../src/sp-item-group.cpp:500
+#: ../src/selection-chemistry.cpp:721 ../src/sp-item-group.cpp:500
msgid "Ungroup"
msgstr ""
-#: ../src/selection-chemistry.cpp:802
+#: ../src/selection-chemistry.cpp:811
msgid "Select <b>object(s)</b> to raise."
msgstr ""
-#: ../src/selection-chemistry.cpp:808 ../src/selection-chemistry.cpp:868
-#: ../src/selection-chemistry.cpp:902 ../src/selection-chemistry.cpp:966
+#: ../src/selection-chemistry.cpp:817 ../src/selection-chemistry.cpp:877
+#: ../src/selection-chemistry.cpp:911 ../src/selection-chemistry.cpp:975
msgid ""
"You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."
msgstr ""
#. TRANSLATORS: "Raise" means "to raise an object" in the undo history
-#: ../src/selection-chemistry.cpp:848
+#: ../src/selection-chemistry.cpp:857
msgctxt "Undo action"
msgid "Raise"
msgstr ""
-#: ../src/selection-chemistry.cpp:860
+#: ../src/selection-chemistry.cpp:869
msgid "Select <b>object(s)</b> to raise to top."
msgstr ""
-#: ../src/selection-chemistry.cpp:883
+#: ../src/selection-chemistry.cpp:892
msgid "Raise to top"
msgstr ""
-#: ../src/selection-chemistry.cpp:896
+#: ../src/selection-chemistry.cpp:905
msgid "Select <b>object(s)</b> to lower."
msgstr ""
-#: ../src/selection-chemistry.cpp:946
+#: ../src/selection-chemistry.cpp:955
msgid "Lower"
msgstr ""
-#: ../src/selection-chemistry.cpp:958
+#: ../src/selection-chemistry.cpp:967
msgid "Select <b>object(s)</b> to lower to bottom."
msgstr ""
-#: ../src/selection-chemistry.cpp:993
+#: ../src/selection-chemistry.cpp:1002
msgid "Lower to bottom"
msgstr ""
-#: ../src/selection-chemistry.cpp:1000
+#: ../src/selection-chemistry.cpp:1009
msgid "Nothing to undo."
msgstr ""
-#: ../src/selection-chemistry.cpp:1007
+#: ../src/selection-chemistry.cpp:1016
msgid "Nothing to redo."
msgstr ""
-#: ../src/selection-chemistry.cpp:1067
+#: ../src/selection-chemistry.cpp:1076
msgid "Paste"
msgstr ""
-#: ../src/selection-chemistry.cpp:1075
+#: ../src/selection-chemistry.cpp:1084
msgid "Paste style"
msgstr ""
-#: ../src/selection-chemistry.cpp:1085
+#: ../src/selection-chemistry.cpp:1094
msgid "Paste live path effect"
msgstr ""
-#: ../src/selection-chemistry.cpp:1106
+#: ../src/selection-chemistry.cpp:1115
msgid "Select <b>object(s)</b> to remove live path effects from."
msgstr ""
-#: ../src/selection-chemistry.cpp:1118
+#: ../src/selection-chemistry.cpp:1127
msgid "Remove live path effect"
msgstr ""
-#: ../src/selection-chemistry.cpp:1129
+#: ../src/selection-chemistry.cpp:1138
msgid "Select <b>object(s)</b> to remove filters from."
msgstr ""
-#: ../src/selection-chemistry.cpp:1139
+#: ../src/selection-chemistry.cpp:1148
#: ../src/ui/dialog/filter-effects-dialog.cpp:1340
msgid "Remove filter"
msgstr ""
-#: ../src/selection-chemistry.cpp:1148
+#: ../src/selection-chemistry.cpp:1157
msgid "Paste size"
msgstr ""
-#: ../src/selection-chemistry.cpp:1157
+#: ../src/selection-chemistry.cpp:1166
msgid "Paste size separately"
msgstr ""
-#: ../src/selection-chemistry.cpp:1167
+#: ../src/selection-chemistry.cpp:1176
msgid "Select <b>object(s)</b> to move to the layer above."
msgstr ""
-#: ../src/selection-chemistry.cpp:1193
+#: ../src/selection-chemistry.cpp:1202
msgid "Raise to next layer"
msgstr ""
-#: ../src/selection-chemistry.cpp:1200
+#: ../src/selection-chemistry.cpp:1209
msgid "No more layers above."
msgstr ""
-#: ../src/selection-chemistry.cpp:1212
+#: ../src/selection-chemistry.cpp:1221
msgid "Select <b>object(s)</b> to move to the layer below."
msgstr ""
-#: ../src/selection-chemistry.cpp:1238
+#: ../src/selection-chemistry.cpp:1247
msgid "Lower to previous layer"
msgstr ""
-#: ../src/selection-chemistry.cpp:1245
+#: ../src/selection-chemistry.cpp:1254
msgid "No more layers below."
msgstr ""
-#: ../src/selection-chemistry.cpp:1454
+#: ../src/selection-chemistry.cpp:1463
msgid "Remove transform"
msgstr ""
-#: ../src/selection-chemistry.cpp:1557
+#: ../src/selection-chemistry.cpp:1566
msgid "Rotate 90&#176; CCW"
msgstr ""
-#: ../src/selection-chemistry.cpp:1557
+#: ../src/selection-chemistry.cpp:1566
msgid "Rotate 90&#176; CW"
msgstr ""
-#: ../src/selection-chemistry.cpp:1578 ../src/seltrans.cpp:530
+#: ../src/selection-chemistry.cpp:1587 ../src/seltrans.cpp:515
#: ../src/ui/dialog/transformation.cpp:770
msgid "Rotate"
msgstr ""
-#: ../src/selection-chemistry.cpp:1625
+#: ../src/selection-chemistry.cpp:1634
msgid "Rotate by pixels"
msgstr ""
-#: ../src/selection-chemistry.cpp:1680
+#: ../src/selection-chemistry.cpp:1689
msgid "Scale by whole factor"
msgstr ""
-#: ../src/selection-chemistry.cpp:1695
+#: ../src/selection-chemistry.cpp:1704
msgid "Move vertically"
msgstr ""
-#: ../src/selection-chemistry.cpp:1698
+#: ../src/selection-chemistry.cpp:1707
msgid "Move horizontally"
msgstr ""
-#: ../src/selection-chemistry.cpp:1701 ../src/selection-chemistry.cpp:1727
-#: ../src/seltrans.cpp:524 ../src/ui/dialog/transformation.cpp:691
+#: ../src/selection-chemistry.cpp:1710 ../src/selection-chemistry.cpp:1736
+#: ../src/seltrans.cpp:509 ../src/ui/dialog/transformation.cpp:691
msgid "Move"
msgstr ""
-#: ../src/selection-chemistry.cpp:1721
+#: ../src/selection-chemistry.cpp:1730
msgid "Move vertically by pixels"
msgstr ""
-#: ../src/selection-chemistry.cpp:1724
+#: ../src/selection-chemistry.cpp:1733
msgid "Move horizontally by pixels"
msgstr ""
-#: ../src/selection-chemistry.cpp:1852
+#: ../src/selection-chemistry.cpp:1861
msgid "The selection has no applied path effect."
msgstr ""
-#: ../src/selection-chemistry.cpp:2055
+#: ../src/selection-chemistry.cpp:2064
msgctxt "Action"
msgid "Clone"
msgstr ""
-#: ../src/selection-chemistry.cpp:2071
+#: ../src/selection-chemistry.cpp:2080
msgid "Select <b>clones</b> to relink."
msgstr ""
-#: ../src/selection-chemistry.cpp:2078
+#: ../src/selection-chemistry.cpp:2087
msgid "Copy an <b>object</b> to clipboard to relink clones to."
msgstr ""
-#: ../src/selection-chemistry.cpp:2102
+#: ../src/selection-chemistry.cpp:2111
msgid "<b>No clones to relink</b> in the selection."
msgstr ""
-#: ../src/selection-chemistry.cpp:2105
+#: ../src/selection-chemistry.cpp:2114
msgid "Relink clone"
msgstr ""
-#: ../src/selection-chemistry.cpp:2119
+#: ../src/selection-chemistry.cpp:2128
msgid "Select <b>clones</b> to unlink."
msgstr ""
-#: ../src/selection-chemistry.cpp:2168
+#: ../src/selection-chemistry.cpp:2182
msgid "<b>No clones to unlink</b> in the selection."
msgstr ""
-#: ../src/selection-chemistry.cpp:2172
+#: ../src/selection-chemistry.cpp:2186
msgid "Unlink clone"
msgstr ""
-#: ../src/selection-chemistry.cpp:2185
+#: ../src/selection-chemistry.cpp:2199
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:2208
+#: ../src/selection-chemistry.cpp:2222
msgid ""
"<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, "
"flowed text?)"
msgstr ""
-#: ../src/selection-chemistry.cpp:2214
+#: ../src/selection-chemistry.cpp:2228
msgid ""
"The object you're trying to select is <b>not visible</b> (it is in &lt;"
"defs&gt;)"
msgstr ""
-#: ../src/selection-chemistry.cpp:2260
+#: ../src/selection-chemistry.cpp:2274
msgid "Select <b>object(s)</b> to convert to marker."
msgstr ""
-#: ../src/selection-chemistry.cpp:2328
+#: ../src/selection-chemistry.cpp:2342
msgid "Objects to marker"
msgstr ""
-#: ../src/selection-chemistry.cpp:2356
+#: ../src/selection-chemistry.cpp:2370
msgid "Select <b>object(s)</b> to convert to guides."
msgstr ""
-#: ../src/selection-chemistry.cpp:2368
+#: ../src/selection-chemistry.cpp:2382
msgid "Objects to guides"
msgstr ""
-#: ../src/selection-chemistry.cpp:2384
+#: ../src/selection-chemistry.cpp:2398
msgid "Select <b>object(s)</b> to convert to pattern."
msgstr ""
-#: ../src/selection-chemistry.cpp:2472
+#: ../src/selection-chemistry.cpp:2486
msgid "Objects to pattern"
msgstr ""
-#: ../src/selection-chemistry.cpp:2488
+#: ../src/selection-chemistry.cpp:2502
msgid "Select an <b>object with pattern fill</b> to extract objects from."
msgstr ""
-#: ../src/selection-chemistry.cpp:2541
+#: ../src/selection-chemistry.cpp:2555
msgid "<b>No pattern fills</b> in the selection."
msgstr ""
-#: ../src/selection-chemistry.cpp:2544
+#: ../src/selection-chemistry.cpp:2558
msgid "Pattern to objects"
msgstr ""
-#: ../src/selection-chemistry.cpp:2629
+#: ../src/selection-chemistry.cpp:2643
msgid "Select <b>object(s)</b> to make a bitmap copy."
msgstr ""
-#: ../src/selection-chemistry.cpp:2633
+#: ../src/selection-chemistry.cpp:2647
msgid "Rendering bitmap..."
msgstr ""
-#: ../src/selection-chemistry.cpp:2807
+#: ../src/selection-chemistry.cpp:2821
msgid "Create bitmap"
msgstr ""
-#: ../src/selection-chemistry.cpp:2839
+#: ../src/selection-chemistry.cpp:2853
msgid "Select <b>object(s)</b> to create clippath or mask from."
msgstr ""
-#: ../src/selection-chemistry.cpp:2842
+#: ../src/selection-chemistry.cpp:2856
msgid "Select mask object and <b>object(s)</b> to apply clippath or mask to."
msgstr ""
-#: ../src/selection-chemistry.cpp:3023
+#: ../src/selection-chemistry.cpp:3037
msgid "Set clipping path"
msgstr ""
-#: ../src/selection-chemistry.cpp:3025
+#: ../src/selection-chemistry.cpp:3039
msgid "Set mask"
msgstr ""
-#: ../src/selection-chemistry.cpp:3038
+#: ../src/selection-chemistry.cpp:3052
msgid "Select <b>object(s)</b> to remove clippath or mask from."
msgstr ""
-#: ../src/selection-chemistry.cpp:3149
+#: ../src/selection-chemistry.cpp:3163
msgid "Release clipping path"
msgstr ""
-#: ../src/selection-chemistry.cpp:3151
+#: ../src/selection-chemistry.cpp:3165
msgid "Release mask"
msgstr ""
-#: ../src/selection-chemistry.cpp:3169
+#: ../src/selection-chemistry.cpp:3183
msgid "Select <b>object(s)</b> to fit canvas to."
msgstr ""
#. Fit Page
-#: ../src/selection-chemistry.cpp:3189 ../src/verbs.cpp:2718
+#: ../src/selection-chemistry.cpp:3203 ../src/verbs.cpp:2718
msgid "Fit Page to Selection"
msgstr ""
-#: ../src/selection-chemistry.cpp:3218 ../src/verbs.cpp:2720
+#: ../src/selection-chemistry.cpp:3232 ../src/verbs.cpp:2720
msgid "Fit Page to Drawing"
msgstr ""
-#: ../src/selection-chemistry.cpp:3239 ../src/verbs.cpp:2722
+#: ../src/selection-chemistry.cpp:3253 ../src/verbs.cpp:2722
msgid "Fit Page to Selection or Drawing"
msgstr ""
@@ -15777,77 +15768,77 @@ msgstr[1] ""
msgid "%s%s. %s."
msgstr ""
-#: ../src/seltrans.cpp:533 ../src/ui/dialog/transformation.cpp:829
+#: ../src/seltrans.cpp:518 ../src/ui/dialog/transformation.cpp:829
msgid "Skew"
msgstr ""
-#: ../src/seltrans.cpp:545
+#: ../src/seltrans.cpp:530
msgid "Set center"
msgstr ""
-#: ../src/seltrans.cpp:620
+#: ../src/seltrans.cpp:605
msgid "Stamp"
msgstr ""
-#: ../src/seltrans.cpp:642
+#: ../src/seltrans.cpp:627
msgid ""
"<b>Center</b> of rotation and skewing: drag to reposition; scaling with "
"Shift also uses this center"
msgstr ""
-#: ../src/seltrans.cpp:669
+#: ../src/seltrans.cpp:654
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:670
+#: ../src/seltrans.cpp:655
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:674
+#: ../src/seltrans.cpp:659
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:675
+#: ../src/seltrans.cpp:660
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:809
+#: ../src/seltrans.cpp:794
msgid "Reset center"
msgstr ""
-#: ../src/seltrans.cpp:1047 ../src/seltrans.cpp:1144
+#: ../src/seltrans.cpp:1032 ../src/seltrans.cpp:1129
#, c-format
msgid "<b>Scale</b>: %0.2f%% x %0.2f%%; with <b>Ctrl</b> to lock ratio"
msgstr ""
#. TRANSLATORS: don't modify the first ";"
#. (it will NOT be displayed as ";" - only the second one will be)
-#: ../src/seltrans.cpp:1258
+#: ../src/seltrans.cpp:1243
#, c-format
msgid "<b>Skew</b>: %0.2f&#176;; with <b>Ctrl</b> to snap angle"
msgstr ""
#. TRANSLATORS: don't modify the first ";"
#. (it will NOT be displayed as ";" - only the second one will be)
-#: ../src/seltrans.cpp:1333
+#: ../src/seltrans.cpp:1318
#, c-format
msgid "<b>Rotate</b>: %0.2f&#176;; with <b>Ctrl</b> to snap angle"
msgstr ""
-#: ../src/seltrans.cpp:1364
+#: ../src/seltrans.cpp:1353
#, c-format
msgid "Move <b>center</b> to %s, %s"
msgstr ""
-#: ../src/seltrans.cpp:1539
+#: ../src/seltrans.cpp:1528
#, c-format
msgid ""
"<b>Move</b> by %s, %s; with <b>Ctrl</b> to restrict to horizontal/vertical; "
@@ -16969,7 +16960,7 @@ msgstr ""
#: ../src/ui/dialog/align-and-distribute.cpp:508
#: ../src/ui/dialog/align-and-distribute.cpp:889
-#: ../src/widgets/toolbox.cpp:8244
+#: ../src/widgets/toolbox.cpp:8240
msgid "Remove overlaps"
msgstr ""
@@ -17104,7 +17095,7 @@ msgid "Distribute baselines of texts vertically"
msgstr ""
#: ../src/ui/dialog/align-and-distribute.cpp:981
-#: ../src/widgets/toolbox.cpp:8206
+#: ../src/widgets/toolbox.cpp:8202
msgid "Nicely arrange selected connector network"
msgstr ""
@@ -22083,126 +22074,133 @@ msgid ""
"node, click to select (more: Shift, Ctrl+Alt)"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:227
+#: ../src/ui/tool/multi-path-manipulator.cpp:245
+msgid "Retract handles"
+msgstr ""
+
+#: ../src/ui/tool/multi-path-manipulator.cpp:245
msgid "Change node type"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:235
+#: ../src/ui/tool/multi-path-manipulator.cpp:253
msgid "Straighten segments"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:237
+#: ../src/ui/tool/multi-path-manipulator.cpp:255
msgid "Make segments curves"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:244
+#: ../src/ui/tool/multi-path-manipulator.cpp:262
msgid "Add nodes"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:250
+#: ../src/ui/tool/multi-path-manipulator.cpp:268
msgid "Duplicate nodes"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:312
+#: ../src/ui/tool/multi-path-manipulator.cpp:330
#: ../src/widgets/toolbox.cpp:1369
msgid "Join nodes"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:319
+#: ../src/ui/tool/multi-path-manipulator.cpp:337
#: ../src/widgets/toolbox.cpp:1380
msgid "Break nodes"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:326
+#: ../src/ui/tool/multi-path-manipulator.cpp:344
msgid "Delete nodes"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:630
+#: ../src/ui/tool/multi-path-manipulator.cpp:662
msgid "Move nodes"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:633
+#: ../src/ui/tool/multi-path-manipulator.cpp:665
msgid "Move nodes horizontally"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:637
+#: ../src/ui/tool/multi-path-manipulator.cpp:669
msgid "Move nodes vertically"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:641
-#: ../src/ui/tool/multi-path-manipulator.cpp:644
+#: ../src/ui/tool/multi-path-manipulator.cpp:673
+#: ../src/ui/tool/multi-path-manipulator.cpp:676
msgid "Rotate nodes"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:648
-#: ../src/ui/tool/multi-path-manipulator.cpp:654
+#: ../src/ui/tool/multi-path-manipulator.cpp:680
+#: ../src/ui/tool/multi-path-manipulator.cpp:686
msgid "Scale nodes uniformly"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:651
+#: ../src/ui/tool/multi-path-manipulator.cpp:683
msgid "Scale nodes"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:658
+#: ../src/ui/tool/multi-path-manipulator.cpp:690
msgid "Scale nodes horizontally"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:662
+#: ../src/ui/tool/multi-path-manipulator.cpp:694
msgid "Scale nodes vertically"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:666
+#: ../src/ui/tool/multi-path-manipulator.cpp:698
msgid "Flip nodes horizontally"
msgstr ""
-#: ../src/ui/tool/multi-path-manipulator.cpp:669
+#: ../src/ui/tool/multi-path-manipulator.cpp:701
msgid "Flip nodes vertically"
msgstr ""
-#: ../src/ui/tool/node-tool.cpp:541
+#: ../src/ui/tool/node-tool.cpp:551
msgctxt "Node tool tip"
msgid ""
"<b>Shift</b>: drag to add nodes to the selection, click to toggle object "
"selection"
msgstr ""
-#: ../src/ui/tool/node-tool.cpp:545
+#: ../src/ui/tool/node-tool.cpp:555
msgctxt "Node tool tip"
msgid "<b>Shift</b>: drag to add nodes to the selection"
msgstr ""
-#: ../src/ui/tool/node-tool.cpp:555
+#: ../src/ui/tool/node-tool.cpp:564
+#, c-format
+msgid "<b>%u of %u</b> node selected."
+msgid_plural "<b>%u of %u</b> nodes selected."
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/ui/tool/node-tool.cpp:569
#, c-format
msgctxt "Node tool tip"
-msgid ""
-"<b>%u of %u nodes</b> selected. Drag to select nodes, click to edit only "
-"this object (more: Shift)"
+msgid "%s Drag to select nodes, click to edit only this object (more: Shift)"
msgstr ""
-#: ../src/ui/tool/node-tool.cpp:561
+#: ../src/ui/tool/node-tool.cpp:575
#, c-format
msgctxt "Node tool tip"
-msgid ""
-"<b>%u of %u nodes</b> selected. Drag to select nodes, click clear the "
-"selection"
+msgid "%s Drag to select nodes, click clear the selection"
msgstr ""
-#: ../src/ui/tool/node-tool.cpp:569
+#: ../src/ui/tool/node-tool.cpp:584
msgctxt "Node tool tip"
msgid "Drag to select nodes, click to edit only this object"
msgstr ""
-#: ../src/ui/tool/node-tool.cpp:572
+#: ../src/ui/tool/node-tool.cpp:587
msgctxt "Node tool tip"
msgid "Drag to select nodes, click to clear the selection"
msgstr ""
-#: ../src/ui/tool/node-tool.cpp:577
+#: ../src/ui/tool/node-tool.cpp:592
msgctxt "Node tool tip"
msgid "Drag to select objects to edit, click to edit this object (more: Shift)"
msgstr ""
-#: ../src/ui/tool/node-tool.cpp:580
+#: ../src/ui/tool/node-tool.cpp:595
msgctxt "Node tool tip"
msgid "Drag to select objects to edit"
msgstr ""
@@ -22295,38 +22293,38 @@ msgctxt "Path handle tip"
msgid "Move handle by %s, %s; angle %.2f°, length %s"
msgstr ""
-#: ../src/ui/tool/node.cpp:1131
+#: ../src/ui/tool/node.cpp:1145
msgctxt "Path node tip"
msgid "<b>Shift</b>: drag out a handle, click to toggle selection"
msgstr ""
-#: ../src/ui/tool/node.cpp:1133
+#: ../src/ui/tool/node.cpp:1147
msgctxt "Path node tip"
msgid "<b>Shift</b>: click to toggle selection"
msgstr ""
-#: ../src/ui/tool/node.cpp:1138
+#: ../src/ui/tool/node.cpp:1152
msgctxt "Path node tip"
msgid "<b>Ctrl+Alt</b>: move along handle lines, click to delete node"
msgstr ""
-#: ../src/ui/tool/node.cpp:1141
+#: ../src/ui/tool/node.cpp:1155
msgctxt "Path node tip"
msgid "<b>Ctrl</b>: move along axes, click to change node type"
msgstr ""
-#: ../src/ui/tool/node.cpp:1145
+#: ../src/ui/tool/node.cpp:1159
msgctxt "Path node tip"
msgid "<b>Alt</b>: sculpt nodes"
msgstr ""
-#: ../src/ui/tool/node.cpp:1153
+#: ../src/ui/tool/node.cpp:1167
#, c-format
msgctxt "Path node tip"
msgid "<b>%s</b>: drag to shape the path (more: Shift, Ctrl, Alt)"
msgstr ""
-#: ../src/ui/tool/node.cpp:1156
+#: ../src/ui/tool/node.cpp:1170
#, c-format
msgctxt "Path node tip"
msgid ""
@@ -22334,7 +22332,7 @@ msgid ""
"(more: Shift, Ctrl, Alt)"
msgstr ""
-#: ../src/ui/tool/node.cpp:1159
+#: ../src/ui/tool/node.cpp:1173
#, c-format
msgctxt "Path node tip"
msgid ""
@@ -22342,17 +22340,17 @@ msgid ""
"Shift, Ctrl, Alt)"
msgstr ""
-#: ../src/ui/tool/node.cpp:1167
+#: ../src/ui/tool/node.cpp:1181
#, c-format
msgctxt "Path node tip"
msgid "Move node by %s, %s"
msgstr ""
-#: ../src/ui/tool/node.cpp:1179
+#: ../src/ui/tool/node.cpp:1193
msgid "Symmetric node"
msgstr ""
-#: ../src/ui/tool/node.cpp:1180
+#: ../src/ui/tool/node.cpp:1194
msgid "Auto-smooth node"
msgstr ""
@@ -22365,19 +22363,19 @@ msgid "Rotate handle"
msgstr ""
#. We need to call MPM's method because it could have been our last node
-#: ../src/ui/tool/path-manipulator.cpp:1323 ../src/widgets/toolbox.cpp:1358
+#: ../src/ui/tool/path-manipulator.cpp:1325 ../src/widgets/toolbox.cpp:1358
msgid "Delete node"
msgstr ""
-#: ../src/ui/tool/path-manipulator.cpp:1331
+#: ../src/ui/tool/path-manipulator.cpp:1333
msgid "Cycle node type"
msgstr ""
-#: ../src/ui/tool/path-manipulator.cpp:1346
+#: ../src/ui/tool/path-manipulator.cpp:1348
msgid "Drag handle"
msgstr ""
-#: ../src/ui/tool/path-manipulator.cpp:1355
+#: ../src/ui/tool/path-manipulator.cpp:1357
msgid "Retract handle"
msgstr ""
@@ -25105,12 +25103,12 @@ msgstr ""
msgid "_Save as SVG"
msgstr ""
-#: ../src/widgets/ege-paint-def.cpp:70 ../src/widgets/ege-paint-def.cpp:92
+#: ../src/widgets/ege-paint-def.cpp:69 ../src/widgets/ege-paint-def.cpp:91
#: ../src/widgets/gradient-selector.cpp:174
msgid "none"
msgstr ""
-#: ../src/widgets/ege-paint-def.cpp:89
+#: ../src/widgets/ege-paint-def.cpp:88
msgid "remove"
msgstr ""
@@ -25593,7 +25591,7 @@ msgstr ""
#: ../src/widgets/sp-color-scales.cpp:413
#: ../src/widgets/sp-color-scales.cpp:439
#: ../src/widgets/sp-color-scales.cpp:470
-#: ../src/widgets/sp-color-wheel-selector.cpp:135
+#: ../src/widgets/sp-color-wheel-selector.cpp:177
msgid "_A:"
msgstr ""
@@ -25605,8 +25603,8 @@ msgstr ""
#: ../src/widgets/sp-color-scales.cpp:441
#: ../src/widgets/sp-color-scales.cpp:471
#: ../src/widgets/sp-color-scales.cpp:472
-#: ../src/widgets/sp-color-wheel-selector.cpp:145
-#: ../src/widgets/sp-color-wheel-selector.cpp:157
+#: ../src/widgets/sp-color-wheel-selector.cpp:187
+#: ../src/widgets/sp-color-wheel-selector.cpp:199
msgid "Alpha (opacity)"
msgstr ""
@@ -26259,7 +26257,7 @@ msgid "Scatter randomly the corners and angles"
msgstr ""
#: ../src/widgets/toolbox.cpp:2993 ../src/widgets/toolbox.cpp:3926
-#: ../src/widgets/toolbox.cpp:4181 ../src/widgets/toolbox.cpp:8451
+#: ../src/widgets/toolbox.cpp:4181 ../src/widgets/toolbox.cpp:8447
msgid "Defaults"
msgstr ""
@@ -27597,134 +27595,134 @@ msgstr ""
msgid "Change connector spacing"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8131
+#: ../src/widgets/toolbox.cpp:8127
msgid "EditMode"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8132
+#: ../src/widgets/toolbox.cpp:8128
msgid "Switch between connection point editing and connector drawing mode"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8146
+#: ../src/widgets/toolbox.cpp:8142
msgid "Avoid"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8156
+#: ../src/widgets/toolbox.cpp:8152
msgid "Ignore"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8167
+#: ../src/widgets/toolbox.cpp:8163
msgid "Orthogonal"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8168
+#: ../src/widgets/toolbox.cpp:8164
msgid "Make connector orthogonal or polyline"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8182
+#: ../src/widgets/toolbox.cpp:8178
msgid "Connector Curvature"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8182
+#: ../src/widgets/toolbox.cpp:8178
msgid "Curvature:"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8183
+#: ../src/widgets/toolbox.cpp:8179
msgid "The amount of connectors curvature"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8193
+#: ../src/widgets/toolbox.cpp:8189
msgid "Connector Spacing"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8194
+#: ../src/widgets/toolbox.cpp:8190
msgid "The amount of space left around objects by auto-routing connectors"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8205
+#: ../src/widgets/toolbox.cpp:8201
msgid "Graph"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8215
+#: ../src/widgets/toolbox.cpp:8211
msgid "Connector Length"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8215
+#: ../src/widgets/toolbox.cpp:8211
msgid "Length:"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8216
+#: ../src/widgets/toolbox.cpp:8212
msgid "Ideal length for connectors when layout is applied"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8228
+#: ../src/widgets/toolbox.cpp:8224
msgid "Downwards"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8229
+#: ../src/widgets/toolbox.cpp:8225
msgid "Make connectors with end-markers (arrows) point downwards"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8245
+#: ../src/widgets/toolbox.cpp:8241
msgid "Do not allow overlapping shapes"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8260
+#: ../src/widgets/toolbox.cpp:8256
msgid "New connection point"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8261
+#: ../src/widgets/toolbox.cpp:8257
msgid "Add a new connection point to the currently selected item"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8272
+#: ../src/widgets/toolbox.cpp:8268
msgid "Remove connection point"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8273
+#: ../src/widgets/toolbox.cpp:8269
msgid "Remove the currently selected connection point"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8373
+#: ../src/widgets/toolbox.cpp:8369
msgid "Fill by"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8374
+#: ../src/widgets/toolbox.cpp:8370
msgid "Fill by:"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8386
+#: ../src/widgets/toolbox.cpp:8382
msgid "Fill Threshold"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8387
+#: ../src/widgets/toolbox.cpp:8383
msgid ""
"The maximum allowed difference between the clicked pixel and the neighboring "
"pixels to be counted in the fill"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8413
+#: ../src/widgets/toolbox.cpp:8409
msgid "Grow/shrink by"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8413
+#: ../src/widgets/toolbox.cpp:8409
msgid "Grow/shrink by:"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8414
+#: ../src/widgets/toolbox.cpp:8410
msgid ""
"The amount to grow (positive) or shrink (negative) the created fill path"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8439
+#: ../src/widgets/toolbox.cpp:8435
msgid "Close gaps"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8440
+#: ../src/widgets/toolbox.cpp:8436
msgid "Close gaps:"
msgstr ""
-#: ../src/widgets/toolbox.cpp:8452
+#: ../src/widgets/toolbox.cpp:8448
msgid ""
"Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools "
"to change defaults)"
@@ -27739,7 +27737,7 @@ msgstr ""
#. 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:fileencoding=utf-8:textwidth=99 :
#: ../share/extensions/gcodetools_all_in_one.inx.h:1
#: ../share/extensions/gcodetools_area.inx.h:1
msgid ""
diff --git a/po/nl.po b/po/nl.po
index e14ac45f1..5469696f1 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -9,7 +9,7 @@
# Benno Schulenberg <benno@vertaalt.nl>, 2008.
# Kris De Gussem <kris.DeGussem@gmail.com>, 2008-2010.
#
-# *** Stuur een mailtje naar <vertaling@vrijschrift.org>
+# *** Stuur een mailtje naar <kris.DeGussem@gmail.com>
# *** voordat je met dit bestand aan de slag gaat,
# *** om dubbel werk en stijlbreuken te voorkomen.
#
@@ -51,8 +51,8 @@ msgid ""
msgstr ""
"Project-Id-Version: inkscape 0.48\n"
"Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2010-11-02 18:43+0100\n"
-"PO-Revision-Date: 2010-11-13 21:14+0100\n"
+"POT-Creation-Date: 2010-12-09 17:55+0100\n"
+"PO-Revision-Date: 2010-12-09 20:23+0100\n"
"Last-Translator: Kris De Gussem <Kris.DeGussem@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"MIME-Version: 1.0\n"
@@ -259,7 +259,7 @@ msgid "Blue Function:"
msgstr "Blauwfunctie:"
#: ../share/extensions/color_custom.inx.h:10
-#: ../src/interface.cpp:834
+#: ../src/interface.cpp:839
#: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1418
msgid "Custom"
msgstr "Aangepast"
@@ -422,18 +422,6 @@ msgid "Randomize"
msgstr "Willekeurig maken"
#: ../share/extensions/color_randomize.inx.h:8
-msgid "Randomize hue"
-msgstr "Willekeurige tint"
-
-#: ../share/extensions/color_randomize.inx.h:9
-msgid "Randomize lightness"
-msgstr "Willekeurige helderheid"
-
-#: ../share/extensions/color_randomize.inx.h:10
-msgid "Randomize saturation"
-msgstr "Willekeurig verzadiging"
-
-#: ../share/extensions/color_randomize.inx.h:11
#: ../src/flood-context.cpp:251
#: ../src/ui/dialog/inkscape-preferences.cpp:888
#: ../src/widgets/sp-color-icc-selector.cpp:236
@@ -1748,8 +1736,8 @@ msgid "Other Attribute:"
msgstr "Ander attribuut:"
#: ../share/extensions/interp_att_g.inx.h:19
-#: ../src/selection-chemistry.cpp:1655
-#: ../src/seltrans.cpp:527
+#: ../src/selection-chemistry.cpp:1664
+#: ../src/seltrans.cpp:512
#: ../src/ui/dialog/transformation.cpp:748
msgid "Scale"
msgstr "Schalen"
@@ -1966,7 +1954,7 @@ msgstr "Tekenmodus"
#: ../share/extensions/jessyInk_keyBindings.inx.h:6
msgid "Export presentation:"
-msgstr ""
+msgstr "Presentatie exporteren:"
#: ../share/extensions/jessyInk_keyBindings.inx.h:7
msgid "First slide:"
@@ -2141,7 +2129,7 @@ msgstr "Deze uitbreiding laat je toe om de door JessyInk gebruikte masterdia te
#: ../share/extensions/jessyInk_mouseHandler.inx.h:1
#: ../share/extensions/jessyInk_transitions.inx.h:2
#: ../src/filter-enums.cpp:70
-#: ../src/interface.cpp:833
+#: ../src/interface.cpp:838
#: ../src/verbs.cpp:2225
msgid "Default"
msgstr "Standaard"
@@ -3600,8 +3588,8 @@ msgid "Weekend:"
msgstr "Weekend:"
#: ../share/extensions/svgcalendar.inx.h:32
-msgid "Year (0 for current):"
-msgstr "Jaar (0 voor huidige):"
+msgid "Year (4 digits):"
+msgstr "Jaar (4 cijfers):"
#: ../share/extensions/svgcalendar.inx.h:33
msgid "Year color:"
@@ -3845,7 +3833,7 @@ msgid "Middle and Right"
msgstr "Midden rechts"
#: ../share/extensions/webslicer_create_rect.inx.h:26
-#: ../src/extension/extension.cpp:740
+#: ../src/extension/extension.cpp:738
#: ../src/ui/dialog/input.cpp:592
msgid "Name:"
msgstr "Naam:"
@@ -3941,7 +3929,7 @@ msgstr "Indien je meer dan één attribuut wilt instellen, moeten deze gescheide
#: ../share/extensions/web-set-att.inx.h:7
#: ../share/extensions/web-transmit-att.inx.h:7
-#: ../src/interface.cpp:1555
+#: ../src/interface.cpp:1560
msgid "Replace"
msgstr "Vervangen"
@@ -4210,12 +4198,12 @@ msgstr ""
#: ../share/extensions/gcodetools.py:3240
#, python-format
msgid "Orientation points for '%s' layer have not been found! Please add orientation points using Orientation tab!"
-msgstr ""
+msgstr "Oriëntatiepunten voor laag '%s' werden niet gevonden! Voeg aub oriëntatiepunten toe met de tab Oriëntatie!"
#: ../share/extensions/gcodetools.py:3246
#, python-format
msgid "There are more than one orientation point groups in '%s' layer"
-msgstr ""
+msgstr "Er is meer dan één oriëntatiepuntgroep in laag '%s'."
#: ../share/extensions/gcodetools.py:3277
#: ../share/extensions/gcodetools.py:3279
@@ -4235,6 +4223,10 @@ msgid ""
"Solution 2: Path->Dynamic offset or Ctrl+J.\n"
"Solution 3: export all contours to PostScript level 2 (File->Save As->.ps) and File->Import this file."
msgstr ""
+"Deze uitbreiding werkt slechts met paden, dynamische offsets en groepen daarvan! Alle andere objecten worden genegeerd!\n"
+"Oplossing 1: druk op Pad->Object naar pad of Shift+Ctrl+C.\n"
+"Oplossing 2: Pad->Dynamische offset of Ctrl+J.\n"
+"Oplossing 3: exporteer alle contouren naar PostScript niveau 2 (Bestand->Opslaan als->.ps) en dit vervolgens importeren (Bestand->Importeren)."
#: ../share/extensions/gcodetools.py:3469
#, python-format
@@ -4264,11 +4256,12 @@ msgstr "Er zijn geen paden geselecteerd! Tracht te werken op alle aanwezige pade
#: ../share/extensions/gcodetools.py:3611
#: ../share/extensions/gcodetools.py:3682
msgid "Warning: One or more paths dont have 'd' parameter, try to Ungroup (Ctrl+Shift+G) and Object to Path (Ctrl+Shift+C)!"
-msgstr ""
+msgstr "Waarschuwing: een of meer paden hebben geen 'd' parameter. Probeer Groep opheffen (Ctrl+Shift+G) en Object naar pad (Ctrl+Shift+C)!"
#: ../share/extensions/gcodetools.py:3641
+#, fuzzy
msgid "Noting is selected. Please select something to convert to drill point (dxfpoint) or clear point sign."
-msgstr ""
+msgstr "Er is niets geselecteerd. Selecteer aub. iets om te converteren naar een boorpunt (dxf-punt) of "
#: ../share/extensions/gcodetools.py:3714
#: ../share/extensions/gcodetools.py:3808
@@ -4278,7 +4271,7 @@ msgstr "Deze uitbreiding vereist ten minste één geselecteerd pad."
#: ../share/extensions/gcodetools.py:3720
#, python-format
msgid "Tool diameter must be > 0 but tool's diameter on '%s' layer is not!"
-msgstr ""
+msgstr "Diameter gereedschap moet > 0 zijn, maar dit is niet zo voor laag '%s'!"
#: ../share/extensions/gcodetools.py:3731
msgid "Warning: omitting non-path"
@@ -4291,19 +4284,19 @@ msgstr "Gereedschap '%s' heeft geen vorm!"
#: ../share/extensions/gcodetools.py:4073
msgid "No need to engrave sharp angles."
-msgstr ""
+msgstr "Het is niet nodig om scherpe hoeken te graveren."
#: ../share/extensions/gcodetools.py:4086
msgid "Active layer already has orientation points! Remove them or select another layer!"
-msgstr ""
+msgstr "Actieve laag bevat al oriëntatiepunten! Verwijder ze of selecteer een andere laag!"
#: ../share/extensions/gcodetools.py:4134
msgid "Active layer already has a tool! Remove it or select another layer!"
-msgstr ""
+msgstr "Actieve laag bevat al een gereedschap! Verwijder het of selecteer een andere laag!"
#: ../share/extensions/gcodetools.py:4258
msgid "Selection is empty! Will compute whole drawing."
-msgstr "Selectie is leef! De volledige afbeelding wordt berekend."
+msgstr "Selectie is leeg! De volledige afbeelding wordt berekend."
#: ../share/extensions/gcodetools.py:4318
msgid ""
@@ -4313,28 +4306,33 @@ msgid ""
"and Russian support forum:\n"
"\thttp://www.cnc-club.ru/gcodetoolsru"
msgstr ""
+"Tutorials, handleidingen en odnersteuning beschikbaar\n"
+" op het English support forum:\n"
+"\thttp://www.cnc-club.ru/gcodetools\n"
+"en Russisch support forum:\n"
+"\thttp://www.cnc-club.ru/gcodetoolsru"
#: ../share/extensions/gcodetools.py:4363
msgid "Lathe X and Z axis remap should be 'X', 'Y' or 'Z'. Exiting..."
-msgstr ""
+msgstr "X- en Z-as herindeling van draaibank zouden 'X', 'Y' of 'Z' moeten zijn. Bezig met afronden..."
#: ../share/extensions/gcodetools.py:4366
msgid "Lathe X and Z axis remap should be the same. Exiting..."
-msgstr ""
+msgstr "X- en Z-as herindeling van draaibank zouden gelijk moeten zijn. Bezig met afronden..."
#: ../share/extensions/gcodetools.py:4527
msgid "Select one of the active tabs - Path to Gcode, Area, Engraving, DXF points, Orientation, Offset, Lathe or Tools library."
-msgstr ""
+msgstr "Selecteer een van de actieve tabs - Pad naar Gcode, Oppervlak, Oppervlakteartefacten, Gravure, DXF-punten, Gereedschappenbibliotheek of Oriëntatie."
#: ../share/extensions/gcodetools.py:4533
msgid "Orientation points have not been defined! A default set of orientation points has been automatically added."
-msgstr ""
+msgstr "Oriëntatiepunten werden niet gedefinieerd! Een standaard set oriëntatiepunten werd automatisch toegevoegd."
#: ../share/extensions/gcodetools.py:4537
msgid "Cutting tool has not been defined! A default tool has been automatically added."
-msgstr ""
+msgstr "Snijgereedschap is niet gedefinieerd! Een standaard gereedschap werd automatisch toegevoegd."
-#: ../share/extensions/inkex.py:67
+#: ../share/extensions/inkex.py:78
#, python-format
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\n"
@@ -4347,7 +4345,7 @@ msgstr ""
"Technische details:\n"
"%s"
-#: ../share/extensions/inkex.py:231
+#: ../share/extensions/inkex.py:242
#, python-format
msgid "No matching node for expression: %s"
msgstr "Geen overeenkomend knooppunt voor de expressie: %s"
@@ -4592,7 +4590,6 @@ msgstr "Uitsnijding"
#: ../share/filters/filters.svg.h:214
#: ../src/extension/internal/filter/drop-shadow.h:45
#: ../src/extension/internal/filter/drop-shadow.h:105
-#: ../src/extension/internal/filter/drop-shadow.h:165
msgid "Shadows and Glows"
msgstr "Schaduw en gloed"
@@ -6475,2382 +6472,2332 @@ msgstr "Tritone"
msgid "Create a tritone palette with hue selectable by flood"
msgstr "Een tritone palet maken waarbij de tint gekozen wordt door de vulling"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:4
msgctxt "Palette"
msgid "Blue1"
msgstr "Blauw1"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:7
msgctxt "Palette"
msgid "Blue2"
msgstr "Blauw2"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:10
msgctxt "Palette"
msgid "Blue3"
msgstr "Blauw3"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:13
msgctxt "Palette"
msgid "Red1"
msgstr "Rood1"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:16
msgctxt "Palette"
msgid "Red2"
msgstr "Rood2"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:19
msgctxt "Palette"
msgid "Red3"
msgstr "Rood3"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:22
msgctxt "Palette"
msgid "Orange1"
msgstr "Oranje1"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:25
msgctxt "Palette"
msgid "Orange2"
msgstr "Oranje2"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:28
msgctxt "Palette"
msgid "Orange3"
msgstr "Oranje3"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:31
msgctxt "Palette"
msgid "Brown1"
msgstr "Bruin1"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:34
msgctxt "Palette"
msgid "Brown2"
msgstr "Bruin2"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:37
msgctxt "Palette"
msgid "Brown3"
msgstr "Bruin3"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:40
msgctxt "Palette"
msgid "Green1"
msgstr "Groen1"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:43
msgctxt "Palette"
msgid "Green2"
msgstr "Groen2"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:46
msgctxt "Palette"
msgid "Green3"
msgstr "Groen3"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:49
msgctxt "Palette"
msgid "Purple1"
msgstr "Purper1"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:52
msgctxt "Palette"
msgid "Purple2"
msgstr "Purper2"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:55
msgctxt "Palette"
msgid "Purple3"
msgstr "Purper3"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:58
msgctxt "Palette"
msgid "Metalic1"
msgstr "Metallisch1"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:61
msgctxt "Palette"
msgid "Metalic2"
msgstr "Metallisch2"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:64
msgctxt "Palette"
msgid "Metalic3"
msgstr "Metallisch3"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:67
msgctxt "Palette"
msgid "Metalic4"
msgstr "Metallisch4"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:70
msgctxt "Palette"
msgid "Grey1"
msgstr "Grijs1"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:73
msgctxt "Palette"
msgid "Grey2"
msgstr "Grijs2"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:76
msgctxt "Palette"
msgid "Grey3"
msgstr "Grijs3"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:79
msgctxt "Palette"
msgid "Grey4"
msgstr "Grijs4"
-#. Palette: echo-palette.gpl
+#. Palette: ./echo-palette.gpl
#: ../share/palettes/palettes.h:82
msgctxt "Palette"
msgid "Grey5"
msgstr "Grijs5"
-#. Palette: inkscape.gpl
-#. Palette: Ubuntu.gpl
+#. Palette: ./inkscape.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:85
#: ../share/palettes/palettes.h:1192
msgctxt "Palette"
msgid "Black"
msgstr "Zwart"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:89
#, no-c-format
msgctxt "Palette"
msgid "90% Gray"
msgstr "90% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:93
#, no-c-format
msgctxt "Palette"
msgid "80% Gray"
msgstr "80% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:97
#, no-c-format
msgctxt "Palette"
msgid "70% Gray"
msgstr "70% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:101
#, no-c-format
msgctxt "Palette"
msgid "60% Gray"
msgstr "60% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:105
#, no-c-format
msgctxt "Palette"
msgid "50% Gray"
msgstr "50% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:109
#, no-c-format
msgctxt "Palette"
msgid "40% Gray"
msgstr "40% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:113
#, no-c-format
msgctxt "Palette"
msgid "30% Gray"
msgstr "60% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:117
#, no-c-format
msgctxt "Palette"
msgid "20% Gray"
msgstr "20% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:121
#, no-c-format
msgctxt "Palette"
msgid "10% Gray"
msgstr "10% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:125
#, no-c-format
msgctxt "Palette"
msgid "7.5% Gray"
msgstr "7.5% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:129
#, no-c-format
msgctxt "Palette"
msgid "5% Gray"
msgstr "5% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:133
#, no-c-format
msgctxt "Palette"
msgid "2.5% Gray"
msgstr "2.5% grijs"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:136
msgctxt "Palette"
msgid "White"
msgstr "Wit"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:139
msgctxt "Palette"
msgid "Maroon (#800000)"
-msgstr ""
+msgstr "Kastanjebruin (#800000)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:142
msgctxt "Palette"
msgid "Red (#FF0000)"
msgstr "Rood (#FF0000)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:145
msgctxt "Palette"
msgid "Olive (#808000)"
msgstr "Olijf (#808000)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:148
msgctxt "Palette"
msgid "Yellow (#FFFF00)"
msgstr "Geel (#FFFF00)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:151
msgctxt "Palette"
msgid "Green (#008000)"
msgstr "Groen (#008000)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:154
msgctxt "Palette"
msgid "Lime (#00FF00)"
-msgstr ""
+msgstr "Lime (#00FF00)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:157
msgctxt "Palette"
msgid "Teal (#008080)"
-msgstr ""
+msgstr "Middelblauwgroen (#008080)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:160
msgctxt "Palette"
msgid "Aqua (#00FFFF)"
msgstr "Water (#00FFFF)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:163
msgctxt "Palette"
msgid "Navy (#000080)"
-msgstr ""
+msgstr "Marineblauw (#000080)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:166
msgctxt "Palette"
msgid "Blue (#0000FF)"
msgstr "Blauw (#0000FF)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:169
msgctxt "Palette"
msgid "Purple (#800080)"
msgstr "Purper (#800080)"
-#. Palette: inkscape.gpl
+#. Palette: ./inkscape.gpl
#: ../share/palettes/palettes.h:172
msgctxt "Palette"
msgid "Fuchsia (#FF00FF)"
msgstr "Fuchsia (#FF00FF)"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:175
-#, fuzzy
msgctxt "Palette"
msgid "default outer 1"
-msgstr "Standaardtitel"
+msgstr "standaard rand 1"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:178
-#, fuzzy
msgctxt "Palette"
msgid "default outer 2"
-msgstr "Standaardtitel"
+msgstr "standaard rand 2"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:181
-#, fuzzy
msgctxt "Palette"
msgid "default outer 3"
-msgstr "Standaardtitel"
+msgstr "standaard rand 3"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:184
-#, fuzzy
msgctxt "Palette"
msgid "default block"
-msgstr "standaard"
+msgstr "standaard blok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:187
msgctxt "Palette"
msgid "default added blue"
-msgstr ""
+msgstr "standaard toegevoegd blauw"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:190
msgctxt "Palette"
msgid "default block header"
-msgstr ""
+msgstr "standaard blok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:193
msgctxt "Palette"
msgid "default alert block"
-msgstr ""
+msgstr "standaard waarschuwingsblok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:196
msgctxt "Palette"
msgid "default added red"
-msgstr ""
+msgstr "standaard toegevoegd rood"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:199
msgctxt "Palette"
msgid "default alert block header"
-msgstr ""
+msgstr "standaard waarschuwingsblok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:202
msgctxt "Palette"
msgid "default example block"
-msgstr ""
+msgstr "standaard voorbeeldblok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:205
msgctxt "Palette"
msgid "default added green"
-msgstr ""
+msgstr "standaard toegevoegd groen"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:208
msgctxt "Palette"
msgid "default example block header"
-msgstr ""
+msgstr "standaard voorbeeldblok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:211
-#, fuzzy
msgctxt "Palette"
msgid "default covered text"
-msgstr "Ingekaderde tekst maken"
+msgstr "standaard bedekte tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:214
msgctxt "Palette"
msgid "default covered bullet"
-msgstr ""
+msgstr "standaard bedekt opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:217
-#, fuzzy
msgctxt "Palette"
msgid "default background"
-msgstr "Achtergrond verwijderen"
+msgstr "Standaard achtergrond"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:220
-#, fuzzy
msgctxt "Palette"
msgid "default text"
-msgstr "standaard"
+msgstr "standaard tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:223
msgctxt "Palette"
msgid "default light outer 1"
-msgstr ""
+msgstr "standaard heldere rand 1"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:226
msgctxt "Palette"
msgid "default light outer 2"
-msgstr ""
+msgstr "standaard heldere rand 2"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:229
msgctxt "Palette"
msgid "default light outer 3"
-msgstr ""
+msgstr "standaard heldere rand 3"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:232
-#, fuzzy
msgctxt "Palette"
msgid "default light block"
-msgstr "Standaardtitel"
+msgstr "standaard helder blok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:235
msgctxt "Palette"
msgid "default light block header"
-msgstr ""
+msgstr "standaard helder blok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:238
msgctxt "Palette"
msgid "default light block header text"
-msgstr ""
+msgstr "standaard helder blok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:241
msgctxt "Palette"
msgid "default light alert block"
-msgstr ""
+msgstr "standaard helder waarschuwingsblok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:244
msgctxt "Palette"
msgid "default light alert block header"
-msgstr ""
+msgstr "standaard helder waarschuwingsblok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:247
msgctxt "Palette"
msgid "default light alert block header text"
-msgstr ""
+msgstr "standaard helder waarschuwingsblok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:250
msgctxt "Palette"
msgid "default light example block"
-msgstr ""
+msgstr "standaard helder voorbeeldblok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:253
msgctxt "Palette"
msgid "default light example block header"
-msgstr ""
+msgstr "standaard helder voorbeeldblok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:256
msgctxt "Palette"
msgid "default light example block header text"
-msgstr ""
+msgstr "standaard helder voorbeeldblok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:259
-#, fuzzy
msgctxt "Palette"
msgid "default light covered text"
-msgstr "Standaard interface setup"
+msgstr "standaard heldere bedekte tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:262
msgctxt "Palette"
msgid "default light covered bullet"
-msgstr ""
+msgstr "standaard helder bedekt opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:265
msgctxt "Palette"
msgid "default light background"
-msgstr ""
+msgstr "standaard heldere achtergrond"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:268
-#, fuzzy
msgctxt "Palette"
msgid "default light text"
-msgstr "Standaardtitel"
+msgstr "standaard heldere tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:271
msgctxt "Palette"
msgid "beetle outer 1"
-msgstr ""
+msgstr "beetle rand 1"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:274
msgctxt "Palette"
msgid "beetle outer 2"
-msgstr ""
+msgstr "beetle rand 2"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:277
msgctxt "Palette"
msgid "beetle outer 3"
-msgstr ""
+msgstr "beetle rand 3"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:280
#: ../share/palettes/palettes.h:283
#: ../share/palettes/palettes.h:286
msgctxt "Palette"
msgid "beetle added blue"
-msgstr ""
+msgstr "beetle toegevoegd blauw"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:289
msgctxt "Palette"
msgid "beetle added red"
-msgstr ""
+msgstr "beetle toegevoegd rood"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:292
msgctxt "Palette"
msgid "beetle alert block header text"
-msgstr ""
+msgstr "beetle waarschuwingsblok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:295
-#, fuzzy
msgctxt "Palette"
msgid "beetle added green"
-msgstr "Kleurverlopen maken en aanpassen"
+msgstr "beetle toegevoegd groen"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:298
msgctxt "Palette"
msgid "beetle example block header text"
-msgstr ""
+msgstr "beetle voorbeeldblok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:301
-#, fuzzy
msgctxt "Palette"
msgid "beetle header text"
-msgstr "Tekst verwijderen"
+msgstr "beetle tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:304
#: ../share/palettes/palettes.h:316
msgctxt "Palette"
msgid "beetle added grey"
-msgstr ""
+msgstr "beetle toegevoegd grijs"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:307
msgctxt "Palette"
msgid "beetle covered bullet"
-msgstr ""
+msgstr "beetle bedekt opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:310
-#, fuzzy
msgctxt "Palette"
msgid "beetle background"
-msgstr "Achtergrond verwijderen"
+msgstr "beetle achtergrond"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:313
-#, fuzzy
msgctxt "Palette"
msgid "beetle covered text"
-msgstr "Ingekaderde tekst maken"
+msgstr "beetle bedekte tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:319
-#, fuzzy
msgctxt "Palette"
msgid "beetle text"
-msgstr "Tekst verwijderen"
+msgstr "beetle tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:322
msgctxt "Palette"
msgid "albatross outer 1"
-msgstr ""
+msgstr "albatross rand 1"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:325
msgctxt "Palette"
msgid "albatross outer 2"
-msgstr ""
+msgstr "albatross rand 2"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:328
msgctxt "Palette"
msgid "albatross outer 3"
-msgstr ""
+msgstr "albatross rand 3"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:331
-#, fuzzy
msgctxt "Palette"
msgid "albatross background"
-msgstr "Achtergrond verwijderen"
+msgstr "albatross achtergrond"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:334
msgctxt "Palette"
msgid "albatross block"
-msgstr ""
+msgstr "albatross blok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:337
msgctxt "Palette"
msgid "albatross block header"
-msgstr ""
+msgstr "albatross blok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:340
msgctxt "Palette"
msgid "albatross header text"
-msgstr ""
+msgstr "albatross tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:343
msgctxt "Palette"
msgid "albatross bullet"
-msgstr ""
+msgstr "albatross opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:346
msgctxt "Palette"
msgid "albatross covered bullet"
-msgstr ""
+msgstr "albatross bedekt opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:349
msgctxt "Palette"
msgid "albatross covered text"
-msgstr ""
+msgstr "albatross bedekte tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:352
msgctxt "Palette"
msgid "albatross added red"
-msgstr ""
+msgstr "albatross toegevoegd rood"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:355
msgctxt "Palette"
msgid "albatross alert block header text"
-msgstr ""
+msgstr "albatross waarschuwingsblok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:358
msgctxt "Palette"
msgid "albatross added green"
-msgstr ""
+msgstr "albatross toegevoegd groen"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:361
msgctxt "Palette"
msgid "albatross example block header text"
-msgstr ""
+msgstr "albatross voorbeeldblok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:364
msgctxt "Palette"
msgid "albatross text"
-msgstr ""
+msgstr "albatross tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:367
msgctxt "Palette"
msgid "albatross added yellow"
-msgstr ""
+msgstr "albatross toegevoegd geel"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:370
msgctxt "Palette"
msgid "albatross added white"
-msgstr ""
+msgstr "albatross toegevoegd wit"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:373
-#, fuzzy
msgctxt "Palette"
msgid "fly text"
-msgstr "Tik tekst"
+msgstr "fly tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:376
#: ../share/palettes/palettes.h:385
msgctxt "Palette"
msgid "fly added grey"
-msgstr ""
+msgstr "fly toegevoegd grijs"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:379
-#, fuzzy
msgctxt "Palette"
msgid "fly outer"
-msgstr "filter"
+msgstr "fly rand"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:382
-#, fuzzy
msgctxt "Palette"
msgid "fly background"
-msgstr "Achtergrond"
+msgstr "fly achtergrond"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:388
-#, fuzzy
msgctxt "Palette"
msgid "fly header text"
-msgstr "Tekst verwijderen"
+msgstr "fly tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:391
msgctxt "Palette"
msgid "fly covered bullet"
-msgstr ""
+msgstr "fly bedekt opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:394
-#, fuzzy
msgctxt "Palette"
msgid "fly covered text"
-msgstr "Ingekaderde tekst"
+msgstr "fly bedekte tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:397
msgctxt "Palette"
msgid "fly added red"
-msgstr ""
+msgstr "fly toegevoegd rood"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:400
msgctxt "Palette"
msgid "fly alert block header text"
-msgstr ""
+msgstr "fly waarschuwingsblok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:403
msgctxt "Palette"
msgid "fly added green"
-msgstr ""
+msgstr "fly toegevoegd groen"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:406
msgctxt "Palette"
msgid "fly example block header text"
-msgstr ""
+msgstr "fly voorbeeldblok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:409
msgctxt "Palette"
msgid "fly added blue"
-msgstr ""
+msgstr "fly toegevoegd blauw"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:412
msgctxt "Palette"
msgid "fly added default blue"
-msgstr ""
+msgstr "fly toegevoegd standaard blauw"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:415
msgctxt "Palette"
msgid "seagull outer 1"
-msgstr ""
+msgstr "seagull rand 1"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:418
msgctxt "Palette"
msgid "seagull outer 2"
-msgstr ""
+msgstr "seagull rand 2"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:421
msgctxt "Palette"
msgid "seagull outer 3"
-msgstr ""
+msgstr "seagull rand 3"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:424
msgctxt "Palette"
msgid "seagull block"
-msgstr ""
+msgstr "seagull blok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:427
msgctxt "Palette"
msgid "seagull added grey"
-msgstr ""
+msgstr "seagull toegevoegd grijs"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:430
msgctxt "Palette"
msgid "seagull block header"
-msgstr ""
+msgstr "seagull blok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:433
msgctxt "Palette"
msgid "seagull covered text"
-msgstr ""
+msgstr "seagull bedekte tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:436
msgctxt "Palette"
msgid "seagull covered bullet"
-msgstr ""
+msgstr "seagull bedekt opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:439
-#, fuzzy
msgctxt "Palette"
msgid "seagull background"
-msgstr "Achtergrond verwijderen"
+msgstr "seagull achtergrond"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:442
-#, fuzzy
msgctxt "Palette"
msgid "seagull text"
-msgstr "Verticale tekst"
+msgstr "seagull tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:445
msgctxt "Palette"
msgid "beaver outer frame"
-msgstr ""
+msgstr "beaver buitenrand"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:448
#: ../share/palettes/palettes.h:451
#: ../share/palettes/palettes.h:475
msgctxt "Palette"
msgid "beaver added red"
-msgstr ""
+msgstr "beaver toegevoegd rood"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:454
msgctxt "Palette"
msgid "beaver outer 1"
-msgstr ""
+msgstr "beaver rand 1"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:457
msgctxt "Palette"
msgid "beaver outer 2"
-msgstr ""
+msgstr "beaver rand 2"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:460
msgctxt "Palette"
msgid "beaver outer 3"
-msgstr ""
+msgstr "beaver rand 3"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:463
msgctxt "Palette"
msgid "beaver added blue"
-msgstr ""
+msgstr "beaver toegevoegd blauw"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:466
-#, fuzzy
msgctxt "Palette"
msgid "beaver block header text"
-msgstr "Ingekaderde tekst maken"
+msgstr "blok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:469
-#, fuzzy
msgctxt "Palette"
msgid "beaver added green"
-msgstr "Kleurverlopen maken en aanpassen"
+msgstr "beaver toegevoegd groen"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:472
msgctxt "Palette"
msgid "beaver example block header text"
-msgstr ""
+msgstr "beaver voorbeeldblok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:478
msgctxt "Palette"
msgid "beaver alert block header text"
-msgstr ""
+msgstr "beaver waarschuwingsblok tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:481
-#, fuzzy
msgctxt "Palette"
msgid "beaver covered text"
-msgstr "Ingekaderde tekst maken"
+msgstr "beaver bedekte tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:484
msgctxt "Palette"
msgid "beaver covered bullet"
-msgstr ""
+msgstr "beaver bedekt opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:487
-#, fuzzy
msgctxt "Palette"
msgid "beaver background"
-msgstr "Achtergrond verwijderen"
+msgstr "beaver achtergrond"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:490
-#, fuzzy
msgctxt "Palette"
msgid "beaver text"
-msgstr "Tekst aanmaken"
+msgstr "beaver tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:493
-#, fuzzy
msgctxt "Palette"
msgid "crane outer 1"
-msgstr "Oplopende driehoek"
+msgstr "crane rand 1"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:496
-#, fuzzy
msgctxt "Palette"
msgid "crane outer 2"
-msgstr "Oplopende driehoek"
+msgstr "crane rand 2"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:499
-#, fuzzy
msgctxt "Palette"
msgid "crane outer 3"
-msgstr "Oplopende driehoek"
+msgstr "crane rand 3"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:502
msgctxt "Palette"
msgid "crane block"
-msgstr ""
+msgstr "crane blok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:505
-#, fuzzy
msgctxt "Palette"
msgid "crane added orange"
-msgstr "beperkte hoek"
+msgstr "crane toegevoegd oranje"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:508
-#, fuzzy
msgctxt "Palette"
msgid "crane block header"
-msgstr "Laag ontgrendelen"
+msgstr "crane blok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:511
msgctxt "Palette"
msgid "crane alert block"
-msgstr ""
+msgstr "crane waarschuwingsblok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:514
msgctxt "Palette"
msgid "crane added red"
-msgstr ""
+msgstr "crane toegevoegd rood"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:517
msgctxt "Palette"
msgid "crane alert block header"
-msgstr ""
+msgstr "crane waarschuwingsblok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:520
msgctxt "Palette"
msgid "crane example block"
-msgstr ""
+msgstr "crane voorbeeldblok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:523
-#, fuzzy
msgctxt "Palette"
msgid "crane added green"
-msgstr "Kleurverlopen maken en aanpassen"
+msgstr "crane toegevoegd groen"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:526
msgctxt "Palette"
msgid "crane example block header"
-msgstr ""
+msgstr "crane voorbeeldblok hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:529
-#, fuzzy
msgctxt "Palette"
msgid "crane covered text"
-msgstr "Ingekaderde tekst maken"
+msgstr "crane bedekte tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:532
msgctxt "Palette"
msgid "crane covered bullet"
-msgstr ""
+msgstr "crane bedekt opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:535
msgctxt "Palette"
msgid "crane bullet"
-msgstr ""
+msgstr "crane opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:538
-#, fuzzy
msgctxt "Palette"
msgid "crane background"
-msgstr "Achtergrond volgen"
+msgstr "crane achtergrond"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:541
-#, fuzzy
msgctxt "Palette"
msgid "crane text"
-msgstr "Tekst aanmaken"
+msgstr "crane tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:544
msgctxt "Palette"
msgid "wolverine outer 1"
-msgstr ""
+msgstr "wolverine rand 1"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:547
msgctxt "Palette"
msgid "wolverine outer 2"
-msgstr ""
+msgstr "wolverine rand 2"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:550
msgctxt "Palette"
msgid "wolverine outer 3"
-msgstr ""
+msgstr "wolverine rand 3"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:553
msgctxt "Palette"
msgid "wolverine outer 4"
-msgstr ""
+msgstr "wolverine rand 4"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:556
msgctxt "Palette"
msgid "wolverine added yellow"
-msgstr ""
+msgstr "wolverine toegevoegd geel"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:559
msgctxt "Palette"
msgid "wolverine added blue"
-msgstr ""
+msgstr "wolverine toegevoegd blauw"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:562
msgctxt "Palette"
msgid "wolverine header text"
-msgstr ""
+msgstr "wolverine tekst hoofding"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:565
msgctxt "Palette"
msgid "wolverine added green"
-msgstr ""
+msgstr "wolverine toegevoegd groen"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:568
msgctxt "Palette"
msgid "wolverine example block title"
-msgstr ""
+msgstr "wolverine titel voorbeeldblok"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:571
msgctxt "Palette"
msgid "wolverine covered text"
-msgstr ""
+msgstr "wolverine bedekte tekst"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:574
msgctxt "Palette"
msgid "wolverine covered bullet"
-msgstr ""
+msgstr "wolverine bedekt opsommingsteken"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:577
-#, fuzzy
msgctxt "Palette"
msgid "wolverine background"
-msgstr "Achtergrond verwijderen"
+msgstr "wolverine achtergrond"
-#. Palette: LaTeX-Beamer.gpl
+#. Palette: ./LaTeX-Beamer.gpl
#: ../share/palettes/palettes.h:580
-#, fuzzy
msgctxt "Palette"
msgid "wolverine text"
-msgstr "Tekst verwijderen"
+msgstr "wolverine tekst"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:583
msgctxt "Palette"
msgid "black (#000000)"
msgstr "zwart (#000000)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:586
msgctxt "Palette"
msgid "dimgray (#696969)"
-msgstr ""
+msgstr "dimgrijs (#696969)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:589
msgctxt "Palette"
msgid "gray (#808080)"
msgstr "grijs (#808080)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:592
msgctxt "Palette"
msgid "darkgray (#A9A9A9)"
msgstr "donkergrijs (#A9A9A9)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:595
msgctxt "Palette"
msgid "silver (#C0C0C0)"
msgstr "zilver (#C0C0C0)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:598
msgctxt "Palette"
msgid "lightgray (#D3D3D3)"
msgstr "lichtgrijs (#D3D3D3)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:601
msgctxt "Palette"
msgid "gainsboro (#DCDCDC)"
-msgstr ""
+msgstr "gainsboro (#DCDCDC)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:604
msgctxt "Palette"
msgid "whitesmoke (#F5F5F5)"
-msgstr ""
+msgstr "witte rook (#F5F5F5)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:607
msgctxt "Palette"
msgid "white (#FFFFFF)"
msgstr "wit (#FFFFFF)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:610
msgctxt "Palette"
msgid "rosybrown (#BC8F8F)"
msgstr "roosbruin (#BC8F8F)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:613
msgctxt "Palette"
msgid "indianred (#CD5C5C)"
-msgstr ""
+msgstr "indianenrood (#CD5C5C)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:616
msgctxt "Palette"
msgid "brown (#A52A2A)"
msgstr "bruin (#A52A2A)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:619
msgctxt "Palette"
msgid "firebrick (#B22222)"
-msgstr ""
+msgstr "vuurvaste baksteen (#B22222)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:622
msgctxt "Palette"
msgid "lightcoral (#F08080)"
-msgstr ""
+msgstr "lichtkoraal (#F08080)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:625
msgctxt "Palette"
msgid "maroon (#800000)"
-msgstr ""
+msgstr "kastanjebruin (#800000)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:628
msgctxt "Palette"
msgid "darkred (#8B0000)"
-msgstr ""
+msgstr "donkerrood (#8B0000)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:631
msgctxt "Palette"
msgid "red (#FF0000)"
-msgstr ""
+msgstr "rood (#FF0000)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:634
msgctxt "Palette"
msgid "snow (#FFFAFA)"
-msgstr ""
+msgstr "sneeuw (#FFFAFA)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:637
msgctxt "Palette"
msgid "mistyrose (#FFE4E1)"
-msgstr ""
+msgstr "mistyrose (#FFE4E1)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:640
msgctxt "Palette"
msgid "salmon (#FA8072)"
msgstr "zalm (#FA8072)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:643
msgctxt "Palette"
msgid "tomato (#FF6347)"
msgstr "tomaat (#FF6347)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:646
msgctxt "Palette"
msgid "darksalmon (#E9967A)"
msgstr "donkerzalm (#E9967A)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:649
msgctxt "Palette"
msgid "coral (#FF7F50)"
msgstr "koraal (#FF7F50)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:652
msgctxt "Palette"
msgid "orangered (#FF4500)"
msgstr "oranjerood (#FF4500)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:655
msgctxt "Palette"
msgid "lightsalmon (#FFA07A)"
msgstr "lightzalm (#FFA07A)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:658
msgctxt "Palette"
msgid "sienna (#A0522D)"
-msgstr ""
+msgstr "sienna (#A0522D)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:661
msgctxt "Palette"
msgid "seashell (#FFF5EE)"
-msgstr ""
+msgstr "schelp (#FFF5EE)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:664
msgctxt "Palette"
msgid "chocolate (#D2691E)"
-msgstr ""
+msgstr "chocolade (#D2691E)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:667
msgctxt "Palette"
msgid "saddlebrown (#8B4513)"
-msgstr ""
+msgstr "zadelbruin (#8B4513)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:670
msgctxt "Palette"
msgid "sandybrown (#F4A460)"
-msgstr ""
+msgstr "zandbruin (#F4A460)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:673
msgctxt "Palette"
msgid "peachpuff (#FFDAB9)"
-msgstr ""
+msgstr "perzikachtig (#FFDAB9)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:676
msgctxt "Palette"
msgid "peru (#CD853F)"
-msgstr ""
+msgstr "peru (#CD853F)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:679
msgctxt "Palette"
msgid "linen (#FAF0E6)"
-msgstr ""
+msgstr "linnen (#FAF0E6)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:682
msgctxt "Palette"
msgid "bisque (#FFE4C4)"
-msgstr ""
+msgstr "bisque (#FFE4C4)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:685
msgctxt "Palette"
msgid "darkorange (#FF8C00)"
-msgstr ""
+msgstr "donkeroranje (#FF8C00)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:688
msgctxt "Palette"
msgid "burlywood (#DEB887)"
-msgstr ""
+msgstr "burlywood (#DEB887)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:691
msgctxt "Palette"
msgid "tan (#D2B48C)"
-msgstr ""
+msgstr "tan (#D2B48C)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:694
msgctxt "Palette"
msgid "antiquewhite (#FAEBD7)"
-msgstr ""
+msgstr "antiekwit (#FAEBD7)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:697
msgctxt "Palette"
msgid "navajowhite (#FFDEAD)"
-msgstr ""
+msgstr "navajowit (#FFDEAD)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:700
msgctxt "Palette"
msgid "blanchedalmond (#FFEBCD)"
-msgstr ""
+msgstr "blanchedalmond (#FFEBCD)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:703
msgctxt "Palette"
msgid "papayawhip (#FFEFD5)"
-msgstr ""
+msgstr "papayawhip (#FFEFD5)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:706
msgctxt "Palette"
msgid "moccasin (#FFE4B5)"
-msgstr ""
+msgstr "moccasin (#FFE4B5)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:709
msgctxt "Palette"
msgid "orange (#FFA500)"
-msgstr ""
+msgstr "oranje (#FFA500)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:712
msgctxt "Palette"
msgid "wheat (#F5DEB3)"
-msgstr ""
+msgstr "tarwe (#F5DEB3)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:715
msgctxt "Palette"
msgid "oldlace (#FDF5E6)"
-msgstr ""
+msgstr "kant (#FDF5E6)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:718
msgctxt "Palette"
msgid "floralwhite (#FFFAF0)"
-msgstr ""
+msgstr "floraalwit (#FFFAF0)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:721
msgctxt "Palette"
msgid "darkgoldenrod (#B8860B)"
-msgstr ""
+msgstr "darkgoldenrod (#B8860B)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:724
msgctxt "Palette"
msgid "goldenrod (#DAA520)"
-msgstr ""
+msgstr "goldenrod (#DAA520)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:727
msgctxt "Palette"
msgid "cornsilk (#FFF8DC)"
-msgstr ""
+msgstr "cornsilk (#FFF8DC)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:730
msgctxt "Palette"
msgid "gold (#FFD700)"
-msgstr ""
+msgstr "goud (#FFD700)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:733
msgctxt "Palette"
msgid "khaki (#F0E68C)"
-msgstr ""
+msgstr "kaki (#F0E68C)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:736
msgctxt "Palette"
msgid "lemonchiffon (#FFFACD)"
-msgstr ""
+msgstr "lemonchiffon (#FFFACD)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:739
msgctxt "Palette"
msgid "palegoldenrod (#EEE8AA)"
-msgstr ""
+msgstr "palegoldenrod (#EEE8AA)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:742
msgctxt "Palette"
msgid "darkkhaki (#BDB76B)"
-msgstr ""
+msgstr "donkerkaki (#BDB76B)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:745
msgctxt "Palette"
msgid "beige (#F5F5DC)"
-msgstr ""
+msgstr "beige (#F5F5DC)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:748
msgctxt "Palette"
msgid "lightgoldenrodyellow (#FAFAD2)"
-msgstr ""
+msgstr "lightgoldenrodyellow (#FAFAD2)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:751
msgctxt "Palette"
msgid "olive (#808000)"
-msgstr ""
+msgstr "olijf (#808000)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:754
msgctxt "Palette"
msgid "yellow (#FFFF00)"
-msgstr ""
+msgstr "geel (#FFFF00)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:757
msgctxt "Palette"
msgid "lightyellow (#FFFFE0)"
-msgstr ""
+msgstr "lichtgeel (#FFFFE0)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:760
msgctxt "Palette"
msgid "ivory (#FFFFF0)"
-msgstr ""
+msgstr "ivoor (#FFFFF0)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:763
msgctxt "Palette"
msgid "olivedrab (#6B8E23)"
-msgstr ""
+msgstr "olijfdrab (#6B8E23)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:766
msgctxt "Palette"
msgid "yellowgreen (#9ACD32)"
-msgstr ""
+msgstr "geelgroen (#9ACD32)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:769
msgctxt "Palette"
msgid "darkolivegreen (#556B2F)"
-msgstr ""
+msgstr "donkerolijfgroen (#556B2F)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:772
msgctxt "Palette"
msgid "greenyellow (#ADFF2F)"
-msgstr ""
+msgstr "groengeel (#ADFF2F)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:775
msgctxt "Palette"
msgid "chartreuse (#7FFF00)"
-msgstr ""
+msgstr "chartreuse (#7FFF00)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:778
msgctxt "Palette"
msgid "lawngreen (#7CFC00)"
-msgstr ""
+msgstr "grasgroen (#7CFC00)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:781
msgctxt "Palette"
msgid "darkseagreen (#8FBC8F)"
-msgstr ""
+msgstr "donkerzeegroen (#8FBC8F"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:784
msgctxt "Palette"
msgid "forestgreen (#228B22)"
-msgstr ""
+msgstr "bosgroen (#228B22)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:787
msgctxt "Palette"
msgid "limegreen (#32CD32)"
-msgstr ""
+msgstr "limoengroen (#32CD32)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:790
msgctxt "Palette"
msgid "lightgreen (#90EE90)"
-msgstr ""
+msgstr "lichtgroen (#90EE90)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:793
msgctxt "Palette"
msgid "palegreen (#98FB98)"
-msgstr ""
+msgstr "bleekgroen (#98FB98)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:796
msgctxt "Palette"
msgid "darkgreen (#006400)"
-msgstr ""
+msgstr "donkergroen (#006400)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:799
msgctxt "Palette"
msgid "green (#008000)"
-msgstr ""
+msgstr "groen (#008000)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:802
msgctxt "Palette"
msgid "lime (#00FF00)"
-msgstr ""
+msgstr "limoen (#00FF00)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:805
msgctxt "Palette"
msgid "honeydew (#F0FFF0)"
-msgstr ""
+msgstr "honingdauw (#F0FFF0)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:808
msgctxt "Palette"
msgid "seagreen (#2E8B57)"
-msgstr ""
+msgstr "zeegroen (#2E8B57)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:811
msgctxt "Palette"
msgid "mediumseagreen (#3CB371)"
-msgstr ""
+msgstr "middelzeegroen (#3CB371)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:814
msgctxt "Palette"
msgid "springgreen (#00FF7F)"
-msgstr ""
+msgstr "lentegroen (#00FF7F)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:817
msgctxt "Palette"
msgid "mintcream (#F5FFFA)"
-msgstr ""
+msgstr "muntcrème (#F5FFFA)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:820
msgctxt "Palette"
msgid "mediumspringgreen (#00FA9A)"
-msgstr ""
+msgstr "middellentegroen (#00FA9A)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:823
msgctxt "Palette"
msgid "mediumaquamarine (#66CDAA)"
-msgstr ""
+msgstr "middelaquamarijn (#66CDAA)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:826
msgctxt "Palette"
msgid "aquamarine (#7FFFD4)"
-msgstr ""
+msgstr "aquamarijn (#7FFFD4)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:829
msgctxt "Palette"
msgid "turquoise (#40E0D0)"
-msgstr ""
+msgstr "turkoois (#40E0D0)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:832
msgctxt "Palette"
msgid "lightseagreen (#20B2AA)"
-msgstr ""
+msgstr "lichtzeegroen (#20B2AA)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:835
msgctxt "Palette"
msgid "mediumturquoise (#48D1CC)"
-msgstr ""
+msgstr "middelturkoois (#48D1CC)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:838
msgctxt "Palette"
msgid "darkslategray (#2F4F4F)"
-msgstr ""
+msgstr "donkerleisteengrijs (#2F4F4F)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:841
msgctxt "Palette"
msgid "paleturquoise (#AFEEEE)"
-msgstr ""
+msgstr "bleekturkoois (#AFEEEE)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:844
msgctxt "Palette"
msgid "teal (#008080)"
-msgstr ""
+msgstr "middelblauwgroen (#008080)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:847
msgctxt "Palette"
msgid "darkcyan (#008B8B)"
-msgstr ""
+msgstr "donkercyaan (#008B8B)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:850
msgctxt "Palette"
msgid "cyan (#00FFFF)"
-msgstr ""
+msgstr "cyaan (#00FFFF)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:853
msgctxt "Palette"
msgid "lightcyan (#E0FFFF)"
-msgstr ""
+msgstr "lichtcyaan (#E0FFFF)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:856
msgctxt "Palette"
msgid "azure (#F0FFFF)"
-msgstr ""
+msgstr "azuurblauw (#F0FFFF)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:859
msgctxt "Palette"
msgid "darkturquoise (#00CED1)"
-msgstr ""
+msgstr "donkerturkoois (#00CED1)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:862
msgctxt "Palette"
msgid "cadetblue (#5F9EA0)"
-msgstr ""
+msgstr "cadetblauw (#5F9EA0)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:865
msgctxt "Palette"
msgid "powderblue (#B0E0E6)"
-msgstr ""
+msgstr "poederblaauw (#B0E0E6)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:868
msgctxt "Palette"
msgid "lightblue (#ADD8E6)"
-msgstr ""
+msgstr "lichtblauw (#ADD8E6)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:871
msgctxt "Palette"
msgid "deepskyblue (#00BFFF)"
-msgstr ""
+msgstr "diep hemelsblauw (#00BFFF)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:874
msgctxt "Palette"
msgid "skyblue (#87CEEB)"
-msgstr ""
+msgstr "hemelsblauw (#87CEEB)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:877
msgctxt "Palette"
msgid "lightskyblue (#87CEFA)"
-msgstr ""
+msgstr "lichthemelsblauw (#87CEFA)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:880
msgctxt "Palette"
msgid "steelblue (#4682B4)"
-msgstr ""
+msgstr "staalblauw (#4682B4)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:883
msgctxt "Palette"
msgid "aliceblue (#F0F8FF)"
-msgstr ""
+msgstr "aliceblauw (#F0F8FF)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:886
msgctxt "Palette"
msgid "dodgerblue (#1E90FF)"
-msgstr ""
+msgstr "dodgerblue (#1E90FF)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:889
msgctxt "Palette"
msgid "slategray (#708090)"
-msgstr ""
+msgstr "leisteengrijs (#708090)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:892
msgctxt "Palette"
msgid "lightslategray (#778899)"
-msgstr ""
+msgstr "lichtleisteengrijs (#778899)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:895
msgctxt "Palette"
msgid "lightsteelblue (#B0C4DE)"
-msgstr ""
+msgstr "lichtstaalblauw (#B0C4DE)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:898
msgctxt "Palette"
msgid "cornflowerblue (#6495ED)"
-msgstr ""
+msgstr "korenbloemblauw (#6495ED)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:901
msgctxt "Palette"
msgid "royalblue (#4169E1)"
-msgstr ""
+msgstr "konigsblauw (#4169E1)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:904
msgctxt "Palette"
msgid "midnightblue (#191970)"
-msgstr ""
+msgstr "middernachtblauw (#191970)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:907
msgctxt "Palette"
msgid "lavender (#E6E6FA)"
-msgstr ""
+msgstr "lavendel (#E6E6FA)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:910
msgctxt "Palette"
msgid "navy (#000080)"
-msgstr ""
+msgstr "marineblauw (#000080)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:913
msgctxt "Palette"
msgid "darkblue (#00008B)"
-msgstr ""
+msgstr "donkerblauw (#00008B)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:916
msgctxt "Palette"
msgid "mediumblue (#0000CD)"
-msgstr ""
+msgstr "middelblauw (#00008B)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:919
msgctxt "Palette"
msgid "blue (#0000FF)"
-msgstr ""
+msgstr "blauw (#0000FF)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:922
msgctxt "Palette"
msgid "ghostwhite (#F8F8FF)"
-msgstr ""
+msgstr "spookwit (#F8F8FF)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:925
msgctxt "Palette"
msgid "slateblue (#6A5ACD)"
-msgstr ""
+msgstr "leisteenblauw (#6A5ACD)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:928
msgctxt "Palette"
msgid "darkslateblue (#483D8B)"
-msgstr ""
+msgstr "donkerleisteenblauw (#483D8B)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:931
msgctxt "Palette"
msgid "mediumslateblue (#7B68EE)"
-msgstr ""
+msgstr "middelleisteenblauw (#7B68EE)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:934
msgctxt "Palette"
msgid "mediumpurple (#9370DB)"
-msgstr ""
+msgstr "middelpurper (#9370DB)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:937
msgctxt "Palette"
msgid "blueviolet (#8A2BE2)"
-msgstr ""
+msgstr "blauwviolet (#8A2BE2)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:940
msgctxt "Palette"
msgid "indigo (#4B0082)"
-msgstr ""
+msgstr "indigo (#4B0082)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:943
msgctxt "Palette"
msgid "darkorchid (#9932CC)"
-msgstr ""
+msgstr "donkerorchidee (#9932CC)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:946
msgctxt "Palette"
msgid "darkviolet (#9400D3)"
-msgstr ""
+msgstr "donkerviolet (#9400D3)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:949
msgctxt "Palette"
msgid "mediumorchid (#BA55D3)"
-msgstr ""
+msgstr "middelorchidee (#BA55D3)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:952
msgctxt "Palette"
msgid "thistle (#D8BFD8)"
-msgstr ""
+msgstr "distel (#D8BFD8)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:955
msgctxt "Palette"
msgid "plum (#DDA0DD)"
-msgstr ""
+msgstr "pruim (#DDA0DD)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:958
msgctxt "Palette"
msgid "violet (#EE82EE)"
-msgstr ""
+msgstr "violet (#EE82EE)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:961
msgctxt "Palette"
msgid "purple (#800080)"
-msgstr ""
+msgstr "purper (#800080)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:964
msgctxt "Palette"
msgid "darkmagenta (#8B008B)"
-msgstr ""
+msgstr "donkermagenta (#8B008B)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:967
msgctxt "Palette"
msgid "magenta (#FF00FF)"
-msgstr ""
+msgstr "magenta (#FF00FF)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:970
msgctxt "Palette"
msgid "orchid (#DA70D6)"
-msgstr ""
+msgstr "orchidee (#DA70D6)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:973
msgctxt "Palette"
msgid "mediumvioletred (#C71585)"
-msgstr ""
+msgstr "mediumvioletrood (#C71585)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:976
msgctxt "Palette"
msgid "deeppink (#FF1493)"
-msgstr ""
+msgstr "dieproze (#FF1493)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:979
msgctxt "Palette"
msgid "hotpink (#FF69B4)"
-msgstr ""
+msgstr "warmroze (#FF69B4)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:982
msgctxt "Palette"
msgid "lavenderblush (#FFF0F5)"
-msgstr ""
+msgstr "lavendelblos (#FFF0F5)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:985
msgctxt "Palette"
msgid "palevioletred (#DB7093)"
-msgstr ""
+msgstr "bleekvioletrood (#DB7093)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:988
msgctxt "Palette"
msgid "crimson (#DC143C)"
-msgstr ""
+msgstr "karmozijnrood (#DC143C)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:991
msgctxt "Palette"
msgid "pink (#FFC0CB)"
-msgstr ""
+msgstr "roze (#FFC0CB)"
-#. Palette: svg.gpl
+#. Palette: ./svg.gpl
#: ../share/palettes/palettes.h:994
msgctxt "Palette"
msgid "lightpink (#FFB6C1)"
-msgstr ""
+msgstr "lichtroze (#FFB6C1)"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:997
msgctxt "Palette"
msgid "Butter 1"
msgstr "Boter 1"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1000
msgctxt "Palette"
msgid "Butter 2"
msgstr "Boter 2"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1003
msgctxt "Palette"
msgid "Butter 3"
msgstr "Boter 3"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1006
msgctxt "Palette"
msgid "Chameleon 1"
-msgstr ""
+msgstr "Kameleon 1"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1009
msgctxt "Palette"
msgid "Chameleon 2"
-msgstr ""
+msgstr "Kameleon 2"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1012
msgctxt "Palette"
msgid "Chameleon 3"
-msgstr ""
+msgstr "Kameleon 3"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1015
msgctxt "Palette"
msgid "Orange 1"
msgstr "Oranje 1"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1018
msgctxt "Palette"
msgid "Orange 2"
msgstr "Oranje 2"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1021
msgctxt "Palette"
msgid "Orange 3"
msgstr "Oranje 3"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1024
msgctxt "Palette"
msgid "Sky Blue 1"
-msgstr ""
+msgstr "Hemelsblauw 1"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1027
msgctxt "Palette"
msgid "Sky Blue 2"
-msgstr ""
+msgstr "Hemelsblauw 2"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1030
msgctxt "Palette"
msgid "Sky Blue 3"
-msgstr ""
+msgstr "Hemelsblauw 3"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1033
msgctxt "Palette"
msgid "Plum 1"
-msgstr ""
+msgstr "Pruim 1"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1036
msgctxt "Palette"
msgid "Plum 2"
-msgstr ""
+msgstr "Pruim 2"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1039
msgctxt "Palette"
msgid "Plum 3"
-msgstr ""
+msgstr "Pruim 3"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1042
msgctxt "Palette"
msgid "Chocolate 1"
-msgstr ""
+msgstr "Chocolade 1"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1045
msgctxt "Palette"
msgid "Chocolate 2"
-msgstr ""
+msgstr "Chocolade 2"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1048
msgctxt "Palette"
msgid "Chocolate 3"
-msgstr ""
+msgstr "Chocolade 3"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1051
msgctxt "Palette"
msgid "Scarlet Red 1"
msgstr "Scharlakenrood 1"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1054
msgctxt "Palette"
msgid "Scarlet Red 2"
msgstr "Scharlakenrood 2"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1057
msgctxt "Palette"
msgid "Scarlet Red 3"
msgstr "Scharlakenrood 3"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1060
msgctxt "Palette"
msgid "Aluminium 1"
msgstr "Aluminium 1"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1063
msgctxt "Palette"
msgid "Aluminium 2"
msgstr "Aluminium 2"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1066
msgctxt "Palette"
msgid "Aluminium 3"
msgstr "Aluminium 3"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1069
msgctxt "Palette"
msgid "Aluminium 4"
msgstr "Aluminium 4"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1072
msgctxt "Palette"
msgid "Aluminium 5"
msgstr "Aluminium 5"
-#. Palette: Tango-Palette.gpl
+#. Palette: ./Tango-Palette.gpl
#: ../share/palettes/palettes.h:1075
msgctxt "Palette"
msgid "Aluminium 6"
msgstr "Aluminium 6"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1078
-#, fuzzy
msgctxt "Palette"
msgid "Orange Hilight"
-msgstr "Lijnhoogte"
+msgstr "Oranje melding"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1081
msgctxt "Palette"
msgid "Orange"
msgstr "Oranje"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1084
msgctxt "Palette"
msgid "Orange Base"
-msgstr ""
+msgstr "Basis oranje"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1087
-#, fuzzy
msgctxt "Palette"
msgid "Orange Shadow"
-msgstr "Schaduw vanbinnen"
+msgstr "Schaduw oranje"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1090
msgctxt "Palette"
msgid "Accent Yellow Highlight"
-msgstr ""
+msgstr "Melding geel accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1093
msgctxt "Palette"
msgid "Yellow"
msgstr "Geel"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1096
msgctxt "Palette"
msgid "Accent Yellow Base"
-msgstr ""
+msgstr "Basis geel accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1099
msgctxt "Palette"
msgid "Accent Yellow Shadow"
-msgstr ""
+msgstr "Schaduw geel accent"
-# Is hier een specifieke term voor? -> Het gaat om de driehoek IaIbIc in http://nl.wikipedia.org/wiki/Aangeschreven_cirkel
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1102
-#, fuzzy
msgctxt "Palette"
msgid "Accent Orange"
-msgstr "Uitcentrum driehoek"
+msgstr "Oranje accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1105
-#, fuzzy
msgctxt "Palette"
msgid "Accent Red"
-msgstr "midden"
+msgstr "Rood accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1108
msgctxt "Palette"
msgid "Accent Red Base"
-msgstr ""
+msgstr "Basis rood accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1111
msgctxt "Palette"
msgid "Accent Deep Red"
-msgstr ""
+msgstr "Dieprood accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1114
msgctxt "Palette"
msgid "Human Highlight"
-msgstr ""
+msgstr "Melding mens"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1117
-#, fuzzy
msgctxt "Palette"
msgid "Human"
-msgstr "Han"
+msgstr "Mens"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1120
msgctxt "Palette"
msgid "Human Base"
-msgstr ""
+msgstr "Basis mens"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1123
-#, fuzzy
msgctxt "Palette"
msgid "Environmental Shadow"
-msgstr "Schaduw vanbinnen"
+msgstr "Schaduw omgeving"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1126
msgctxt "Palette"
msgid "Environmental Blue Highlight"
-msgstr ""
+msgstr "Melding omgeving blauw"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1129
msgctxt "Palette"
msgid "Environmental Blue Medium"
-msgstr ""
+msgstr "Omgeving middelblauw"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1132
msgctxt "Palette"
msgid "Environmental Blue Base"
-msgstr ""
+msgstr "Basis omgeving blauw"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1135
msgctxt "Palette"
msgid "Environmental Blue Shadow"
-msgstr ""
+msgstr "Schaduw omgeving blauw"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1138
#: ../share/palettes/palettes.h:1147
-#, fuzzy
msgctxt "Palette"
msgid "Accent Blue Shadow"
-msgstr "Schaduw vanbinnen"
+msgstr "Schaduw blauw accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1141
msgctxt "Palette"
msgid "Accent Blue"
-msgstr ""
+msgstr "Blauw accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1144
msgctxt "Palette"
msgid "Accent Blue Base"
-msgstr ""
+msgstr "Basis blauw accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1150
msgctxt "Palette"
msgid "Accent Green Highlight"
-msgstr ""
+msgstr "Melding groen accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1153
-#, fuzzy
msgctxt "Palette"
msgid "Accent Green"
-msgstr "Middelpunt ingeschreven driehoek"
+msgstr "Groen accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1156
-#, fuzzy
msgctxt "Palette"
msgid "Accent Green Base"
-msgstr "Eerste woord in zin met hoofdletter"
+msgstr "Basis groen accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1159
msgctxt "Palette"
msgid "Accent Green Shadow"
-msgstr ""
+msgstr "Schaduw groen accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1162
msgctxt "Palette"
msgid "Ubuntu Toner"
-msgstr ""
+msgstr "Ubuntu Toner"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1165
msgctxt "Palette"
msgid "Accent Magenta Highlight"
-msgstr ""
+msgstr "Melding magenta accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1168
-#, fuzzy
msgctxt "Palette"
msgid "Accent Magenta"
-msgstr "Magenta"
+msgstr "Magenta accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1171
msgctxt "Palette"
msgid "Accent Dark Violet"
-msgstr ""
+msgstr "Donkerviolet accent"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1174
msgctxt "Palette"
msgid "Grey 1"
msgstr "Grijs 1"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1177
msgctxt "Palette"
msgid "Grey 2"
msgstr "Grijs 2"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1180
msgctxt "Palette"
msgid "Grey 3"
msgstr "Grijs 3"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1183
msgctxt "Palette"
msgid "Grey 4"
msgstr "Grijs 4"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1186
msgctxt "Palette"
msgid "Grey 5"
msgstr "Grijs 5"
-#. Palette: Ubuntu.gpl
+#. Palette: ./Ubuntu.gpl
#: ../share/palettes/palettes.h:1189
msgctxt "Palette"
msgid "Grey 6"
@@ -9147,12 +9094,12 @@ msgid "Select <b>at least one non-connector object</b>."
msgstr "Selecteer <b>minstens één object</b> dat geen verbindingsobject is."
#: ../src/connector-context.cpp:1969
-#: ../src/widgets/toolbox.cpp:8147
+#: ../src/widgets/toolbox.cpp:8143
msgid "Make connectors avoid selected objects"
msgstr "Ervoor zorgen dat verbindingen geselecteerde objecten ontwijken"
#: ../src/connector-context.cpp:1970
-#: ../src/widgets/toolbox.cpp:8157
+#: ../src/widgets/toolbox.cpp:8153
msgid "Make connectors ignore selected objects"
msgstr "Ervoor zorgen dat verbindingen geselecteerde objecten negeren"
@@ -9227,7 +9174,7 @@ msgid "Delete tiled clones"
msgstr "Verwijder getegelde klonen"
#: ../src/dialogs/clonetiler.cpp:1087
-#: ../src/selection-chemistry.cpp:2021
+#: ../src/selection-chemistry.cpp:2030
msgid "Select an <b>object</b> to clone."
msgstr "Selecteer een <b>object</b> om te klonen."
@@ -9583,7 +9530,7 @@ msgstr "De vervaging voor elke kolom om-en-om afwisselen"
#: ../src/dialogs/clonetiler.cpp:2374
msgid "<b>Fade out:</b>"
-msgstr "<b>Oplossing:</b>"
+msgstr "<b>Ondoorzichtigheid:</b>"
#: ../src/dialogs/clonetiler.cpp:2381
msgid "Decrease tile opacity by this percentage for each row"
@@ -10991,12 +10938,12 @@ msgid "Bounding box side midpoint"
msgstr "Midden rand omvattend vak"
#: ../src/display/snap-indicator.cpp:176
-#: ../src/ui/tool/node.cpp:1178
+#: ../src/ui/tool/node.cpp:1192
msgid "Smooth node"
msgstr "Afgevlakt knooppunt"
#: ../src/display/snap-indicator.cpp:179
-#: ../src/ui/tool/node.cpp:1177
+#: ../src/ui/tool/node.cpp:1191
msgid "Cusp node"
msgstr "Hoekig knooppunt"
@@ -11072,24 +11019,24 @@ msgid "Unnamed document %d"
msgstr "Naamloos document %d"
#. We hit green anchor, closing Green-Blue-Red
-#: ../src/draw-context.cpp:578
+#: ../src/draw-context.cpp:560
msgid "Path is closed."
msgstr "Het pad is gesloten."
#. We hit bot start and end of single curve, closing paths
-#: ../src/draw-context.cpp:593
+#: ../src/draw-context.cpp:575
msgid "Closing path."
msgstr "Het pad wordt gesloten."
-#: ../src/draw-context.cpp:703
+#: ../src/draw-context.cpp:685
msgid "Draw path"
msgstr "Pad tekenen"
-#: ../src/draw-context.cpp:863
+#: ../src/draw-context.cpp:845
msgid "Creating single dot"
msgstr "Maken van één stip"
-#: ../src/draw-context.cpp:864
+#: ../src/draw-context.cpp:846
msgid "Create single dot"
msgstr "Enkele stip maken"
@@ -11153,7 +11100,7 @@ msgstr "Kalligrafische lijn tekenen"
msgid "<b>Drawing</b> an eraser stroke"
msgstr "<b>Wissen</b> met de gom"
-#: ../src/eraser-context.cpp:830
+#: ../src/eraser-context.cpp:833
msgid "Draw eraser stroke"
msgstr "Wissen met de gom"
@@ -11257,32 +11204,32 @@ msgstr "Uitbreiding \""
msgid "\" failed to load because "
msgstr "\" kon niet worden geladen omdat "
-#: ../src/extension/extension.cpp:642
+#: ../src/extension/extension.cpp:640
#, c-format
msgid "Could not create extension error log file '%s'"
msgstr "Het fouten-logboekbestand '%s' voor uitbreidingen kon niet worden aangemaakt"
-#: ../src/extension/extension.cpp:741
+#: ../src/extension/extension.cpp:739
msgid "ID:"
msgstr "ID:"
-#: ../src/extension/extension.cpp:742
+#: ../src/extension/extension.cpp:740
msgid "State:"
msgstr "Status:"
-#: ../src/extension/extension.cpp:742
+#: ../src/extension/extension.cpp:740
msgid "Loaded"
msgstr "Geladen"
-#: ../src/extension/extension.cpp:742
+#: ../src/extension/extension.cpp:740
msgid "Unloaded"
msgstr "Niet-geladen"
-#: ../src/extension/extension.cpp:742
+#: ../src/extension/extension.cpp:740
msgid "Deactivated"
msgstr "Uitgeschakeld"
-#: ../src/extension/extension.cpp:773
+#: ../src/extension/extension.cpp:771
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 "Er is momenteel geen help beschikbaar voor deze uitbreiding. Kijk aub. op de Inkscape website of vraag op de mailinglijsten indien je vragen hebt over deze uitbreiding."
@@ -11750,7 +11697,7 @@ msgstr "Drempelwaarde"
#: ../src/ui/dialog/tracedialog.cpp:420
#: ../src/ui/dialog/tracedialog.cpp:453
#: ../src/ui/dialog/tracedialog.cpp:596
-#: ../src/widgets/toolbox.cpp:8386
+#: ../src/widgets/toolbox.cpp:8382
msgid "Threshold:"
msgstr "Grenswaarde:"
@@ -11972,6 +11919,10 @@ msgstr "Witte, vage vallende gloed"
msgid "Drop shadow, color -EXP-"
msgstr "Slagschaduw, gekleurd -EXP-"
+#: ../src/extension/internal/filter/drop-shadow.h:165
+msgid "Experimental"
+msgstr "Experimenteel"
+
#: ../src/extension/internal/filter/drop-shadow.h:168
msgid "Colorizable Drop shadow"
msgstr "Gekleurde slagschaduw"
@@ -12629,7 +12580,7 @@ msgid "Gamma"
msgstr "Gamma"
#: ../src/filter-enums.cpp:92
-#: ../src/selection-chemistry.cpp:425
+#: ../src/selection-chemistry.cpp:434
#: ../src/widgets/gradient-selector.cpp:142
msgid "Duplicate"
msgstr "Dupliceren"
@@ -12769,7 +12720,7 @@ msgstr "<b>Einde</b> van lineair kleurverloop"
#: ../src/gradient-context.cpp:132
#: ../src/gradient-drag.cpp:76
msgid "Linear gradient <b>mid stop</b>"
-msgstr "<b>Overgangspunt</b> in lineair kleurverloop"
+msgstr "<b>Overgang</b> in lineair kleurverloop"
#: ../src/gradient-context.cpp:133
#: ../src/gradient-drag.cpp:77
@@ -12794,7 +12745,7 @@ msgstr "<b>Brandpunt</b> van radiaal kleurverloop"
#: ../src/gradient-drag.cpp:81
#: ../src/gradient-drag.cpp:82
msgid "Radial gradient <b>mid stop</b>"
-msgstr "<b>Overgangspunt</b> in radiaal kleurverloop"
+msgstr "<b>Overgang</b> in radiaal kleurverloop"
#. TRANSLATORS: %s will be substituted with the point name (see previous messages); This is part of a compound message
#: ../src/gradient-context.cpp:163
@@ -12834,16 +12785,16 @@ msgstr[1] "Handvat geselecteerd dat %d overgangen verenigt (sleep met <b>Shift</
#, 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] "<b>%d</b> van %d kleurverloophandvat geselecteerd"
-msgstr[1] "<b>%d</b> van %d kleurverloophandvatten geselecteerd"
+msgstr[0] "<b>%d</b> (van %d) kleurverloophandvat geselecteerd"
+msgstr[1] "<b>%d</b> (van %d) kleurverloophandvatten geselecteerd"
#. TRANSLATORS: The plural refers to number of selected objects
#: ../src/gradient-context.cpp:187
#, c-format
msgid "<b>No</b> gradient handles selected out of %d on %d selected object"
msgid_plural "<b>No</b> gradient handles selected out of %d on %d selected objects"
-msgstr[0] "<b>Geen</b> van %d kleurverloophandvat geselecteerd op %d geselecteerde objecten"
-msgstr[1] "<b>Geen</b> van %d kleurverloophandvatten geselecteerd op %d geselecteerde objecten"
+msgstr[0] "<b>Geen</b> (van %d) kleurverloophandvat geselecteerd op %d geselecteerd object"
+msgstr[1] "<b>Geen</b> (van %d) kleurverloophandvat geselecteerd op %d geselecteerde objecten"
#: ../src/gradient-context.cpp:387
#: ../src/gradient-context.cpp:480
@@ -12887,55 +12838,55 @@ msgstr[1] "<b>Kleurverloop</b> voor %d objecten; gebruik <b>Ctrl</b> om in stapp
msgid "Select <b>objects</b> on which to create gradient."
msgstr "Selecteer <b>objecten</b> om een kleurverloop voor te maken."
-#: ../src/gradient-drag.cpp:642
+#: ../src/gradient-drag.cpp:626
msgid "Merge gradient handles"
msgstr "Kleurverloophandvatten samenvoegen"
-#: ../src/gradient-drag.cpp:945
+#: ../src/gradient-drag.cpp:931
msgid "Move gradient handle"
msgstr "Kleurverloophandvat verplaatsen"
-#: ../src/gradient-drag.cpp:998
+#: ../src/gradient-drag.cpp:984
#: ../src/widgets/gradient-vector.cpp:768
msgid "Delete gradient stop"
msgstr "Kleurverloopovergang verwijderen"
-#: ../src/gradient-drag.cpp:1162
+#: ../src/gradient-drag.cpp:1148
#, 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 voor: %s%s; sleep met <b>Ctrl</b> om aan randen te kleven; klik met <b>Ctrl+Alt</b> om overgang te verwijderen"
-#: ../src/gradient-drag.cpp:1166
-#: ../src/gradient-drag.cpp:1173
+#: ../src/gradient-drag.cpp:1152
+#: ../src/gradient-drag.cpp:1159
msgid " (stroke)"
msgstr " (lijn)"
-#: ../src/gradient-drag.cpp:1170
+#: ../src/gradient-drag.cpp:1156
#, 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 voor: %s%s; <b>Ctrl</b> draait in stappen, <b>Ctrl+Alt</b> behoudt de hoek, <b>Ctrl+Shift</b> vergroot rondom het centrum"
-#: ../src/gradient-drag.cpp:1178
+#: ../src/gradient-drag.cpp:1164
#, c-format
msgid "Radial gradient <b>center</b> and <b>focus</b>; drag with <b>Shift</b> to separate focus"
msgstr "Het <b>centrum</b> en het <b>brandpunt</b> van het radiale kleurverloop; sleep met <b>Shift</b> om het brandpunt los te koppelen"
-#: ../src/gradient-drag.cpp:1181
+#: ../src/gradient-drag.cpp:1167
#, 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] "Kleurverlooppunt gedeeld met <b>%d</b> kleurverloop; sleep met <b>Shift</b> om te scheiden"
msgstr[1] "Kleurverlooppunt gedeeld met <b>%d</b> kleurverlopen; sleep met <b>Shift</b> om te scheiden"
-#: ../src/gradient-drag.cpp:1881
+#: ../src/gradient-drag.cpp:1867
msgid "Move gradient handle(s)"
msgstr "Kleurverloophandvat(ten) verplaatsen"
-#: ../src/gradient-drag.cpp:1917
+#: ../src/gradient-drag.cpp:1903
msgid "Move gradient mid stop(s)"
msgstr "Kleurverloopovergang(en) verplaatsen"
-#: ../src/gradient-drag.cpp:2205
+#: ../src/gradient-drag.cpp:2191
msgid "Delete gradient stop(s)"
msgstr "Kleurverloopovergang(en) verwijderen"
@@ -12950,7 +12901,7 @@ msgstr "Eenheid"
#: ../src/widgets/toolbox.cpp:1574
#: ../src/widgets/toolbox.cpp:3314
#: ../src/widgets/toolbox.cpp:6038
-#: ../src/widgets/toolbox.cpp:8405
+#: ../src/widgets/toolbox.cpp:8401
msgid "Units"
msgstr "Eenheden"
@@ -13124,135 +13075,135 @@ msgstr "Auto-opslaan mislukt! Bestand %s kon niet bewaard worden."
msgid "Autosave complete."
msgstr "Auto-opslaan afgelopen."
-#: ../src/inkscape.cpp:661
+#: ../src/inkscape.cpp:670
msgid "Untitled document"
msgstr "Naamloos document"
#. Show nice dialog box
-#: ../src/inkscape.cpp:693
+#: ../src/inkscape.cpp:702
msgid "Inkscape encountered an internal error and will close now.\n"
msgstr "Er is een interne fout opgetreden in Inkscape. Het programma wordt afgesloten.\n"
-#: ../src/inkscape.cpp:694
+#: ../src/inkscape.cpp:703
msgid "Automatic backups of unsaved documents were done to the following locations:\n"
msgstr "Automatische reservekopieën van niet-opgeslagen documenten werden gemaakt op de volgende locaties:\n"
-#: ../src/inkscape.cpp:695
+#: ../src/inkscape.cpp:704
msgid "Automatic backup of the following documents failed:\n"
msgstr "Het automatisch maken van een reservekopie is mislukt voor de volgende bestanden:\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:811
+#: ../src/interface.cpp:816
msgid "Commands Bar"
msgstr "_Opdrachtenbalk"
-#: ../src/interface.cpp:811
+#: ../src/interface.cpp:816
msgid "Show or hide the Commands bar (under the menu)"
msgstr "Opdrachtenbalk weergeven of verbergen (onder de menubalk)"
# Misschien is "Eigenschappenbalk" beter?
-#: ../src/interface.cpp:813
+#: ../src/interface.cpp:818
msgid "Snap Controls Bar"
msgstr "Gereedschappenbalk kleven"
-#: ../src/interface.cpp:813
+#: ../src/interface.cpp:818
msgid "Show or hide the snapping controls"
msgstr "Balk met kleefinstellingen weergeven of verbergen"
# Misschien is "Eigenschappenbalk" beter?
-#: ../src/interface.cpp:815
+#: ../src/interface.cpp:820
msgid "Tool Controls Bar"
msgstr "Gereedschaps_details"
-#: ../src/interface.cpp:815
+#: ../src/interface.cpp:820
msgid "Show or hide the Tool Controls bar"
msgstr "Gereedschapsdetailsbalk weergeven of verbergen"
-#: ../src/interface.cpp:817
+#: ../src/interface.cpp:822
msgid "_Toolbox"
msgstr "_Gereedschappen"
-#: ../src/interface.cpp:817
+#: ../src/interface.cpp:822
msgid "Show or hide the main toolbox (on the left)"
msgstr "Gereedschappenbalk weergeven of verbergen (aan de linkerzijde)"
-#: ../src/interface.cpp:823
+#: ../src/interface.cpp:828
msgid "_Palette"
msgstr "_Palet"
-#: ../src/interface.cpp:823
+#: ../src/interface.cpp:828
msgid "Show or hide the color palette"
msgstr "Paletbalk weergeven of verbergen (onderaan)"
-#: ../src/interface.cpp:825
+#: ../src/interface.cpp:830
msgid "_Statusbar"
msgstr "_Statusbalk"
-#: ../src/interface.cpp:825
+#: ../src/interface.cpp:830
msgid "Show or hide the statusbar (at the bottom of the window)"
msgstr "Statusbalk weergeven of verbergen (onderaan)"
-#: ../src/interface.cpp:833
+#: ../src/interface.cpp:838
msgid "Default interface setup"
msgstr "Standaard interface setup"
-#: ../src/interface.cpp:834
+#: ../src/interface.cpp:839
msgid "Set the custom task"
msgstr "Aangepaste taak instellen"
-#: ../src/interface.cpp:835
+#: ../src/interface.cpp:840
msgid "Wide"
msgstr "Breedbeeld"
-#: ../src/interface.cpp:835
+#: ../src/interface.cpp:840
msgid "Setup for widescreen work"
-msgstr "Setup voor breedbeelwerk"
+msgstr "Setup voor breedbeeldwerk"
-#: ../src/interface.cpp:932
+#: ../src/interface.cpp:937
#, c-format
msgid "Verb \"%s\" Unknown"
msgstr "Werkwoord \"%s\" is onbekend"
-#: ../src/interface.cpp:974
+#: ../src/interface.cpp:979
msgid "Open _Recent"
msgstr "_Recente bestanden"
#. TRANSLATORS: #%s is the id of the group e.g. <g id="#g7">, not a number.
-#: ../src/interface.cpp:1079
+#: ../src/interface.cpp:1084
#, c-format
msgid "Enter group #%s"
msgstr "Groep #%s binnengaan"
-#: ../src/interface.cpp:1090
+#: ../src/interface.cpp:1095
msgid "Go to parent"
msgstr "Naar de ouder gaan"
-#: ../src/interface.cpp:1181
-#: ../src/interface.cpp:1267
-#: ../src/interface.cpp:1370
+#: ../src/interface.cpp:1186
+#: ../src/interface.cpp:1272
+#: ../src/interface.cpp:1375
#: ../src/ui/widget/selected-style.cpp:468
msgid "Drop color"
msgstr "Kleur plakken"
-#: ../src/interface.cpp:1220
-#: ../src/interface.cpp:1330
+#: ../src/interface.cpp:1225
+#: ../src/interface.cpp:1335
msgid "Drop color on gradient"
msgstr "Kleur plakken op kleurverloop"
-#: ../src/interface.cpp:1383
+#: ../src/interface.cpp:1388
msgid "Could not parse SVG data"
msgstr "De SVG-gegevens konden niet worden verwerkt."
-#: ../src/interface.cpp:1422
+#: ../src/interface.cpp:1427
msgid "Drop SVG"
msgstr "SVG plakken"
-#: ../src/interface.cpp:1456
+#: ../src/interface.cpp:1461
msgid "Drop bitmap image"
msgstr "Bitmap plakken"
-#: ../src/interface.cpp:1548
+#: ../src/interface.cpp:1553
#, c-format
msgid ""
"<span weight=\"bold\" size=\"larger\">A file named \"%s\" already exists. Do you want to replace it?</span>\n"
@@ -14100,7 +14051,7 @@ msgid "Scale the width of the pattern in units of its length"
msgstr "De breedte van het patroon in eenheden van zijn lengte"
#: ../src/live_effects/lpe-patternalongpath.cpp:68
-#: ../src/widgets/toolbox.cpp:8193
+#: ../src/widgets/toolbox.cpp:8189
msgid "Spacing:"
msgstr "Afstand:"
@@ -14923,74 +14874,74 @@ msgstr "_Help"
msgid "Tutorials"
msgstr "_Handleidingen"
-#: ../src/object-edit.cpp:439
+#: ../src/object-edit.cpp:438
msgid "Adjust the <b>horizontal rounding</b> radius; with <b>Ctrl</b> to make the vertical radius the same"
msgstr "De straal van de <b>horizontale afronding</b> van hoeken instellen; gebruik <b>Ctrl</b> om de verticale straal gelijk te maken"
-#: ../src/object-edit.cpp:443
+#: ../src/object-edit.cpp:442
msgid "Adjust the <b>vertical rounding</b> radius; with <b>Ctrl</b> to make the horizontal radius the same"
msgstr "De straal van de <b>verticale afronding</b> van hoeken instellen; gebruik <b>Ctrl</b> om de horizontale straal gelijk te maken"
-#: ../src/object-edit.cpp:447
-#: ../src/object-edit.cpp:451
+#: ../src/object-edit.cpp:446
+#: ../src/object-edit.cpp:450
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 "De <b>hoogte en breedte</b> van de rechthoek aanpassen; gebruik <b>Ctrl</b> om de verhouding te vergrendelen of om in één dimensie te schalen"
-#: ../src/object-edit.cpp:685
-#: ../src/object-edit.cpp:688
-#: ../src/object-edit.cpp:691
-#: ../src/object-edit.cpp:694
+#: ../src/object-edit.cpp:684
+#: ../src/object-edit.cpp:687
+#: ../src/object-edit.cpp:690
+#: ../src/object-edit.cpp:693
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 "Verander kubus grootte in X/Y-richting; met <b>Shift</b> over de Z-as; met <b>Ctrl</b> om de richting van randen en diagonalen vast te zetten."
-#: ../src/object-edit.cpp:697
-#: ../src/object-edit.cpp:700
-#: ../src/object-edit.cpp:703
-#: ../src/object-edit.cpp:706
+#: ../src/object-edit.cpp:696
+#: ../src/object-edit.cpp:699
+#: ../src/object-edit.cpp:702
+#: ../src/object-edit.cpp:705
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 "Verander grootte van kubus over de Z-as; met <b>Shift</b> in X/Y-richting; met <b>Ctrl</b> om de richting van randen of diagonalen vast te zetten"
-#: ../src/object-edit.cpp:709
+#: ../src/object-edit.cpp:708
msgid "Move the box in perspective"
msgstr "De kubus in perspectief verplaatsen"
-#: ../src/object-edit.cpp:927
+#: ../src/object-edit.cpp:926
msgid "Adjust ellipse <b>width</b>, with <b>Ctrl</b> to make circle"
msgstr "De <b>breedte</b> van de ellips aanpassen; gebruik <b>Ctrl</b> om een cirkel te maken"
-#: ../src/object-edit.cpp:930
+#: ../src/object-edit.cpp:929
msgid "Adjust ellipse <b>height</b>, with <b>Ctrl</b> to make circle"
msgstr "De <b>hoogte</b> van de ellips aanpassen; gebruik <b>Ctrl</b> om een cirkel te maken"
-#: ../src/object-edit.cpp:933
+#: ../src/object-edit.cpp:932
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 "Positioneer het <b>beginpunt</b> van boog of segment; <b>Ctrl</b> om te draaien in stappen; sleep <b>binnen</b> de ellips voor een boog, <b>erbuiten</b> voor een segment"
-#: ../src/object-edit.cpp:937
+#: ../src/object-edit.cpp:936
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 "Positioneer het <b>eindpunt</b> van boog of segment; <b>Ctrl</b> om te draaien in stappen; sleep <b>binnen</b> de ellips voor een boog, <b>erbuiten</b> voor een segment"
-#: ../src/object-edit.cpp:1076
+#: ../src/object-edit.cpp:1075
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 "De <b>puntstraal</b> van ster of veelhoek aanpassen: <b>Shift</b> om af te ronden; <b>Alt</b> voor willekeur"
-#: ../src/object-edit.cpp:1083
+#: ../src/object-edit.cpp:1082
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 "De <b>binnenstraal</b> van ster of veelhoek aanpassen: <b>Ctrl</b> om de punten radiaal te houden; <b>Shift</b> om af te ronden; <b>Alt</b> voor willekeur"
-#: ../src/object-edit.cpp:1272
+#: ../src/object-edit.cpp:1271
msgid "Roll/unroll the spiral from <b>inside</b>; with <b>Ctrl</b> to snap angle; with <b>Alt</b> to converge/diverge"
msgstr "De spiraal op- of afrollen langs de <b>binnenkant</b>; <b>Ctrl</b> om te draaien in stappen; <b>Alt</b> om te convergeren/uit te waaieren"
-#: ../src/object-edit.cpp:1275
+#: ../src/object-edit.cpp:1274
msgid "Roll/unroll the spiral from <b>outside</b>; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to scale/rotate"
msgstr "De spiraal op- of afrollen langs de <b>buitenkant</b>; <b>Ctrl</b> om te draaien in stappen; <b>Shift</b> om te schalen/draaien"
-#: ../src/object-edit.cpp:1319
+#: ../src/object-edit.cpp:1318
msgid "Adjust the <b>offset distance</b>"
msgstr "De <b>afstand voor verplaatsen</b> aanpassen"
-#: ../src/object-edit.cpp:1355
+#: ../src/object-edit.cpp:1354
msgid "Drag to resize the <b>flowed text frame</b>"
msgstr "Sleep om het <b>kader van de ingekaderde tekst</b> te schalen"
@@ -15476,332 +15427,332 @@ msgstr "Verwijderen"
msgid "Select <b>object(s)</b> to duplicate."
msgstr "Selecteer (een) <b>object(en)</b> om te dupliceren."
-#: ../src/selection-chemistry.cpp:450
+#: ../src/selection-chemistry.cpp:459
msgid "Delete all"
msgstr "Alles verwijderen"
-#: ../src/selection-chemistry.cpp:636
+#: ../src/selection-chemistry.cpp:645
msgid "Select <b>some objects</b> to group."
msgstr "Selecteer <b>twee objecten of meer objecten</b> om te groeperen."
-#: ../src/selection-chemistry.cpp:651
+#: ../src/selection-chemistry.cpp:660
#: ../src/selection-describer.cpp:51
msgid "Group"
-msgstr "_Groeperen"
+msgstr "Groeperen"
-#: ../src/selection-chemistry.cpp:665
+#: ../src/selection-chemistry.cpp:674
msgid "Select a <b>group</b> to ungroup."
msgstr "Selecteer een <b>groep</b> om op te heffen"
-#: ../src/selection-chemistry.cpp:706
+#: ../src/selection-chemistry.cpp:715
msgid "<b>No groups</b> to ungroup in the selection."
msgstr "<b>Geen groepen geselecteerd</b> om op te heffen."
-#: ../src/selection-chemistry.cpp:712
+#: ../src/selection-chemistry.cpp:721
#: ../src/sp-item-group.cpp:500
msgid "Ungroup"
-msgstr "_Groep opheffen"
+msgstr "Groep opheffen"
-#: ../src/selection-chemistry.cpp:802
+#: ../src/selection-chemistry.cpp:811
msgid "Select <b>object(s)</b> to raise."
msgstr "Selecteer <b>object(en)</b> om naar boven te brengen."
-#: ../src/selection-chemistry.cpp:808
-#: ../src/selection-chemistry.cpp:868
-#: ../src/selection-chemistry.cpp:902
-#: ../src/selection-chemistry.cpp:966
+#: ../src/selection-chemistry.cpp:817
+#: ../src/selection-chemistry.cpp:877
+#: ../src/selection-chemistry.cpp:911
+#: ../src/selection-chemistry.cpp:975
msgid "You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."
msgstr "U kunt geen object uit <b>verschillende groepen</b> of <b>lagen</b> naar boven brengen of naar onder sturen."
#. TRANSLATORS: "Raise" means "to raise an object" in the undo history
-#: ../src/selection-chemistry.cpp:848
+#: ../src/selection-chemistry.cpp:857
msgctxt "Undo action"
msgid "Raise"
msgstr "Verhogen"
-#: ../src/selection-chemistry.cpp:860
+#: ../src/selection-chemistry.cpp:869
msgid "Select <b>object(s)</b> to raise to top."
msgstr "Selecteer <b>objecten</b> die u helemaal naar boven wilt brengen."
-#: ../src/selection-chemistry.cpp:883
+#: ../src/selection-chemistry.cpp:892
msgid "Raise to top"
msgstr "Bovenaan"
-#: ../src/selection-chemistry.cpp:896
+#: ../src/selection-chemistry.cpp:905
msgid "Select <b>object(s)</b> to lower."
msgstr "Selecteer <b>objecten</b> die u naar onderen wilt brengen."
-#: ../src/selection-chemistry.cpp:946
+#: ../src/selection-chemistry.cpp:955
msgid "Lower"
msgstr "Omlaag"
-#: ../src/selection-chemistry.cpp:958
+#: ../src/selection-chemistry.cpp:967
msgid "Select <b>object(s)</b> to lower to bottom."
msgstr "Selecteer <b>objecten</b> die u naar helemaal naar onderen wilt sturen."
-#: ../src/selection-chemistry.cpp:993
+#: ../src/selection-chemistry.cpp:1002
msgid "Lower to bottom"
msgstr "Onderaan"
-#: ../src/selection-chemistry.cpp:1000
+#: ../src/selection-chemistry.cpp:1009
msgid "Nothing to undo."
msgstr "Er is niets om ongedaan te maken."
-#: ../src/selection-chemistry.cpp:1007
+#: ../src/selection-chemistry.cpp:1016
msgid "Nothing to redo."
msgstr "Er is niets om opnieuw te doen."
-#: ../src/selection-chemistry.cpp:1067
+#: ../src/selection-chemistry.cpp:1076
msgid "Paste"
msgstr "Plakken"
-#: ../src/selection-chemistry.cpp:1075
+#: ../src/selection-chemistry.cpp:1084
msgid "Paste style"
msgstr "Stijl plakken"
-#: ../src/selection-chemistry.cpp:1085
+#: ../src/selection-chemistry.cpp:1094
msgid "Paste live path effect"
msgstr "Padeffect plakken"
-#: ../src/selection-chemistry.cpp:1106
+#: ../src/selection-chemistry.cpp:1115
msgid "Select <b>object(s)</b> to remove live path effects from."
msgstr "Selecteer <b>object(en)</b> om padeffect van te verwijderen."
-#: ../src/selection-chemistry.cpp:1118
+#: ../src/selection-chemistry.cpp:1127
msgid "Remove live path effect"
msgstr "Padeffect verwijderen"
-#: ../src/selection-chemistry.cpp:1129
+#: ../src/selection-chemistry.cpp:1138
msgid "Select <b>object(s)</b> to remove filters from."
msgstr "Selecteer <b>object(en)</b> om filters van te verwijderen."
-#: ../src/selection-chemistry.cpp:1139
+#: ../src/selection-chemistry.cpp:1148
#: ../src/ui/dialog/filter-effects-dialog.cpp:1340
msgid "Remove filter"
msgstr "Verwijder filter"
-#: ../src/selection-chemistry.cpp:1148
+#: ../src/selection-chemistry.cpp:1157
msgid "Paste size"
msgstr "Grootte plakken"
-#: ../src/selection-chemistry.cpp:1157
+#: ../src/selection-chemistry.cpp:1166
msgid "Paste size separately"
msgstr "Grootte apart plakken"
-#: ../src/selection-chemistry.cpp:1167
+#: ../src/selection-chemistry.cpp:1176
msgid "Select <b>object(s)</b> to move to the layer above."
msgstr "Selecteer <b>objecten</b> om naar de bovenliggende laag te verplaatsen."
-#: ../src/selection-chemistry.cpp:1193
+#: ../src/selection-chemistry.cpp:1202
msgid "Raise to next layer"
msgstr "Verhoog naar de volgende laag"
-#: ../src/selection-chemistry.cpp:1200
+#: ../src/selection-chemistry.cpp:1209
msgid "No more layers above."
msgstr "Er zijn geen bovenliggende lagen."
-#: ../src/selection-chemistry.cpp:1212
+#: ../src/selection-chemistry.cpp:1221
msgid "Select <b>object(s)</b> to move to the layer below."
msgstr "Selecteer <b>objecten</b> om naar de onderliggende laag te verplaatsen."
-#: ../src/selection-chemistry.cpp:1238
+#: ../src/selection-chemistry.cpp:1247
msgid "Lower to previous layer"
msgstr "Verlaag naar de vorige laag"
-#: ../src/selection-chemistry.cpp:1245
+#: ../src/selection-chemistry.cpp:1254
msgid "No more layers below."
msgstr "Er zijn geen onderliggende lagen."
-#: ../src/selection-chemistry.cpp:1454
+#: ../src/selection-chemistry.cpp:1463
msgid "Remove transform"
msgstr "Transformatie verwijderen"
-#: ../src/selection-chemistry.cpp:1557
+#: ../src/selection-chemistry.cpp:1566
msgid "Rotate 90&#176; CCW"
msgstr "90 graden draaien; TKI"
-#: ../src/selection-chemistry.cpp:1557
+#: ../src/selection-chemistry.cpp:1566
msgid "Rotate 90&#176; CW"
msgstr "90 graden draaien; MKM"
-#: ../src/selection-chemistry.cpp:1578
-#: ../src/seltrans.cpp:530
+#: ../src/selection-chemistry.cpp:1587
+#: ../src/seltrans.cpp:515
#: ../src/ui/dialog/transformation.cpp:770
msgid "Rotate"
msgstr "Roteren"
-#: ../src/selection-chemistry.cpp:1625
+#: ../src/selection-chemistry.cpp:1634
msgid "Rotate by pixels"
msgstr "Per pixel draaien"
-#: ../src/selection-chemistry.cpp:1680
+#: ../src/selection-chemistry.cpp:1689
msgid "Scale by whole factor"
msgstr "Met een hele factor schalen"
-#: ../src/selection-chemistry.cpp:1695
+#: ../src/selection-chemistry.cpp:1704
msgid "Move vertically"
msgstr "Verticaal verplaatsen"
-#: ../src/selection-chemistry.cpp:1698
+#: ../src/selection-chemistry.cpp:1707
msgid "Move horizontally"
msgstr "Horizontaal verplaatsen"
-#: ../src/selection-chemistry.cpp:1701
-#: ../src/selection-chemistry.cpp:1727
-#: ../src/seltrans.cpp:524
+#: ../src/selection-chemistry.cpp:1710
+#: ../src/selection-chemistry.cpp:1736
+#: ../src/seltrans.cpp:509
#: ../src/ui/dialog/transformation.cpp:691
msgid "Move"
msgstr "Verplaatsen"
-#: ../src/selection-chemistry.cpp:1721
+#: ../src/selection-chemistry.cpp:1730
msgid "Move vertically by pixels"
msgstr "Verticaal verplaatsen per pixels"
-#: ../src/selection-chemistry.cpp:1724
+#: ../src/selection-chemistry.cpp:1733
msgid "Move horizontally by pixels"
msgstr "Horizontaal verplaatsen per pixels"
-#: ../src/selection-chemistry.cpp:1852
+#: ../src/selection-chemistry.cpp:1861
msgid "The selection has no applied path effect."
msgstr "De selectie bevat geen toegepast padeffect."
-#: ../src/selection-chemistry.cpp:2055
+#: ../src/selection-chemistry.cpp:2064
msgctxt "Action"
msgid "Clone"
msgstr "Kloon"
-#: ../src/selection-chemistry.cpp:2071
+#: ../src/selection-chemistry.cpp:2080
msgid "Select <b>clones</b> to relink."
msgstr "Selecteer <b>klonen</b> om te herlinken."
-#: ../src/selection-chemistry.cpp:2078
+#: ../src/selection-chemistry.cpp:2087
msgid "Copy an <b>object</b> to clipboard to relink clones to."
msgstr "Een <b>object</b> naar het klembord kopiëren om klonen naar te herlinken"
-#: ../src/selection-chemistry.cpp:2102
+#: ../src/selection-chemistry.cpp:2111
msgid "<b>No clones to relink</b> in the selection."
msgstr "<b>Geen klonen om te herlinken</b> in de selectie"
-#: ../src/selection-chemistry.cpp:2105
+#: ../src/selection-chemistry.cpp:2114
msgid "Relink clone"
msgstr "Kloon herlinken"
-#: ../src/selection-chemistry.cpp:2119
+#: ../src/selection-chemistry.cpp:2128
msgid "Select <b>clones</b> to unlink."
msgstr "Selecteer <b>klonen</b> om te ontlinken."
-#: ../src/selection-chemistry.cpp:2168
+#: ../src/selection-chemistry.cpp:2182
msgid "<b>No clones to unlink</b> in the selection."
msgstr "<b>Geen klonen geselecteerd</b> om te ontkoppelen."
-#: ../src/selection-chemistry.cpp:2172
+#: ../src/selection-chemistry.cpp:2186
msgid "Unlink clone"
msgstr "Kloon ontkoppelen"
-#: ../src/selection-chemistry.cpp:2185
+#: ../src/selection-chemistry.cpp:2199
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 "Selecteer een <b>kloon</b> om naar zijn origineel te gaan. Selecteer een <b>gekoppelde rand</b> om naar zijn bron te gaan. Selecteer <b>tekst op een pad</b> om naar het pad te gaan. Selecteer <b>ingekaderde tekst</b> om naar het vormende object te gaan."
+msgstr "Selecteer een <b>kloon</b> om naar zijn origineel te gaan. Selecteer een <b>gekoppelde offset</b> om naar zijn bron te gaan. Selecteer <b>tekst op een pad</b> om naar het pad te gaan. Selecteer <b>ingekaderde tekst</b> om naar het vormende object te gaan."
-#: ../src/selection-chemistry.cpp:2208
+#: ../src/selection-chemistry.cpp:2222
msgid "<b>Cannot find</b> the object to select (orphaned clone, offset, textpath, flowed text?)"
-msgstr "Het te selecteren object <b>is onvindbaar</b> (verweesde kloon, rand, tekstpad of ingekaderde tekst?)"
+msgstr "Het te selecteren object <b>is onvindbaar</b> (verweesde kloon, offset, tekstpad of ingekaderde tekst?)"
-#: ../src/selection-chemistry.cpp:2214
+#: ../src/selection-chemistry.cpp:2228
msgid "The object you're trying to select is <b>not visible</b> (it is in &lt;defs&gt;)"
msgstr "Het object dat u probeert te selecteren is <b>niet zichtbaar</b> (het staat in &lt;defs&gt;)"
-#: ../src/selection-chemistry.cpp:2260
+#: ../src/selection-chemistry.cpp:2274
msgid "Select <b>object(s)</b> to convert to marker."
msgstr "Selecteer eerst de <b>objecten</b> om te converteren naar een markering."
-#: ../src/selection-chemistry.cpp:2328
+#: ../src/selection-chemistry.cpp:2342
msgid "Objects to marker"
msgstr "Objecten naar markering"
-#: ../src/selection-chemistry.cpp:2356
+#: ../src/selection-chemistry.cpp:2370
msgid "Select <b>object(s)</b> to convert to guides."
msgstr "Selecteer eerst de <b>objecten</b> om te converteren naar hulplijnen."
-#: ../src/selection-chemistry.cpp:2368
+#: ../src/selection-chemistry.cpp:2382
msgid "Objects to guides"
msgstr "Objecten naar hulplijnen"
-#: ../src/selection-chemistry.cpp:2384
+#: ../src/selection-chemistry.cpp:2398
msgid "Select <b>object(s)</b> to convert to pattern."
msgstr "Selecteer eerst de <b>objecten</b> om te converteren naar een patroon."
-#: ../src/selection-chemistry.cpp:2472
+#: ../src/selection-chemistry.cpp:2486
msgid "Objects to pattern"
msgstr "Objecten naar patroon"
-#: ../src/selection-chemistry.cpp:2488
+#: ../src/selection-chemistry.cpp:2502
msgid "Select an <b>object with pattern fill</b> to extract objects from."
msgstr "Selecteer <b>objecten met patroonvulling</b> om objecten uit te halen."
-#: ../src/selection-chemistry.cpp:2541
+#: ../src/selection-chemistry.cpp:2555
msgid "<b>No pattern fills</b> in the selection."
msgstr "Er zijn geen <b>objecten met patroonvulling</b> geselecteerd."
-#: ../src/selection-chemistry.cpp:2544
+#: ../src/selection-chemistry.cpp:2558
msgid "Pattern to objects"
msgstr "Patroon naar objecten"
-#: ../src/selection-chemistry.cpp:2629
+#: ../src/selection-chemistry.cpp:2643
msgid "Select <b>object(s)</b> to make a bitmap copy."
msgstr "Selecteer eerst de <b>objecten</b> om een bitmapkopie van te maken."
-#: ../src/selection-chemistry.cpp:2633
+#: ../src/selection-chemistry.cpp:2647
msgid "Rendering bitmap..."
msgstr "Renderen van bitmap..."
-#: ../src/selection-chemistry.cpp:2807
+#: ../src/selection-chemistry.cpp:2821
msgid "Create bitmap"
msgstr "Bitmap maken"
-#: ../src/selection-chemistry.cpp:2839
+#: ../src/selection-chemistry.cpp:2853
msgid "Select <b>object(s)</b> to create clippath or mask from."
msgstr "Selecteer de <b>objecten</b> om een afsnijpad/masker van te maken."
-#: ../src/selection-chemistry.cpp:2842
+#: ../src/selection-chemistry.cpp:2856
msgid "Select mask object and <b>object(s)</b> to apply clippath or mask to."
msgstr "Selecteer het maskerobject en de <b>object(en)</b> om het afsnijpad/masker op toe te passen."
-#: ../src/selection-chemistry.cpp:3023
+#: ../src/selection-chemistry.cpp:3037
msgid "Set clipping path"
msgstr "Afsnijpad inschakelen"
-#: ../src/selection-chemistry.cpp:3025
+#: ../src/selection-chemistry.cpp:3039
msgid "Set mask"
msgstr "Masker inschakelen"
-#: ../src/selection-chemistry.cpp:3038
+#: ../src/selection-chemistry.cpp:3052
msgid "Select <b>object(s)</b> to remove clippath or mask from."
msgstr "Selecteer <b>object(en)</b> om het afsnijpad/masker van uit te schakelen."
-#: ../src/selection-chemistry.cpp:3149
+#: ../src/selection-chemistry.cpp:3163
msgid "Release clipping path"
msgstr "Afsnijpad uitschakelen"
-#: ../src/selection-chemistry.cpp:3151
+#: ../src/selection-chemistry.cpp:3165
msgid "Release mask"
msgstr "Masker uitschakelen"
-#: ../src/selection-chemistry.cpp:3169
+#: ../src/selection-chemistry.cpp:3183
msgid "Select <b>object(s)</b> to fit canvas to."
msgstr "Selecteer <b>object(en)</b> voor aanpassing van het canvas"
#. Fit Page
-#: ../src/selection-chemistry.cpp:3189
+#: ../src/selection-chemistry.cpp:3203
#: ../src/verbs.cpp:2718
msgid "Fit Page to Selection"
msgstr "Pagina naar selectie schalen"
-#: ../src/selection-chemistry.cpp:3218
+#: ../src/selection-chemistry.cpp:3232
#: ../src/verbs.cpp:2720
msgid "Fit Page to Drawing"
msgstr "Pagina naar tekening schalen"
-#: ../src/selection-chemistry.cpp:3239
+#: ../src/selection-chemistry.cpp:3253
#: ../src/verbs.cpp:2722
msgid "Fit Page to Selection or Drawing"
msgstr "Pagina naar selectie of tekening schalen"
@@ -15987,69 +15938,69 @@ msgstr[1] "<b>%d</b> objecten gevonden van <b>%i</b> types"
msgid "%s%s. %s."
msgstr "%s%s. %s."
-#: ../src/seltrans.cpp:533
+#: ../src/seltrans.cpp:518
#: ../src/ui/dialog/transformation.cpp:829
msgid "Skew"
msgstr "Scheeftrekken"
-#: ../src/seltrans.cpp:545
+#: ../src/seltrans.cpp:530
msgid "Set center"
msgstr "Centrum instellen"
-#: ../src/seltrans.cpp:620
+#: ../src/seltrans.cpp:605
msgid "Stamp"
msgstr "Stempel"
-#: ../src/seltrans.cpp:642
+#: ../src/seltrans.cpp:627
msgid "<b>Center</b> of rotation and skewing: drag to reposition; scaling with Shift also uses this center"
msgstr "Het <b>centrum</b> van draaien en scheeftrekken: sleep om te verplaatsen; vergroten/verkleinen met <b>Shift</b> gebruikt ook dit centrum."
-#: ../src/seltrans.cpp:669
+#: ../src/seltrans.cpp:654
msgid "<b>Squeeze or stretch</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</b> to scale around rotation center"
msgstr "De selectie <b>samendrukken of uitrekken</b>; <b>Ctrl</b> behoudt de verhoudingen; <b>Shift</b> vergroot/verkleint om het rotatiemiddelpunt"
-#: ../src/seltrans.cpp:670
+#: ../src/seltrans.cpp:655
msgid "<b>Scale</b> selection; with <b>Ctrl</b> to scale uniformly; with <b>Shift</b> to scale around rotation center"
msgstr "De selectie <b>vergroten of verkleinen</b>; <b>Ctrl</b> behoudt de verhoudingen; <b>Shift</b> vergroot/verkleint om het rotatiemiddelpunt"
-#: ../src/seltrans.cpp:674
+#: ../src/seltrans.cpp:659
msgid "<b>Skew</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to skew around the opposite side"
msgstr "De selectie <b>scheeftrekken</b>; <b>Ctrl</b> trekt in stappen, <b>Shift</b> trekt om de tegenoverliggende hoek"
-#: ../src/seltrans.cpp:675
+#: ../src/seltrans.cpp:660
msgid "<b>Rotate</b> selection; with <b>Ctrl</b> to snap angle; with <b>Shift</b> to rotate around the opposite corner"
msgstr "De selectie <b>draaien</b>; <b>Ctrl</b> draait in stappen, <b>Shift</b> draait om de tegenoverliggende hoek"
-#: ../src/seltrans.cpp:809
+#: ../src/seltrans.cpp:794
msgid "Reset center"
msgstr "Centrum herstellen"
-#: ../src/seltrans.cpp:1047
-#: ../src/seltrans.cpp:1144
+#: ../src/seltrans.cpp:1032
+#: ../src/seltrans.cpp:1129
#, c-format
msgid "<b>Scale</b>: %0.2f%% x %0.2f%%; with <b>Ctrl</b> to lock ratio"
msgstr "<b>Vergroten/verkleinen</b>: %0.2f%% x %0.2f%%; gebruik <b>Ctrl</b> om de verhouding te vergrendelen"
#. TRANSLATORS: don't modify the first ";"
#. (it will NOT be displayed as ";" - only the second one will be)
-#: ../src/seltrans.cpp:1258
+#: ../src/seltrans.cpp:1243
#, c-format
msgid "<b>Skew</b>: %0.2f&#176;; with <b>Ctrl</b> to snap angle"
msgstr "<b>Scheeftrekken</b>: %0.2f&#176;; gebruik <b>Ctrl</b> om in stappen te trekken"
#. TRANSLATORS: don't modify the first ";"
#. (it will NOT be displayed as ";" - only the second one will be)
-#: ../src/seltrans.cpp:1333
+#: ../src/seltrans.cpp:1318
#, c-format
msgid "<b>Rotate</b>: %0.2f&#176;; with <b>Ctrl</b> to snap angle"
msgstr "<b>Draaien</b>: %0.2f&#176;; gebruik <b>Ctrl</b> in stappen te draaien"
-#: ../src/seltrans.cpp:1364
+#: ../src/seltrans.cpp:1353
#, c-format
msgid "Move <b>center</b> to %s, %s"
msgstr "<b>Centrum</b> verplaatsen naar %s, %s"
-#: ../src/seltrans.cpp:1539
+#: ../src/seltrans.cpp:1528
#, 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>Verplaatsen</b> met %s, %s; gebruik <b>Ctrl</b> om het te beperken tot horizontaal en verticaal, gebruik <b>Shift</b> om magnetisch raster uit te zetten."
@@ -16175,7 +16126,7 @@ msgstr "Er is een fout opgetreden tijdens het uitvoeren van het padeffect."
#: ../src/sp-offset.cpp:426
#, c-format
msgid "<b>Linked offset</b>, %s by %f pt"
-msgstr "<b>Gekoppelde rand</b>, %s met %f pt"
+msgstr "<b>Gekoppelde offset</b>, %s met %f pt"
#: ../src/sp-offset.cpp:427
#: ../src/sp-offset.cpp:431
@@ -16191,7 +16142,7 @@ msgstr "vernauwing"
#: ../src/sp-offset.cpp:430
#, c-format
msgid "<b>Dynamic offset</b>, %s by %f pt"
-msgstr "<b>Dynamische rand</b>, %s met %f pt"
+msgstr "<b>Dynamische offset</b>, %s met %f pt"
#: ../src/sp-path.cpp:156
#, c-format
@@ -16371,12 +16322,12 @@ msgstr "Het geselecteerde object is <b>geen pad</b>, en kan dus niet versmalt/ve
#: ../src/splivarot.cpp:1432
#: ../src/splivarot.cpp:1501
msgid "Create linked offset"
-msgstr "Gekoppelde rand aanmaken"
+msgstr "Gekoppelde offset maken"
#: ../src/splivarot.cpp:1433
#: ../src/splivarot.cpp:1502
msgid "Create dynamic offset"
-msgstr "Dynamische rand aanmaken"
+msgstr "Dynamische offset maken"
#: ../src/splivarot.cpp:1527
msgid "Select <b>path(s)</b> to inset/outset."
@@ -16626,7 +16577,7 @@ msgstr "Cursief maken"
#: ../src/text-context.cpp:961
msgid "New line"
-msgstr "Nieuwe regel"
+msgstr "Nieuwe regel invoegen"
#: ../src/text-context.cpp:995
msgid "Backspace"
@@ -17154,7 +17105,7 @@ msgstr "V:"
#: ../src/ui/dialog/align-and-distribute.cpp:508
#: ../src/ui/dialog/align-and-distribute.cpp:889
-#: ../src/widgets/toolbox.cpp:8244
+#: ../src/widgets/toolbox.cpp:8240
msgid "Remove overlaps"
msgstr "Overlappingen verwijderen"
@@ -17250,35 +17201,35 @@ msgstr "Grondlijnen van teksten uitlijnen"
#: ../src/ui/dialog/align-and-distribute.cpp:943
msgid "Make horizontal gaps between objects equal"
-msgstr "De horizontale afstand tussen objecten gelijk maken"
+msgstr "Horizontale afstand tussen objecten gelijk maken"
#: ../src/ui/dialog/align-and-distribute.cpp:947
msgid "Distribute left edges equidistantly"
-msgstr "De afstand tussen de linkerzijden van de objecten gelijkmatig verdelen"
+msgstr "Afstand tussen de linkerzijden van de objecten gelijkmatig verdelen"
#: ../src/ui/dialog/align-and-distribute.cpp:950
msgid "Distribute centers equidistantly horizontally"
-msgstr "De objectmiddens gelijkmatig verdelen in horizontale richting"
+msgstr "Objectmiddens gelijkmatig verdelen in horizontale richting"
#: ../src/ui/dialog/align-and-distribute.cpp:953
msgid "Distribute right edges equidistantly"
-msgstr "De afstand tussen de rechterzijden van de objecten gelijkmatig verdelen"
+msgstr "Afstand tussen de rechterzijden van de objecten gelijkmatig verdelen"
#: ../src/ui/dialog/align-and-distribute.cpp:957
msgid "Make vertical gaps between objects equal"
-msgstr "De verticale afstand tussen de objecten gelijk maken"
+msgstr "Verticale afstand tussen de objecten gelijk maken"
#: ../src/ui/dialog/align-and-distribute.cpp:961
msgid "Distribute top edges equidistantly"
-msgstr "De afstand tussen de bovenzijden van de objecten gelijkmatig verdelen"
+msgstr "Afstand tussen de bovenzijden van de objecten gelijkmatig verdelen"
#: ../src/ui/dialog/align-and-distribute.cpp:964
msgid "Distribute centers equidistantly vertically"
-msgstr "De objectmiddens gelijkmatig verdelen in verticale richting"
+msgstr "Objectmiddens gelijkmatig verdelen in verticale richting"
#: ../src/ui/dialog/align-and-distribute.cpp:967
msgid "Distribute bottom edges equidistantly"
-msgstr "De afstand tussen de onderzijden van de objecten gelijkmatig verdelen"
+msgstr "Afstand tussen de onderzijden van de objecten gelijkmatig verdelen"
#: ../src/ui/dialog/align-and-distribute.cpp:972
msgid "Distribute baseline anchors of texts horizontally"
@@ -17286,10 +17237,10 @@ msgstr "Geselecteerde teksten horizontaal verdelen"
#: ../src/ui/dialog/align-and-distribute.cpp:975
msgid "Distribute baselines of texts vertically"
-msgstr "De grondlijnen van geselecteerde teksten verticaal verdelen"
+msgstr "Grondlijnen van geselecteerde teksten verticaal verdelen"
#: ../src/ui/dialog/align-and-distribute.cpp:981
-#: ../src/widgets/toolbox.cpp:8206
+#: ../src/widgets/toolbox.cpp:8202
msgid "Nicely arrange selected connector network"
msgstr "Het geselecteerde verbindingennetwerk netjes schikken"
@@ -17307,11 +17258,11 @@ msgstr "Posities van geselecteerde objecten uitwisselen - met de klok draaien"
#: ../src/ui/dialog/align-and-distribute.cpp:995
msgid "Randomize centers in both dimensions"
-msgstr "De objectmiddens in beide richtingen willekeurig verdelen"
+msgstr "Objectmiddens in beide richtingen willekeurig verdelen"
#: ../src/ui/dialog/align-and-distribute.cpp:998
msgid "Unclump objects: try to equalize edge-to-edge distances"
-msgstr "Objecten ontklonteren; proberen de rand-tot-rand afstanden gelijk te maken"
+msgstr "Objecten ontklonteren: rand-tot-rand afstanden gelijk proberen maken"
#: ../src/ui/dialog/align-and-distribute.cpp:1003
msgid "Move objects as little as possible so that their bounding boxes do not overlap"
@@ -17319,19 +17270,19 @@ msgstr "Objecten zo min mogelijk verplaatsen opdat hun omvattende vakken niet ov
#: ../src/ui/dialog/align-and-distribute.cpp:1011
msgid "Align selected nodes to a common horizontal line"
-msgstr "De geselecteerde knooppunten uitlijnen op een gemeenschappelijke horizontale lijn"
+msgstr "Geselecteerde knooppunten uitlijnen op een gemeenschappelijke horizontale lijn"
#: ../src/ui/dialog/align-and-distribute.cpp:1014
msgid "Align selected nodes to a common vertical line"
-msgstr "De geselecteerde knooppunten uitlijnen op een gemeenschappelijke verticale lijn"
+msgstr "Geselecteerde knooppunten uitlijnen op een gemeenschappelijke verticale lijn"
#: ../src/ui/dialog/align-and-distribute.cpp:1017
msgid "Distribute selected nodes horizontally"
-msgstr "De geselecteerde knooppunten horizontaal verdelen"
+msgstr "Geselecteerde knooppunten horizontaal verdelen"
#: ../src/ui/dialog/align-and-distribute.cpp:1020
msgid "Distribute selected nodes vertically"
-msgstr "De geselecteerde knooppunten verticaal verdelen"
+msgstr "Geselecteerde knooppunten verticaal verdelen"
#. Rest of the widgetry
#: ../src/ui/dialog/align-and-distribute.cpp:1025
@@ -19911,7 +19862,7 @@ msgstr "Vensters"
#: ../src/ui/dialog/inkscape-preferences.cpp:638
msgid "Move in parallel"
-msgstr "Parallel meeverplaatsen"
+msgstr "Parallel verplaatsen"
#: ../src/ui/dialog/inkscape-preferences.cpp:640
msgid "Stay unmoved"
@@ -19931,7 +19882,7 @@ msgstr "Verwijderen"
#: ../src/ui/dialog/inkscape-preferences.cpp:649
msgid "When the original moves, its clones and linked offsets:"
-msgstr "Gedrag van klonen bij het verplaatsen van het origineel:"
+msgstr "Gedrag van klonen en gekoppelde randen bij verplaatsen van het origineel:"
#: ../src/ui/dialog/inkscape-preferences.cpp:651
msgid "Clones are translated by the same vector as their original"
@@ -19996,7 +19947,7 @@ msgstr "Voor toepassen afsnijpad/masker"
#: ../src/ui/dialog/inkscape-preferences.cpp:683
msgid "Do not group clipped/masked objects"
-msgstr "Afgescneden/gemaskerde objecten niet groeperen"
+msgstr "Afgesneden/gemaskerde objecten niet groeperen"
#: ../src/ui/dialog/inkscape-preferences.cpp:684
msgid "Enclose every clipped/masked object in its own group"
@@ -20414,7 +20365,7 @@ msgstr "Indien aangevinkt en er is uitgezoomd, dan worden rasterlijnen in de nor
#: ../src/ui/dialog/inkscape-preferences.cpp:1027
msgid "Default grid settings"
-msgstr "Standaard rasterinstellingen:"
+msgstr "Standaard rasterinstellingen"
#: ../src/ui/dialog/inkscape-preferences.cpp:1033
#: ../src/ui/dialog/inkscape-preferences.cpp:1054
@@ -22095,120 +22046,131 @@ msgctxt "Path segment tip"
msgid "<b>Bezier segment</b>: drag to shape the segment, doubleclick to insert node, click to select (more: Shift, Ctrl+Alt)"
msgstr "<b>Beziersegment</b>: sleep om het segment te vervormen, dubbelklik om een knooppunt in te voegen, klik om te selecteren (toetscombinaties: Shift, Ctrl+Alt)"
-#: ../src/ui/tool/multi-path-manipulator.cpp:227
+#: ../src/ui/tool/multi-path-manipulator.cpp:245
+msgid "Retract handles"
+msgstr "Handvaten intrekken"
+
+#: ../src/ui/tool/multi-path-manipulator.cpp:245
msgid "Change node type"
msgstr "Knooppunttype veranderen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:235
+#: ../src/ui/tool/multi-path-manipulator.cpp:253
msgid "Straighten segments"
msgstr "Segmenten effenen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:237
+#: ../src/ui/tool/multi-path-manipulator.cpp:255
msgid "Make segments curves"
msgstr "Van segmenten curven maken"
-#: ../src/ui/tool/multi-path-manipulator.cpp:244
+#: ../src/ui/tool/multi-path-manipulator.cpp:262
msgid "Add nodes"
msgstr "Knooppunten toevoegen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:250
+#: ../src/ui/tool/multi-path-manipulator.cpp:268
msgid "Duplicate nodes"
msgstr "Knooppunten dupliceren"
-#: ../src/ui/tool/multi-path-manipulator.cpp:312
+#: ../src/ui/tool/multi-path-manipulator.cpp:330
#: ../src/widgets/toolbox.cpp:1369
msgid "Join nodes"
msgstr "Knooppunten samenvoegen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:319
+#: ../src/ui/tool/multi-path-manipulator.cpp:337
#: ../src/widgets/toolbox.cpp:1380
msgid "Break nodes"
msgstr "Knooppunten verbreken"
-#: ../src/ui/tool/multi-path-manipulator.cpp:326
+#: ../src/ui/tool/multi-path-manipulator.cpp:344
msgid "Delete nodes"
msgstr "Knooppunten verwijderen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:630
+#: ../src/ui/tool/multi-path-manipulator.cpp:662
msgid "Move nodes"
msgstr "Knooppunten verplaatsen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:633
+#: ../src/ui/tool/multi-path-manipulator.cpp:665
msgid "Move nodes horizontally"
msgstr "Knooppunten horizontaal verplaatsen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:637
+#: ../src/ui/tool/multi-path-manipulator.cpp:669
msgid "Move nodes vertically"
msgstr "Knooppunten verticaal verplaatsen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:641
-#: ../src/ui/tool/multi-path-manipulator.cpp:644
+#: ../src/ui/tool/multi-path-manipulator.cpp:673
+#: ../src/ui/tool/multi-path-manipulator.cpp:676
msgid "Rotate nodes"
msgstr "Knooppunten roteren"
-#: ../src/ui/tool/multi-path-manipulator.cpp:648
-#: ../src/ui/tool/multi-path-manipulator.cpp:654
+#: ../src/ui/tool/multi-path-manipulator.cpp:680
+#: ../src/ui/tool/multi-path-manipulator.cpp:686
msgid "Scale nodes uniformly"
msgstr "Knooppunten uniform schalen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:651
+#: ../src/ui/tool/multi-path-manipulator.cpp:683
msgid "Scale nodes"
msgstr "Knooppunten schalen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:658
+#: ../src/ui/tool/multi-path-manipulator.cpp:690
msgid "Scale nodes horizontally"
msgstr "Knooppunten horizontaal schalen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:662
+#: ../src/ui/tool/multi-path-manipulator.cpp:694
msgid "Scale nodes vertically"
msgstr "Knooppunten verticaal schalen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:666
+#: ../src/ui/tool/multi-path-manipulator.cpp:698
msgid "Flip nodes horizontally"
msgstr "Knooppunten horizontaal spiegelen"
-#: ../src/ui/tool/multi-path-manipulator.cpp:669
+#: ../src/ui/tool/multi-path-manipulator.cpp:701
msgid "Flip nodes vertically"
msgstr "Knooppunten verticaal spiegelen"
-#: ../src/ui/tool/node-tool.cpp:541
+#: ../src/ui/tool/node-tool.cpp:551
msgctxt "Node tool tip"
msgid "<b>Shift</b>: drag to add nodes to the selection, click to toggle object selection"
msgstr "<b>Shift</b>: sleep om knooppunten aan de selectie toe te voegen, klik om objectselectie te veranderen"
-#: ../src/ui/tool/node-tool.cpp:545
+#: ../src/ui/tool/node-tool.cpp:555
msgctxt "Node tool tip"
msgid "<b>Shift</b>: drag to add nodes to the selection"
msgstr "<b>Shift</b>: drag to add nodes to the selection"
-#: ../src/ui/tool/node-tool.cpp:555
+#: ../src/ui/tool/node-tool.cpp:564
+#, c-format
+msgid "<b>%u of %u</b> node selected."
+msgid_plural "<b>%u of %u</b> nodes selected."
+msgstr[0] "<b>%u van %u</b> knooppunt geselecteerd."
+msgstr[1] "<b>%u van %u</b> knooppunten geselecteerd."
+
+#: ../src/ui/tool/node-tool.cpp:569
#, c-format
msgctxt "Node tool tip"
-msgid "<b>%u of %u nodes</b> selected. Drag to select nodes, click to edit only this object (more: Shift)"
-msgstr "<b>%u van %u knooppunten</b> geselecteerd. Sleep om knooppunten te selecteren, klik om enkel dit object te bewerken (toetscombinatie: Shift)"
+msgid "%s Drag to select nodes, click to edit only this object (more: Shift)"
+msgstr "%s Sleep om knooppunten te selecteren, klik om enkel dit object te bewerken (meer: Shift)"
-#: ../src/ui/tool/node-tool.cpp:561
+#: ../src/ui/tool/node-tool.cpp:575
#, c-format
msgctxt "Node tool tip"
-msgid "<b>%u of %u nodes</b> selected. Drag to select nodes, click clear the selection"
-msgstr "<b>%u van %u knooppunten</b> geselecteerd. Sleep om knooppunten te selecteren, klik voor deselectie"
+msgid "%s Drag to select nodes, click clear the selection"
+msgstr "%s Sleep om knooppunten te selecteren, klik voor deselectie"
-#: ../src/ui/tool/node-tool.cpp:569
+#: ../src/ui/tool/node-tool.cpp:584
msgctxt "Node tool tip"
msgid "Drag to select nodes, click to edit only this object"
msgstr "Sleep om knooppunten te selecteren, klik om enkel dit object te bewerken"
-#: ../src/ui/tool/node-tool.cpp:572
+#: ../src/ui/tool/node-tool.cpp:587
msgctxt "Node tool tip"
msgid "Drag to select nodes, click to clear the selection"
msgstr "Sleep om knooppunten te selecteren, klik voor deselectie"
-#: ../src/ui/tool/node-tool.cpp:577
+#: ../src/ui/tool/node-tool.cpp:592
msgctxt "Node tool tip"
msgid "Drag to select objects to edit, click to edit this object (more: Shift)"
msgstr "Sleep om te bewerken objecten te selecteren, klik om dit object te bewerken (toetscombinatie: Shift)"
-#: ../src/ui/tool/node-tool.cpp:580
+#: ../src/ui/tool/node-tool.cpp:595
msgctxt "Node tool tip"
msgid "Drag to select objects to edit"
msgstr "Sleep om te bewerken objecten te selecteren"
@@ -22296,60 +22258,60 @@ msgctxt "Path handle tip"
msgid "Move handle by %s, %s; angle %.2f°, length %s"
msgstr "Handvat verplaatsen met %s, %s; hoek %.2f°, lengte %s"
-#: ../src/ui/tool/node.cpp:1131
+#: ../src/ui/tool/node.cpp:1145
msgctxt "Path node tip"
msgid "<b>Shift</b>: drag out a handle, click to toggle selection"
msgstr "<b>Shift</b>: sleep een handvat, klik voor verandering selectie"
-#: ../src/ui/tool/node.cpp:1133
+#: ../src/ui/tool/node.cpp:1147
msgctxt "Path node tip"
msgid "<b>Shift</b>: click to toggle selection"
msgstr "<b>Shift</b>: klik voor verandering selectie"
-#: ../src/ui/tool/node.cpp:1138
+#: ../src/ui/tool/node.cpp:1152
msgctxt "Path node tip"
msgid "<b>Ctrl+Alt</b>: move along handle lines, click to delete node"
msgstr "<b>Ctrl+Alt:</b> verplaatsen langs handvatlijnen, klik om knooppunt te verwijderen"
-#: ../src/ui/tool/node.cpp:1141
+#: ../src/ui/tool/node.cpp:1155
msgctxt "Path node tip"
msgid "<b>Ctrl</b>: move along axes, click to change node type"
msgstr "<b>Ctrl</b>: verplaatsen langs assen, klik om knooppunttype te veranderen"
-#: ../src/ui/tool/node.cpp:1145
+#: ../src/ui/tool/node.cpp:1159
msgctxt "Path node tip"
msgid "<b>Alt</b>: sculpt nodes"
msgstr "<b>Alt</b>: knooppunten boetseren"
-#: ../src/ui/tool/node.cpp:1153
+#: ../src/ui/tool/node.cpp:1167
#, c-format
msgctxt "Path node tip"
msgid "<b>%s</b>: drag to shape the path (more: Shift, Ctrl, Alt)"
msgstr "<b>%s</b>: sleep om het pad te vervormen (toetscombinatie: Shift, Ctrl, Alt)"
-#: ../src/ui/tool/node.cpp:1156
+#: ../src/ui/tool/node.cpp:1170
#, c-format
msgctxt "Path node tip"
msgid "<b>%s</b>: drag to shape the path, click to toggle scale/rotation handles (more: Shift, Ctrl, Alt)"
msgstr "<b>%s</b>: sleep om het pad te vervormen, klik om te schakelen tussen schalings- en rotatiehandvatten (toetscombinaties: Shift, Ctrl, Alt)"
-#: ../src/ui/tool/node.cpp:1159
+#: ../src/ui/tool/node.cpp:1173
#, c-format
msgctxt "Path node tip"
msgid "<b>%s</b>: drag to shape the path, click to select only this node (more: Shift, Ctrl, Alt)"
msgstr "<b>%s</b>: sleep om het pad te vervormen, klik om enkel dit knooppunt te selecteren (toetscombinaties: Shift, Ctrl, Alt)"
-#: ../src/ui/tool/node.cpp:1167
+#: ../src/ui/tool/node.cpp:1181
#, c-format
msgctxt "Path node tip"
msgid "Move node by %s, %s"
msgstr "Knooppunt verplaatsen met %s, %s"
-#: ../src/ui/tool/node.cpp:1179
+#: ../src/ui/tool/node.cpp:1193
msgid "Symmetric node"
msgstr "Symmetrisch knooppunt"
-#: ../src/ui/tool/node.cpp:1180
+#: ../src/ui/tool/node.cpp:1194
msgid "Auto-smooth node"
msgstr "Automatisch glad knooppunt"
@@ -22362,20 +22324,20 @@ msgid "Rotate handle"
msgstr "Roteerhandvat"
#. We need to call MPM's method because it could have been our last node
-#: ../src/ui/tool/path-manipulator.cpp:1323
+#: ../src/ui/tool/path-manipulator.cpp:1325
#: ../src/widgets/toolbox.cpp:1358
msgid "Delete node"
msgstr "Item verwijderen"
-#: ../src/ui/tool/path-manipulator.cpp:1331
+#: ../src/ui/tool/path-manipulator.cpp:1333
msgid "Cycle node type"
msgstr "Wisselen van knooppunttype"
-#: ../src/ui/tool/path-manipulator.cpp:1346
+#: ../src/ui/tool/path-manipulator.cpp:1348
msgid "Drag handle"
msgstr "Handvat slepen"
-#: ../src/ui/tool/path-manipulator.cpp:1355
+#: ../src/ui/tool/path-manipulator.cpp:1357
msgid "Retract handle"
msgstr "Handvat intrekken"
@@ -23133,7 +23095,7 @@ msgstr "Verplaatst naar de volgende laag."
#: ../src/verbs.cpp:1135
msgid "Cannot go past last layer."
-msgstr "Kan niet voorbij de laatste laag verplaatsen."
+msgstr "Kan niet verder dan de laatste laag gaan."
#: ../src/verbs.cpp:1144
msgid "Switch to previous layer"
@@ -23145,7 +23107,7 @@ msgstr "Verplaatst naar de vorige laag."
#: ../src/verbs.cpp:1147
msgid "Cannot go before first layer."
-msgstr "Kan niet voorbij de eerste laag verplaatsen."
+msgstr "Kan niet verder dan de eerste laag gaan."
#: ../src/verbs.cpp:1164
#: ../src/verbs.cpp:1260
@@ -23262,7 +23224,7 @@ msgstr "tutorial-elements.nl.svg"
#. TRANSLATORS: See "tutorial-basic.svg" comment.
#: ../src/verbs.cpp:1919
msgid "tutorial-tips.svg"
-msgstr "tutorial-tips.svg"
+msgstr "tutorial-tips.nl.svg"
#: ../src/verbs.cpp:2195
#: ../src/verbs.cpp:2726
@@ -23855,19 +23817,19 @@ msgstr "Geselecteerde paden met 10 pixels vernauwen"
#: ../src/verbs.cpp:2392
msgid "D_ynamic Offset"
-msgstr "D_ynamische rand"
+msgstr "D_ynamische offset"
#: ../src/verbs.cpp:2392
msgid "Create a dynamic offset object"
-msgstr "Een 'dynamische rand'-object aanmaken"
+msgstr "Een 'dynamische offset'-object aanmaken"
#: ../src/verbs.cpp:2394
msgid "_Linked Offset"
-msgstr "_Gekoppelde rand"
+msgstr "_Gekoppelde offset"
#: ../src/verbs.cpp:2395
msgid "Create a dynamic offset object linked to the original path"
-msgstr "Een 'dynamische rand'-object aanmaken, gekoppeld aan het originele pad"
+msgstr "Een 'dynamische offset'-object aanmaken, gekoppeld aan het originele pad"
#: ../src/verbs.cpp:2397
msgid "_Stroke to Path"
@@ -24336,7 +24298,7 @@ msgstr "Penvoorkeuren"
#: ../src/verbs.cpp:2547
msgid "Open Preferences for the Pen tool"
-msgstr "Voorkeuren voor het pen-gereedschap openen"
+msgstr "Voorkeuren voor het pengereedschap openen"
#: ../src/verbs.cpp:2548
msgid "Calligraphic Preferences"
@@ -24904,11 +24866,11 @@ msgstr "Beginselen van een ontwerp in de vorm van een handleiding"
#. "tutorial_design"
#: ../src/verbs.cpp:2708
msgid "_Tips and Tricks"
-msgstr "_Tips en ideeën"
+msgstr "_Tips en trucs"
#: ../src/verbs.cpp:2709
msgid "Miscellaneous tips and tricks"
-msgstr "Verschillende tips en ideeën"
+msgstr "Verschillende tips en trucs"
#. "tutorial_tips"
#. Effect -- renamed Extension
@@ -25073,13 +25035,13 @@ msgstr ""
msgid "_Save as SVG"
msgstr "Op_slaan als SVG"
-#: ../src/widgets/ege-paint-def.cpp:70
-#: ../src/widgets/ege-paint-def.cpp:92
+#: ../src/widgets/ege-paint-def.cpp:69
+#: ../src/widgets/ege-paint-def.cpp:91
#: ../src/widgets/gradient-selector.cpp:174
msgid "none"
msgstr "Niet"
-#: ../src/widgets/ege-paint-def.cpp:89
+#: ../src/widgets/ege-paint-def.cpp:88
msgid "remove"
msgstr "verwijderen"
@@ -25556,7 +25518,7 @@ msgstr "RGB-standaardwaarde aanpassen aan waarde van icc-color()."
#: ../src/widgets/sp-color-scales.cpp:413
#: ../src/widgets/sp-color-scales.cpp:439
#: ../src/widgets/sp-color-scales.cpp:470
-#: ../src/widgets/sp-color-wheel-selector.cpp:135
+#: ../src/widgets/sp-color-wheel-selector.cpp:177
msgid "_A:"
msgstr "_A:"
@@ -25568,8 +25530,8 @@ msgstr "_A:"
#: ../src/widgets/sp-color-scales.cpp:441
#: ../src/widgets/sp-color-scales.cpp:471
#: ../src/widgets/sp-color-scales.cpp:472
-#: ../src/widgets/sp-color-wheel-selector.cpp:145
-#: ../src/widgets/sp-color-wheel-selector.cpp:157
+#: ../src/widgets/sp-color-wheel-selector.cpp:187
+#: ../src/widgets/sp-color-wheel-selector.cpp:199
msgid "Alpha (opacity)"
msgstr "Alfa (ondoorzichtigheid)"
@@ -26228,7 +26190,7 @@ msgstr "Punten en hoeken willekeurig uitspreiden"
#: ../src/widgets/toolbox.cpp:2993
#: ../src/widgets/toolbox.cpp:3926
#: ../src/widgets/toolbox.cpp:4181
-#: ../src/widgets/toolbox.cpp:8451
+#: ../src/widgets/toolbox.cpp:8447
msgid "Defaults"
msgstr "Standaardwaarden"
@@ -27180,7 +27142,7 @@ msgstr "Kies ondoorzichtigheid"
#: ../src/widgets/toolbox.cpp:5686
msgid "Pick both the color and the alpha (transparency) under cursor; otherwise, pick only the visible color premultiplied by alpha"
-msgstr "Neem zowel de kleur als de alfa (transparantie) onder de cursor; zoniet, neem alleen de zichtbare kleur voorvermenigvuldigd met alfa"
+msgstr "Zowel kleur als alfa (transparantie) onder de cursor nemen; zoniet, alleen de zichtbare kleur voorvermenigvuldigd met alfa nemen"
#: ../src/widgets/toolbox.cpp:5689
msgid "Pick"
@@ -27558,131 +27520,131 @@ msgstr "Kromming verbinding aanpassen"
msgid "Change connector spacing"
msgstr "Verbindingsafstanden aanpassen"
-#: ../src/widgets/toolbox.cpp:8131
+#: ../src/widgets/toolbox.cpp:8127
msgid "EditMode"
msgstr "Bewerkmodus"
-#: ../src/widgets/toolbox.cpp:8132
+#: ../src/widgets/toolbox.cpp:8128
msgid "Switch between connection point editing and connector drawing mode"
msgstr "Wisselen tussen bewerkmodus voor verbindingspunten en tekenmodus voor verbindingen"
-#: ../src/widgets/toolbox.cpp:8146
+#: ../src/widgets/toolbox.cpp:8142
msgid "Avoid"
msgstr "Vermijden"
-#: ../src/widgets/toolbox.cpp:8156
+#: ../src/widgets/toolbox.cpp:8152
msgid "Ignore"
msgstr "Negeren"
-#: ../src/widgets/toolbox.cpp:8167
+#: ../src/widgets/toolbox.cpp:8163
msgid "Orthogonal"
msgstr "Orthogonaal"
-#: ../src/widgets/toolbox.cpp:8168
+#: ../src/widgets/toolbox.cpp:8164
msgid "Make connector orthogonal or polyline"
msgstr "Verbinding orthogonaal of veellijn maken"
-#: ../src/widgets/toolbox.cpp:8182
+#: ../src/widgets/toolbox.cpp:8178
msgid "Connector Curvature"
msgstr "Kromming verbinding"
-#: ../src/widgets/toolbox.cpp:8182
+#: ../src/widgets/toolbox.cpp:8178
msgid "Curvature:"
msgstr "Kromming:"
-#: ../src/widgets/toolbox.cpp:8183
+#: ../src/widgets/toolbox.cpp:8179
msgid "The amount of connectors curvature"
msgstr "Hoeveelheid kromming van verbindingen"
-#: ../src/widgets/toolbox.cpp:8193
+#: ../src/widgets/toolbox.cpp:8189
msgid "Connector Spacing"
msgstr "Verbindingsafstanden"
-#: ../src/widgets/toolbox.cpp:8194
+#: ../src/widgets/toolbox.cpp:8190
msgid "The amount of space left around objects by auto-routing connectors"
msgstr "De vrij te laten ruimte rond objecten bij het automatisch routeren van verbindingen"
-#: ../src/widgets/toolbox.cpp:8205
+#: ../src/widgets/toolbox.cpp:8201
msgid "Graph"
msgstr "Diagram"
-#: ../src/widgets/toolbox.cpp:8215
+#: ../src/widgets/toolbox.cpp:8211
msgid "Connector Length"
msgstr "Verbindingslengte"
-#: ../src/widgets/toolbox.cpp:8215
+#: ../src/widgets/toolbox.cpp:8211
msgid "Length:"
msgstr "Lengte:"
-#: ../src/widgets/toolbox.cpp:8216
+#: ../src/widgets/toolbox.cpp:8212
msgid "Ideal length for connectors when layout is applied"
msgstr "Ideale lengte van verbindingen bij herschikken"
-#: ../src/widgets/toolbox.cpp:8228
+#: ../src/widgets/toolbox.cpp:8224
msgid "Downwards"
msgstr "Omlaag"
-#: ../src/widgets/toolbox.cpp:8229
+#: ../src/widgets/toolbox.cpp:8225
msgid "Make connectors with end-markers (arrows) point downwards"
msgstr "Eindmarkeringen (pijlen) van verbindingen wijzen omlaag"
-#: ../src/widgets/toolbox.cpp:8245
+#: ../src/widgets/toolbox.cpp:8241
msgid "Do not allow overlapping shapes"
msgstr "Geen overlappende vormen toestaan"
-#: ../src/widgets/toolbox.cpp:8260
+#: ../src/widgets/toolbox.cpp:8256
msgid "New connection point"
msgstr "Nieuw verbindingspunt"
-#: ../src/widgets/toolbox.cpp:8261
+#: ../src/widgets/toolbox.cpp:8257
msgid "Add a new connection point to the currently selected item"
msgstr "Een nieuw verbindingspunt naar het geselecteerde item toevoegen"
-#: ../src/widgets/toolbox.cpp:8272
+#: ../src/widgets/toolbox.cpp:8268
msgid "Remove connection point"
msgstr "Verbindingspunt verwijderen"
-#: ../src/widgets/toolbox.cpp:8273
+#: ../src/widgets/toolbox.cpp:8269
msgid "Remove the currently selected connection point"
msgstr "Het geselecteerde verbindingspunt verwijderen"
-#: ../src/widgets/toolbox.cpp:8373
+#: ../src/widgets/toolbox.cpp:8369
msgid "Fill by"
msgstr "Vullen met"
-#: ../src/widgets/toolbox.cpp:8374
+#: ../src/widgets/toolbox.cpp:8370
msgid "Fill by:"
msgstr "Vullen met:"
-#: ../src/widgets/toolbox.cpp:8386
+#: ../src/widgets/toolbox.cpp:8382
msgid "Fill Threshold"
msgstr "Vullingsdrempel"
-#: ../src/widgets/toolbox.cpp:8387
+#: ../src/widgets/toolbox.cpp:8383
msgid "The maximum allowed difference between the clicked pixel and the neighboring pixels to be counted in the fill"
msgstr "Het maximaal toegestane verschil tussen de aangeklikte pixel en de naastliggende pixels geteld in de vulling"
-#: ../src/widgets/toolbox.cpp:8413
+#: ../src/widgets/toolbox.cpp:8409
msgid "Grow/shrink by"
msgstr "Verdikken/verdunnen met"
-#: ../src/widgets/toolbox.cpp:8413
+#: ../src/widgets/toolbox.cpp:8409
msgid "Grow/shrink by:"
msgstr "Verdikken/verdunnen met:"
-#: ../src/widgets/toolbox.cpp:8414
+#: ../src/widgets/toolbox.cpp:8410
msgid "The amount to grow (positive) or shrink (negative) the created fill path"
msgstr "De hoeveelheid waarmee het vullingspad verdikt (positief) of verdund (negatief) moet worden"
-#: ../src/widgets/toolbox.cpp:8439
+#: ../src/widgets/toolbox.cpp:8435
msgid "Close gaps"
msgstr "Gaten opvullen"
-#: ../src/widgets/toolbox.cpp:8440
+#: ../src/widgets/toolbox.cpp:8436
msgid "Close gaps:"
msgstr "Gaten opvullen:"
-#: ../src/widgets/toolbox.cpp:8452
+#: ../src/widgets/toolbox.cpp:8448
msgid "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools to change defaults)"
msgstr "Herinitialiseer afgebakende gebieden vullen naar standaardwaarden (gebruik Inkscape-voorkeuren > Gereedschappen om de standaardwaarden te veranderen)"
@@ -27695,11 +27657,12 @@ msgstr "Herinitialiseer afgebakende gebieden vullen naar standaardwaarden (gebru
#. 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:fileencoding=utf-8:textwidth=99 :
#: ../share/extensions/gcodetools_all_in_one.inx.h:1
#: ../share/extensions/gcodetools_area.inx.h:1
+#, fuzzy
msgid "\"Create area offset\": creates several Inkscape path offsets to fill original path's area up to \"Area radius\" value. Outlines start from \"1/2 D\" up to \"Area width\" total width with \"D\" steps where D is taken from the nearest tool definition (\"Tool diameter\" value). Only one offset will be created if the \"Area width\" is equal to \"1/2 D\"."
-msgstr ""
+msgstr "\"Oppervlak offset maken\": maakt verschillende Inkscape-offsetpaden aan om de originele padoppervlakte te vullen tot de \"Contourbreedte\". Contouren beginnen van \"1/2 D\" tot de \"Contourbreedte\" met \"D\" stappen, waarbij D afkomstig is van de gereedschapsdefinitie (\"Diameter gereedschap\"). Slechts één offset wordt gemaakt indien de \"Contourbreedte\" gelijk is aan \"1/2 D\"."
#: ../share/extensions/gcodetools_all_in_one.inx.h:2
#: ../share/extensions/gcodetools_orientation_points.inx.h:1
@@ -27746,7 +27709,7 @@ msgstr "Oppervlakartefacten"
#: ../share/extensions/gcodetools_all_in_one.inx.h:10
#: ../share/extensions/gcodetools_area.inx.h:7
msgid "Area width:"
-msgstr "Breedte oppervlak"
+msgstr "Contourbreedte:"
#: ../share/extensions/gcodetools_all_in_one.inx.h:11
#: ../share/extensions/gcodetools_area.inx.h:8
@@ -27770,7 +27733,7 @@ msgstr "Bicirkelinterpolatietolerantie"
#: ../share/extensions/gcodetools_all_in_one.inx.h:14
#: ../share/extensions/gcodetools_dxf_points.inx.h:3
msgid "Convert selected objects to drill points (as dxf_import plugin does). Also you can save original shape. Only the start point of each curve will be used. Also you can manually select object, open XML editor (Shift+Ctrl+X) and add or remove XML tag 'dxfpoint' with any value."
-msgstr ""
+msgstr "Geselecteerde objecten converteren naar boorpunten (zoals de dxf_import plugin doet). Je kan ook de originele vorm bewaren. Slechts het beginpunt van elke vorm zal gebruikt worden. Je kan ook een object manueel selecteren, de XML-editor openen (Shift+Ctrl+X) en de 'dxfpoint'-tag met elke waarde toevoegen of verwijderen."
#: ../share/extensions/gcodetools_all_in_one.inx.h:15
#: ../share/extensions/gcodetools_dxf_points.inx.h:4
@@ -27858,7 +27821,7 @@ msgstr "Gereedschappen nakijken"
#: ../share/extensions/gcodetools_all_in_one.inx.h:27
#: ../share/extensions/gcodetools_area.inx.h:18
msgid "Maximum area cutting curves:"
-msgstr "Maximum oppervlak snijcurves:"
+msgstr "Maximum aantal snijcurves:"
#: ../share/extensions/gcodetools_all_in_one.inx.h:28
#: ../share/extensions/gcodetools_engraving.inx.h:12
@@ -27896,7 +27859,7 @@ msgstr "Offset langs Z-as:"
#: ../share/extensions/gcodetools_all_in_one.inx.h:35
#: ../share/extensions/gcodetools_orientation_points.inx.h:8
msgid "Orientation points are used to calculate transformation (offset,scale,mirror,rotation in XY plane) of the path. 3-points mode only: do not put all three into one line (use 2-points mode instead). You can modify Z surface, Z depth values later using text tool (3rd coordinates). If there are no orientation points inside current layer they are taken from the upper layer. Do not ungroup orientation points! You can select them using double click to enter the group or by Ctrl+Click. Now press apply to create control points (independent set for each layer)."
-msgstr ""
+msgstr "Oriëntatiepunten worden gebruikt om de transformatie (offset, schalen, spiegeling, rotatie in het XY vlak) van het pad te berekenen. Alleen 3-punts modus: plaats niet alle 3 de punten op een lijn (gebruik dan de 2-punts modus). Je kan de Z-oppervlakte en Z-diepte later aanpassen met het tekstgereedschap (derde coördinaat). Indien er geen oriëntatiepunten in de huidige laag zijn, worden ze van de bovenste laag genomen. Degroepeer nooit oriëntatiepunten! Je kan ze selecteren door een dubbelklik om de groep binnen te gaan of door Ctrl+klik. Druk nu op Toepassen om de controlepunten aan te maken (onafhankelijke set voor elke laag)."
#: ../share/extensions/gcodetools_all_in_one.inx.h:36
#: ../share/extensions/gcodetools_orientation_points.inx.h:9
@@ -27952,12 +27915,12 @@ msgstr "Het geselecteerde type gereedshap gebruikt de standaardwaarden. Je kan d
#: ../share/extensions/gcodetools_all_in_one.inx.h:43
#: ../share/extensions/gcodetools_engraving.inx.h:21
msgid "Sharp angle tolerance:"
-msgstr ""
+msgstr "Tolerantie scherpe hoek:"
#: ../share/extensions/gcodetools_all_in_one.inx.h:44
#: ../share/extensions/gcodetools_engraving.inx.h:22
msgid "This function creates path to engrave sharp angles. Cutter's shape function is defined by the tool. Some simple shapes: cone....(45 degrees)...........: w cone....(height/diameter=10/3).: 10/3 w sphere..(\"r\" diameter).........: math.sqrt(max(0,r**2-w**2)) ellipse.(R1=r and R2=r*4r).....: math.sqrt(max(0,r**2-w**2))*4"
-msgstr ""
+msgstr "Deze functie maakt een pad voor het graveren van scherpe hoeken. De functie voor de mesvorm wordt bepaald door het gereedschap. Enkele eenvoudige vormen: kegel...(45 graden)............: w kegel...(hoogte/diameter=10/3).: 10/3 w bol..(\"r\" diameter).........: math.sqrt(max(0,r**2-w**2)) ellips..(R1=r en R2=r*4r).....: math.sqrt(max(0,r**2-w**2))*4"
#: ../share/extensions/gcodetools_all_in_one.inx.h:45
#: ../share/extensions/gcodetools_tools_library.inx.h:6
@@ -28006,7 +27969,7 @@ msgstr "Z-oppervlak:"
#: ../share/extensions/gcodetools_all_in_one.inx.h:52
#: ../share/extensions/gcodetools_dxf_points.inx.h:18
msgid "clear dxfpoint sign"
-msgstr ""
+msgstr "dxf-punt teken weghalen"
#: ../share/extensions/gcodetools_all_in_one.inx.h:53
#: ../share/extensions/gcodetools_tools_library.inx.h:8
@@ -28051,12 +28014,12 @@ msgstr "plasma"
#: ../share/extensions/gcodetools_all_in_one.inx.h:61
#: ../share/extensions/gcodetools_dxf_points.inx.h:19
msgid "set as dxfpoint and draw arrow"
-msgstr ""
+msgstr "instellen als dxf-punt en pijl tekenen"
#: ../share/extensions/gcodetools_all_in_one.inx.h:62
#: ../share/extensions/gcodetools_dxf_points.inx.h:20
msgid "set as dxfpoint and save shape"
-msgstr ""
+msgstr "instellen als dxf-punt en vorm bewaren"
#: ../share/extensions/gcodetools_all_in_one.inx.h:63
#: ../share/extensions/gcodetools_tools_library.inx.h:13
@@ -28077,11 +28040,11 @@ msgstr "DXF-punten"
#: ../share/extensions/gcodetools_engraving.inx.h:4
msgid "Draw additional graphics to debug engraving path"
-msgstr ""
+msgstr "Additionele afbeeldingen tekenen om gravurepad te debuggen"
#: ../share/extensions/gcodetools_lathe.inx.h:5
msgid "Create fine cut using:"
-msgstr ""
+msgstr "Precisiesnede maken met:"
#: ../share/extensions/gcodetools_lathe.inx.h:7
msgid "File"
@@ -28089,11 +28052,11 @@ msgstr "Bestand"
#: ../share/extensions/gcodetools_lathe.inx.h:8
msgid "Fine cut count:"
-msgstr ""
+msgstr "Aantal sneden:"
#: ../share/extensions/gcodetools_lathe.inx.h:9
msgid "Fine cut width:"
-msgstr ""
+msgstr "Breedte snede:"
#: ../share/extensions/gcodetools_lathe.inx.h:15
msgid "Lathe"
@@ -28101,11 +28064,11 @@ msgstr "Draaibank"
#: ../share/extensions/gcodetools_lathe.inx.h:16
msgid "Lathe X axis remap:"
-msgstr ""
+msgstr "Draaibank X-as herindeling:"
#: ../share/extensions/gcodetools_lathe.inx.h:17
msgid "Lathe Z axis remap:"
-msgstr ""
+msgstr "Draaibank Z-as herindeling:"
#: ../share/extensions/gcodetools_lathe.inx.h:18
msgid "Lathe width:"
@@ -28151,6 +28114,28 @@ msgstr "Helling (graden):"
msgid "Wireframe Sphere"
msgstr "Draadmodel sfeer"
+#~ msgid "Randomize hue"
+#~ msgstr "Willekeurige tint"
+#~ msgid "Randomize lightness"
+#~ msgstr "Willekeurige helderheid"
+#~ msgid "Randomize saturation"
+#~ msgstr "Willekeurig verzadiging"
+#~ msgid "Year (0 for current):"
+#~ msgstr "Jaar (0 voor huidige):"
+#~ msgctxt "Node tool tip"
+#~ msgid ""
+#~ "<b>%u of %u nodes</b> selected. Drag to select nodes, click to edit only "
+#~ "this object (more: Shift)"
+#~ msgstr ""
+#~ "<b>%u van %u knooppunten</b> geselecteerd. Sleep om knooppunten te "
+#~ "selecteren, klik om enkel dit object te bewerken (toetscombinatie: Shift)"
+#~ msgctxt "Node tool tip"
+#~ msgid ""
+#~ "<b>%u of %u nodes</b> selected. Drag to select nodes, click clear the "
+#~ "selection"
+#~ msgstr ""
+#~ "<b>%u van %u knooppunten</b> geselecteerd. Sleep om knooppunten te "
+#~ "selecteren, klik voor deselectie"
#~ msgctxt "Icon preview window"
#~ msgid "_Selection"
#~ msgstr "_Selectie"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 7fd5b49cb..7fd5b49cb 100755..100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
diff --git a/share/tutorials/Makefile.am b/share/tutorials/Makefile.am
index b625a3d81..572f6e288 100644
--- a/share/tutorials/Makefile.am
+++ b/share/tutorials/Makefile.am
@@ -160,6 +160,7 @@ tutorial_DATA = \
tutorial-tips.ja.svg \
tutorial-tips.id.svg \
tutorial-tips.it.svg \
+ tutorial-tips.nl.svg \
tutorial-tips.pl.svg \
tutorial-tips.pt_BR.svg \
tutorial-tips.ru.svg \
diff --git a/share/tutorials/tutorial-advanced.ja.svg b/share/tutorials/tutorial-advanced.ja.svg
index 8949efbb0..90366d7de 100644
--- a/share/tutorials/tutorial-advanced.ja.svg
+++ b/share/tutorials/tutorial-advanced.ja.svg
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- DO NOT EDIT THIS FILE. It is produced automatically from a DocBook source (*.xml) by tutorial-svg.xsl. -->
<svg id="svg1" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="tutorial-basic.svg" xmlns:string="http://www.jclark.com/xt/java/java.lang.String" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:version="0.32" height="3170pt" width="256pt" version="1.1" xmlns:cc="http://web.resource.org/cc/" xmlns:xlink="http://www.w3.org/1999/xlink" inkscape:version="0.48" xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview id="base" inkscape:window-x="0" inkscape:window-y="0" snaptoguides="true" inkscape:zoom="2.0000000" inkscape:cx="160.00000" inkscape:cy="3864.0000" inkscape:window-width="780" showborder="false" inkscape:window-height="580" showguides="true"/>
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
@@ -60,427 +61,429 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net
</flowRegion>
<flowDiv xml:space="preserve">このチュートリアルはコピー/貼り付け、ノードの編集、フリーハンドおよびベジエ曲線、パス操作、ブーリアン操作、オフセット、簡略化、およびテキストツールについて解説しています。</flowDiv>
</flowRoot>
- <rect id="d0e18" display="none" height="1000px" width="264" y="70.905" x="35"/>
+ <rect id="d0e18" display="none" height="1000px" width="264" y="71.021" x="35"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;" font-family="sans" font-size="7.2" line-height="150%" font-weight="normal" font-style="italic" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e18"/>
</flowRegion>
<flowDiv xml:space="preserve"><flowSpan font-weight="bold">Ctrl+矢印</flowSpan>、<flowSpan font-weight="bold">マウスホイール</flowSpan>、または <flowSpan font-weight="bold">中央ボタンを押しながらドラッグ</flowSpan> を使ってページをスクロールすることができます。基本的なオブジェクトの作成、選択、変形については、<flowSpan font-family="sans serif">ヘルプ &gt; チュートリアル</flowSpan> から基本チュートリアルをご覧ください。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="135.463175" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="135.463175" x="10">貼り付けテクニック</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="136.32352600000002" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="136.32352600000002" x="10">貼り付けテクニック</tspan>
</text>
- <rect id="d0e38" display="none" height="1000px" width="288" y="140.66" x="10"/>
+ <rect id="d0e38" display="none" height="1000px" width="288" y="141.52" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e38"/>
</flowRegion>
<flowDiv xml:space="preserve">あるオブジェクトをコピー (<flowSpan font-weight="bold">Ctrl+C</flowSpan>) または切り取り (<flowSpan font-weight="bold">Ctrl+X</flowSpan>) した後、通常の<flowSpan font-family="sans serif">貼り付け</flowSpan>コマンド (<flowSpan font-weight="bold">Ctrl+V</flowSpan>) はマウスカーソルの下に、もしカーソルがウインドウの外にあればドキュメントウインドウの中心にオブジェクトを貼り付けます。ただし、クリップボードにあるオブジェクトはコピーしてきた元の位置を記憶しているので、<flowSpan font-family="sans serif">同じ場所に貼り付け</flowSpan> (<flowSpan font-weight="bold">Ctrl+Alt+V</flowSpan>) でその位置に貼り付けることができます。</flowDiv>
</flowRoot>
- <rect id="d0e59" display="none" height="1000px" width="288" y="213.6" x="10"/>
+ <rect id="d0e59" display="none" height="1000px" width="288" y="214.52" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e59"/>
</flowRegion>
- <flowDiv xml:space="preserve">別のコマンド、<flowSpan font-family="sans serif">スタイルを貼り付け</flowSpan> (<flowSpan font-weight="bold">Shift+Ctrl+V</flowSpan>) は、クリップボード内の (最初の) オブジェクトのスタイルを現在の選択オブジェクトに適用します。"スタイル" とは、フィル、ストローク、フォント設定のすべてですが、形状、サイズ、および星形の頂点数のようなシェイプタイプに固有のパラメータは含まれません。</flowDiv>
+ <flowDiv xml:space="preserve">別のコマンド、<flowSpan font-family="sans serif">スタイルを貼り付け</flowSpan> (<flowSpan font-weight="bold">Shift+Ctrl+V</flowSpan>) は、クリップボード内の (最初の) オブジェクトのスタイルを現在の選択オブジェクトに適用します。&quot;スタイル&quot; とは、フィル、ストローク、フォント設定のすべてですが、形状、サイズ、および星形の頂点数のようなシェイプタイプに固有のパラメータは含まれません。</flowDiv>
</flowRoot>
- <rect id="d0e68" display="none" height="1000px" width="288" y="274.22" x="10"/>
+ <rect id="d0e68" display="none" height="1000px" width="288" y="276.63" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e68"/>
</flowRegion>
<flowDiv xml:space="preserve">その他の貼り付けコマンドに <flowSpan font-family="sans serif">サイズを貼り付け</flowSpan> があり、選択オブジェクトのサイズをクリップボードオブジェクトのサイズ属性にあわせて拡大縮小します。サイズを貼り付けるコマンドには、サイズを貼り付け、幅を貼り付け、高さを貼り付け、サイズを個別に貼り付け、幅を個別に貼り付け、および高さを個別に貼り付けが用意されています。</flowDiv>
</flowRoot>
- <rect id="d0e74" display="none" height="1000px" width="288" y="334.95" x="10"/>
+ <rect id="d0e74" display="none" height="1000px" width="288" y="337.47" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e74"/>
</flowRegion>
- <flowDiv xml:space="preserve"><flowSpan font-family="sans serif">サイズを貼り付け</flowSpan> は選択オブジェクト全体をクリップボードオブジェクト全体のサイズにあわせて拡大縮小します。<flowSpan font-family="sans serif">幅を貼り付け</flowSpan>/<flowSpan font-family="sans serif">高さを貼り付け</flowSpan> は選択オブジェクト全体の幅/高さをクリップボードオブジェクトの幅/高さにあわせて拡大縮小します。これらコマンドは選択ツールコントロールバーの縦横比をロック (幅と高さの間にあるボタン) に拘束されます。すなわち、ロックされた場合は選択オブジェクトの幅と高さの比率は維持されつつ拡大縮小され、ロックされていなければ選択オブジェクトの幅と高さの比率は保証されません。"…を個別に貼り付け" と書かれたコマンドの動作は上記のコマンドと似ていますが、選択オブジェクトそれぞれを個別にクリップボードオブジェクトのサイズ/幅/高さにあわせて拡大縮小します。</flowDiv>
+ <flowDiv xml:space="preserve"><flowSpan font-family="sans serif">サイズを貼り付け</flowSpan> は選択オブジェクト全体をクリップボードオブジェクト全体のサイズにあわせて拡大縮小します。<flowSpan font-family="sans serif">幅を貼り付け</flowSpan>/<flowSpan font-family="sans serif">高さを貼り付け</flowSpan> は選択オブジェクト全体の幅/高さをクリップボードオブジェクトの幅/高さにあわせて拡大縮小します。これらコマンドは選択ツールコントロールバーの縦横比をロック (幅と高さの間にあるボタン) に拘束されます。すなわち、ロックされた場合は選択オブジェクトの幅と高さの比率は維持されつつ拡大縮小され、ロックされていなければ選択オブジェクトの幅と高さの比率は保証されません。&quot;…を個別に貼り付け&quot; と書かれたコマンドの動作は上記のコマンドと似ていますが、選択オブジェクトそれぞれを個別にクリップボードオブジェクトのサイズ/幅/高さにあわせて拡大縮小します。</flowDiv>
</flowRoot>
- <rect id="d0e85" display="none" height="1000px" width="288" y="450.28" x="10"/>
+ <rect id="d0e85" display="none" height="1000px" width="288" y="455.11" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e85"/>
</flowRegion>
<flowDiv xml:space="preserve">クリップボードはシステムワイドです。異なる Inkscape インスタンス間や、Inkscape と他のアプリケーションとの間でオブジェクトのコピー/貼り付けが行えます (クリップボードで SVG を扱えるようになっていなければなりません)。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="514.679138" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="514.679138" x="10">フリーハンド曲線と規則的なパス</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="520.013817" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="520.013817" x="10">フリーハンド曲線と規則的なパス</tspan>
</text>
- <rect id="d0e94" display="none" height="1000px" width="288" y="519.88" x="10"/>
+ <rect id="d0e94" display="none" height="1000px" width="288" y="525.21" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e94"/>
</flowRegion>
<flowDiv xml:space="preserve">任意のシェイプを作る最も簡単な方法は、鉛筆 (フリーハンド) ツール (<flowSpan font-weight="bold">F6</flowSpan>) を使って描くことです:</flowDiv>
</flowRoot>
- <path id="advanced-f01-ja.svgpath1346" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M46.607,13.757c0.097,0.121-6.045-10.694,2.296-8.6084,13.014,3.2535,36.676,11.755,39.601-2.8696,0.665-3.3242-1.896,6.5097-2.87,9.757-11.022,36.74-10.376,90.104-60.836,90.104-3.944,0,1.624-8.306,4.592-10.903" stroke-dashoffset="0.0000000" transform="translate(10, 556.843888) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f01-ja.svgpath1350" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M80.979,57.809c0.786,3.928-17.812,41.364-8.609,22.957,15.013-30.025,26.378-37.166,20.087,0.574-1.261,7.57,5.876,5.7,9.753,4.592" stroke-dashoffset="0.0000000" transform="translate(10, 556.843888) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f01-ja.svgpath1354" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M146.47,49.915c0.86,1.283-3.06-0.383-4.59-0.574-6.77-0.847-15.45,12.452-4.59,16.07,18.47,6.156-6.95,13.097-13.2,14.348" stroke-dashoffset="0.0000000" transform="translate(10, 556.843888) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f01-ja.svgpath1358" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M184.92,45.323c0.68-0.424-5.31,1.448-9.18,9.183-11.9,23.804,20.09,8.79,20.09-5.165,0-11.549-31.72,4.416-21.24,8.609" stroke-dashoffset="0.0000000" transform="translate(10, 556.843888) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f01-ja.svgpath1360" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M195.25,47.619c0-1.031-3.28,11.218,1.73,21.235" stroke-dashoffset="0.0000000" transform="translate(10, 556.843888) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f01-ja.svgpath1372" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M209.6,38.436c4.81,24.041-7.01,48.593-14.35,70.594-4.08,12.25-0.05-14.799,0.58-22.384,3.21-38.534,52.43-71.095,27.55-27.549-2.52,4.399-8.08,5.74-12.63,5.74" stroke-dashoffset="0.0000000" transform="translate(10, 556.843888) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f01-ja.svgpath2338" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M125.36,10.791c0.45,0.68-16.45,58.367-18.22,65-6.23,23.357-13.253,15.48,2.86-12.143,7.99-13.704,20.38-26.489,12.5-2.857-3.64,10.922-12.32-1.972-8.57,9.285,2.13,6.396,3.58,10.662,10.71,9.643" sodipodi:nodetypes="cccccc" transform="translate(10, 556.843888) " stroke-dashoffset="0.0000000" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f01-ja.svgpath2356" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M168.93,48.291c-0.93,1.387-3.45-0.619-5,0-15.47,6.188-25.19,28.823-0.72,23.928,2.56-0.512,4.77-2.143,7.15-3.214" stroke-dashoffset="0.0000000" transform="translate(10, 556.843888) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f01-ja.svgpath2382" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M230.71,51.862c-0.02,0.042,8.22-2.601,14.65-5.357,13.01-5.578,12.87-20.01-2.15-11.429-10.41,5.949-18.7,23.929-1.07,23.929,9.37,0,21.66-3.891,28.93-10.357" stroke-dashoffset="0.0000000" transform="translate(10, 556.843888) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
- <rect id="d0e110" display="none" height="1000px" width="288" y="680.66" x="10"/>
+ <path id="advanced-f01-ja.svgpath1346" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M46.607,13.757c0.097,0.121-6.045-10.694,2.296-8.6084,13.014,3.2535,36.676,11.755,39.601-2.8696,0.665-3.3242-1.896,6.5097-2.87,9.757-11.022,36.74-10.376,90.104-60.836,90.104-3.944,0,1.624-8.306,4.592-10.903" stroke-dashoffset="0.0000000" transform="translate(10, 562.7985480000001) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f01-ja.svgpath1350" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M80.979,57.809c0.786,3.928-17.812,41.364-8.609,22.957,15.013-30.025,26.378-37.166,20.087,0.574-1.261,7.57,5.876,5.7,9.753,4.592" stroke-dashoffset="0.0000000" transform="translate(10, 562.7985480000001) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f01-ja.svgpath1354" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M146.47,49.915c0.86,1.283-3.06-0.383-4.59-0.574-6.77-0.847-15.45,12.452-4.59,16.07,18.47,6.156-6.95,13.097-13.2,14.348" stroke-dashoffset="0.0000000" transform="translate(10, 562.7985480000001) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f01-ja.svgpath1358" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M184.92,45.323c0.68-0.424-5.31,1.448-9.18,9.183-11.9,23.804,20.09,8.79,20.09-5.165,0-11.549-31.72,4.416-21.24,8.609" stroke-dashoffset="0.0000000" transform="translate(10, 562.7985480000001) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f01-ja.svgpath1360" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M195.25,47.619c0-1.031-3.28,11.218,1.73,21.235" stroke-dashoffset="0.0000000" transform="translate(10, 562.7985480000001) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f01-ja.svgpath1372" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M209.6,38.436c4.81,24.041-7.01,48.593-14.35,70.594-4.08,12.25-0.05-14.799,0.58-22.384,3.21-38.534,52.43-71.095,27.55-27.549-2.52,4.399-8.08,5.74-12.63,5.74" stroke-dashoffset="0.0000000" transform="translate(10, 562.7985480000001) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f01-ja.svgpath2338" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M125.36,10.791c0.45,0.68-16.45,58.367-18.22,65-6.23,23.357-13.253,15.48,2.86-12.143,7.99-13.704,20.38-26.489,12.5-2.857-3.64,10.922-12.32-1.972-8.57,9.285,2.13,6.396,3.58,10.662,10.71,9.643" sodipodi:nodetypes="cccccc" transform="translate(10, 562.7985480000001) " stroke-dashoffset="0.0000000" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f01-ja.svgpath2356" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M168.93,48.291c-0.93,1.387-3.45-0.619-5,0-15.47,6.188-25.19,28.823-0.72,23.928,2.56-0.512,4.77-2.143,7.15-3.214" stroke-dashoffset="0.0000000" transform="translate(10, 562.7985480000001) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f01-ja.svgpath2382" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;stroke-dasharray:none;marker-mid:none;" d="M230.71,51.862c-0.02,0.042,8.22-2.601,14.65-5.357,13.01-5.578,12.87-20.01-2.15-11.429-10.41,5.949-18.7,23.929-1.07,23.929,9.37,0,21.66-3.891,28.93-10.357" stroke-dashoffset="0.0000000" transform="translate(10, 562.7985480000001) " stroke="#000" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="1.0000000pt" fill="none"/>
+ <rect id="d0e110" display="none" height="1000px" width="288" y="686.61" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e110"/>
</flowRegion>
<flowDiv xml:space="preserve">もし、もっと規則的な線を描きたければ、ペン (ベジエ) ツール (<flowSpan font-weight="bold">Shift+F6</flowSpan>) を使います:</flowDiv>
</flowRoot>
- <path id="advanced-f02-ja.svgpath1317" d="M28.569,8.4053h23.456s-12.689-18.802-12.689,2.0517c0,20.853,0.384,55.38,0.384,55.38h16.92s-47.49,14.529-31.148,0" transform="translate(10, 717.432792) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f02-ja.svgpath1318" d="M71.857,37.319h-11.117s15.087,27.151,0,27.151" transform="translate(10, 717.432792) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f02-ja.svgpath1320" d="M68.536,43.654c7.83-15.458,13-8.555,13-8.555v28.918h-5.854" transform="translate(10, 717.432792) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f02-ja.svgpath1321" d="M83.172,29.942l9.301-14.321v48.849s-0.841-24.272,9.927-29.4c10.77-5.128,11.79,12.616,0.64,12.616s-7.563,0.033-7.563,0.033l18.653,16.58h-13.27" sodipodi:nodetypes="cccccccc" transform="translate(10, 717.432792) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f02-ja.svgpath1322" d="M138.02,45.326s6.16-15.126,0-11.965c-6.16,3.16-21.15,17.264-19.42,17.264s19.86-1.855,18.65,0c-1.2,1.854-5.77,15.212-11.53,14.187-5.77-1.026-9.23-10.94-9.23-10.94" transform="translate(10, 717.432792) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f02-ja.svgpath1323" d="M164.31,46.693c-7.8-12.013-18.46-12.648-18.46-12.648v20.511l12.31,10.939s9.61,3.077,9.61-8.204" transform="translate(10, 717.432792) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f02-ja.svgpath1324" d="M161.48,33.515h25.41s-15.37,0.279-16,13.387,7.4,17.195,13.02,11.574c5.95-5.952,7.43-24.648,7.43-24.648v31.202" sodipodi:nodetypes="cccscc" transform="translate(10, 717.432792) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f02-ja.svgpath1325" d="M197.87,73.397v-40.161h13.6c14.16,0,5.22,11.841-0.83,18.686-6.03,6.81-8.8,5.641-8.8-2.231" sodipodi:nodetypes="cccsc" transform="translate(10, 717.432792) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f02-ja.svgpath1328" d="M219.33,44.95h37.64s-0.31-11.156-17.57-11.435c-17.25-0.279-15.68,17.849-15.68,23.427s5.02,15.897,17.88,15.897,15.37-13.666,15.37-20.08" transform="translate(10, 717.432792) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <rect id="d0e126" display="none" height="1000px" width="288" y="803.45" x="10"/>
+ <path id="advanced-f02-ja.svgpath1317" d="M28.569,8.4053h23.456s-12.689-18.802-12.689,2.0517c0,20.853,0.384,55.38,0.384,55.38h16.92s-47.49,14.529-31.148,0" transform="translate(10, 724.0271440000001) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f02-ja.svgpath1318" d="M71.857,37.319h-11.117s15.087,27.151,0,27.151" transform="translate(10, 724.0271440000001) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f02-ja.svgpath1320" d="M68.536,43.654c7.83-15.458,13-8.555,13-8.555v28.918h-5.854" transform="translate(10, 724.0271440000001) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f02-ja.svgpath1321" d="M83.172,29.942l9.301-14.321v48.849s-0.841-24.272,9.927-29.4c10.77-5.128,11.79,12.616,0.64,12.616s-7.563,0.033-7.563,0.033l18.653,16.58h-13.27" sodipodi:nodetypes="cccccccc" transform="translate(10, 724.0271440000001) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f02-ja.svgpath1322" d="M138.02,45.326s6.16-15.126,0-11.965c-6.16,3.16-21.15,17.264-19.42,17.264s19.86-1.855,18.65,0c-1.2,1.854-5.77,15.212-11.53,14.187-5.77-1.026-9.23-10.94-9.23-10.94" transform="translate(10, 724.0271440000001) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f02-ja.svgpath1323" d="M164.31,46.693c-7.8-12.013-18.46-12.648-18.46-12.648v20.511l12.31,10.939s9.61,3.077,9.61-8.204" transform="translate(10, 724.0271440000001) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f02-ja.svgpath1324" d="M161.48,33.515h25.41s-15.37,0.279-16,13.387,7.4,17.195,13.02,11.574c5.95-5.952,7.43-24.648,7.43-24.648v31.202" sodipodi:nodetypes="cccscc" transform="translate(10, 724.0271440000001) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f02-ja.svgpath1325" d="M197.87,73.397v-40.161h13.6c14.16,0,5.22,11.841-0.83,18.686-6.03,6.81-8.8,5.641-8.8-2.231" sodipodi:nodetypes="cccsc" transform="translate(10, 724.0271440000001) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f02-ja.svgpath1328" d="M219.33,44.95h37.64s-0.31-11.156-17.57-11.435c-17.25-0.279-15.68,17.849-15.68,23.427s5.02,15.897,17.88,15.897,15.37-13.666,15.37-20.08" transform="translate(10, 724.0271440000001) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <rect id="d0e126" display="none" height="1000px" width="288" y="810.05" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e126"/>
</flowRegion>
<flowDiv xml:space="preserve">ペンツールでは<flowSpan font-weight="bold">クリック</flowSpan>ごとにカーブハンドルを持たないシャープノードができるので、複数のクリックで一連の線分になります。 <flowSpan font-weight="bold">クリックおよびドラッグ</flowSpan>では同一直線上にある向かい合った 2 つのハンドルを持つベジエノードができます。ハンドルをドラッグ中に <flowSpan font-weight="bold">Shift</flowSpan>を押すと、操作しているハンドルの反対側を固定することができます。いつものように、<flowSpan font-weight="bold">Ctrl</flowSpan>は現在のセグメントやベジエハンドルの方向を 15 度毎に制限します。 <flowSpan font-weight="bold">Enter</flowSpan> で描画を確定し、<flowSpan font-weight="bold">Esc</flowSpan> で描画を取り消します。終了していない線の最後のセグメントだけを取り消すには <flowSpan font-weight="bold">Backspace</flowSpan> を押します。</flowDiv>
</flowRoot>
- <rect id="d0e150" display="none" height="1000px" width="288" y="899.19" x="10"/>
+ <rect id="d0e150" display="none" height="1000px" width="288" y="907.28" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e150"/>
</flowRegion>
<flowDiv xml:space="preserve">フリーハンドでもベジエでも、現在選択されているパスは両端に小さな<flowSpan font-style="italic">アンカー</flowSpan>が表示されます。これらのアンカーから、新しい線を作る代わりにパスの<flowSpan font-style="italic">継続</flowSpan> (アンカーの一方から描画する) や、<flowSpan font-style="italic">閉じる</flowSpan> (一方のアンカーからもう一方に線を描く) こともできます。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="962.7573519999999" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="962.7573519999999" x="10">パスの編集</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="971.4589820000001" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="971.4589820000001" x="10">パスの編集</tspan>
</text>
- <rect id="d0e168" display="none" height="1000px" width="288" y="967.96" x="10"/>
+ <rect id="d0e168" display="none" height="1000px" width="288" y="976.66" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e168"/>
</flowRegion>
<flowDiv xml:space="preserve">シェイプツールで作られたシェイプと異なり、ペンツールと鉛筆ツールは<flowSpan font-style="italic">パス</flowSpan>を作ります。パスというのは一連の直線セグメントおよび/またはベジエ曲線からなっており、他の Inkscape オブジェクトと同様に任意のフィルとストローク属性を持つことができます。しかし、シェイプと異なりパスは (所定のハンドルのみならず) ノードをドラッグすることで自由に編集することができます。このパスを選択してノードツール (<flowSpan font-weight="bold">F2</flowSpan>) に切り替えてみましょう:</flowDiv>
</flowRoot>
- <path id="advanced-f03-ja.svgpath1235" d="M49.143,24.797c13.131-7.502,29.978-20.056,44.278-15.242,11.149,3.752,27.099,30.288,1.036,38.409,9.953,6.454,24.033,1.294,35.263-3.812,23.27-10.38,33.25-27.439,66.3-28.885,12.58-0.709,32.58,5.169,30.26,17.361-1.72,9.036-19.99,6.979-28.85,3.35-25.22-10.945-12.66-30.41-33.28-34.604-9.52-2.142-21.25,1.3591-27.36,13.496" sodipodi:nodetypes="cscsscsss" transform="translate(10, 1048.7886489999999) " stroke="#000" stroke-width="1.2528700pt" fill="none"/>
- <rect id="d0e187" display="none" height="1000px" width="288" y="1112.6" x="10"/>
+ <path id="advanced-f03-ja.svgpath1235" d="M49.143,24.797c13.131-7.502,29.978-20.056,44.278-15.242,11.149,3.752,27.099,30.288,1.036,38.409,9.953,6.454,24.033,1.294,35.263-3.812,23.27-10.38,33.25-27.439,66.3-28.885,12.58-0.709,32.58,5.169,30.26,17.361-1.72,9.036-19.99,6.979-28.85,3.35-25.22-10.945-12.66-30.41-33.28-34.604-9.52-2.142-21.25,1.3591-27.36,13.496" sodipodi:nodetypes="cscsscsss" transform="translate(10, 1059.6916640000002) " stroke="#000" stroke-width="1.2528700pt" fill="none"/>
+ <rect id="d0e187" display="none" height="1000px" width="288" y="1123.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e187"/>
</flowRegion>
<flowDiv xml:space="preserve">いくつもの灰色で正方形の <flowSpan font-style="italic">ノード</flowSpan> がパスに上に見えるでしょう。これらノードは <flowSpan font-weight="bold">クリック</flowSpan>、<flowSpan font-weight="bold">Shift+クリック</flowSpan>、あるいはラバーバンドで <flowSpan font-weight="bold">ドラッグ</flowSpan> して<flowSpan font-style="italic">選択</flowSpan>できます — オブジェクトは選択ツールによる場合と同じように選択されます。また、パスセグメントをクリックすると、自動的に隣接するノードが選択されます。選択されたノードはハイライト表示され、ノードから直線でつながれた 1 つもしくは 2 つの円形の<flowSpan font-style="italic">ノードハンドル</flowSpan>が表示されます。<flowSpan font-weight="bold">!</flowSpan> キーで現在のサブパス (1 個以上のノードが選択されたサブパス) 内で選択ノードを反転します。<flowSpan font-weight="bold">Alt+!</flowSpan> でパス全体で反転します。</flowDiv>
</flowRoot>
- <rect id="d0e214" display="none" height="1000px" width="288" y="1206.6" x="10"/>
+ <rect id="d0e214" display="none" height="1000px" width="288" y="1219.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e214"/>
</flowRegion>
<flowDiv xml:space="preserve">パスは、ノードを<flowSpan font-weight="bold">ドラッグ</flowSpan>、あるいはあるいはパスセグメントを直接ドラッグして編集します (上のパスのいくつかのノード、ハンドル、またはパスセグメントをドラッグして見てください)。<flowSpan font-weight="bold">Ctrl</flowSpan> キーはいつものように移動および回転方向を制限します。<flowSpan font-weight="bold">矢印</flowSpan>、<flowSpan font-weight="bold">Tab</flowSpan>、<flowSpan font-weight="bold">[</flowSpan>、<flowSpan font-weight="bold">]</flowSpan>、<flowSpan font-weight="bold">&lt;</flowSpan>、<flowSpan font-weight="bold">&gt;</flowSpan> キーと修飾キーの組み合わせはすべて選択ツールと同様に動作しますが、オブジェクトではなく、ノードに対して適用されます。ノードを追加するには、パス上の任意の位置でダブルクリックまたは <flowSpan font-weight="bold">Ctrl+Alt+クリック</flowSpan> します。</flowDiv>
</flowRoot>
- <rect id="d0e244" display="none" height="1000px" width="288" y="1290.7" x="10"/>
+ <rect id="d0e244" display="none" height="1000px" width="288" y="1304.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e244"/>
</flowRegion>
<flowDiv xml:space="preserve">ノードの削除は <flowSpan font-weight="bold">Del</flowSpan> または <flowSpan font-weight="bold">Ctrl+Alt+クリック</flowSpan> で行います。ノードを削除すると、パスはその形状をできるだけ維持しようとします (ハンドルの情報は変更されます)。ノードの状態を変更させたくない (形状を維持しない) 場合は、<flowSpan font-weight="bold">Ctrl+Del</flowSpan> で削除します。また、選択ノードの複製を作成することもできます (<flowSpan font-weight="bold">Shift+D</flowSpan>)。パスは選択したノードから分割 (<flowSpan font-weight="bold">Shift+B</flowSpan>) でき、選択したノードが一つのパスの端点であれば連結 (<flowSpan font-weight="bold">Shift+J</flowSpan>) することもできます。</flowDiv>
</flowRoot>
- <rect id="d0e265" display="none" height="1000px" width="288" y="1365.2" x="10"/>
+ <rect id="d0e265" display="none" height="1000px" width="288" y="1379.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e265"/>
</flowRegion>
- <flowDiv xml:space="preserve">ノードは<flowSpan font-style="italic">角</flowSpan> (<flowSpan font-weight="bold">Shift+C</flowSpan>) にすることもできます。すなわち、2 つのハンドルを独立してどんな角度にでもできます。<flowSpan font-style="italic">スムーズ</flowSpan> (<flowSpan font-weight="bold">Shift+S</flowSpan>) にすることもできます。これはハンドルが常に一つの直線上にある (共線) ことです。そして<flowSpan font-style="italic">対称</flowSpan> (<flowSpan font-weight="bold">Shift+Y</flowSpan>) にすることもできます。これはスムーズと同じですがハンドルの長さが等しくなります。</flowDiv>
+ <flowDiv xml:space="preserve">ノードは<flowSpan font-style="italic">シャープ</flowSpan> (<flowSpan font-weight="bold">Shift+C</flowSpan>) にすることもできます。すなわち、2 つのハンドルを独立してどんな角度にでもできます。<flowSpan font-style="italic">スムーズ</flowSpan> (<flowSpan font-weight="bold">Shift+S</flowSpan>) にすることもできます。これはハンドルが常に一つの直線上にある (共線) ことです。そして<flowSpan font-style="italic">対称</flowSpan> (<flowSpan font-weight="bold">Shift+Y</flowSpan>) にすることもできます。これはスムーズと同じですがハンドルの長さが等しくなります。</flowDiv>
</flowRoot>
- <rect id="d0e286" display="none" height="1000px" width="288" y="1428.1" x="10"/>
+ <rect id="d0e286" display="none" height="1000px" width="288" y="1443" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e286"/>
</flowRegion>
<flowDiv xml:space="preserve">また、ハンドルの上で <flowSpan font-weight="bold">Ctrl+クリック</flowSpan> するとノードのハンドルを完全に<flowSpan font-style="italic">引っ込める</flowSpan>ことができます。もし 2 つの近接するノードのハンドルが引っ込んでいると 2 つのノード間のパスセグメントは直線になります。ハンドルの引っ込んだノードからハンドルを引き出すにはノードから <flowSpan font-weight="bold">Shift+ドラッグ</flowSpan> で行えます。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1502.4334039999997" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1502.4334039999997" x="10">サブパスと結合</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1518.8415870000001" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1518.8415870000001" x="10">サブパスと結合</tspan>
</text>
- <rect id="d0e304" display="none" height="1000px" width="288" y="1507.6" x="10"/>
+ <rect id="d0e304" display="none" height="1000px" width="288" y="1524" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e304"/>
</flowRegion>
<flowDiv xml:space="preserve">パスオブジェクトは 1 つ以上の<flowSpan font-style="italic">サブパス</flowSpan>を含んでいます。サブパスとは一連のノードが接続されたもののことです (もしパスが 1 つ以上のサブパスを持っている場合は、すべてのノードが連結している訳ではありません)。下の左図では 1 つの複合パスに 3 つのサブパスが属しています。右図は同じサブパスが 3 つの独立したパスオブジェクトになっています:</flowDiv>
</flowRoot>
- <path id="advanced-f04-ja.svgpath1735" d="M100.09,6.445c-6.511-7.5367-18.172-7.0049-26.385-2.6524-5.701,3.0209-11.538,6.5134-15.338,11.723-5.199,7.128-0.613,18.406,8.263,21.306,6.653,1.819,14.244-3.464,8.908-12.673m4.925-10.671c6.417-6.6214,17.628-1.347,20.287,6.426,2.27,6.608,2.77,14.498,9.14,18.923,6.42,4.45,17.12,5.311,21.25-2.255,3.53-6.462-3.15-14.74-10.26-12.459m-56.932,26.977c7.041,4.896,14.772-1.731,19.71-6.764,5.239-5.339,13.278-1.157,16.922,4.37,3.32,5.038,11.7,8.321,15.91,2.324" transform="translate(10, 1576.3652799999998) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f04-ja.svgpath1729" stroke-linejoin="miter" d="M226.58,6.7994c-6.51-7.5367-18.17-7.0049-26.39-2.6524-5.7,3.0209-11.53,6.513-15.33,11.723-5.2,7.129-0.62,18.407,8.26,21.306,6.65,1.819,14.24-3.463,8.91-12.672" sodipodi:nodetypes="cssss" transform="translate(10, 1576.3652799999998) " stroke="#000" stroke-linecap="butt" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f04-ja.svgpath1730" stroke-linejoin="miter" d="M206.95,13.832c6.42-6.621,17.63-1.346,20.29,6.427,2.26,6.607,2.77,14.497,9.14,18.923,6.41,4.45,17.12,5.311,21.25-2.256,3.53-6.461-3.16-14.74-10.26-12.459" sodipodi:nodetypes="cssss" transform="translate(10, 1576.3652799999998) " stroke="#000" stroke-linecap="butt" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f04-ja.svgpath1731" d="M190.44,51.444c7.04,4.896,14.77-1.73,19.71-6.763,5.24-5.339,13.27-1.157,16.92,4.369,3.32,5.038,11.7,8.321,15.91,2.324" sodipodi:nodetypes="csss" transform="translate(10, 1576.3652799999998) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <rect id="d0e320" display="none" height="1000px" width="288" y="1643.6" x="10"/>
+ <path id="advanced-f04-ja.svgpath1735" d="M100.09,6.445c-6.511-7.5367-18.172-7.0049-26.385-2.6524-5.701,3.0209-11.538,6.5134-15.338,11.723-5.199,7.128-0.613,18.406,8.263,21.306,6.653,1.819,14.244-3.464,8.908-12.673m4.925-10.671c6.417-6.6214,17.628-1.347,20.287,6.426,2.27,6.608,2.77,14.498,9.14,18.923,6.42,4.45,17.12,5.311,21.25-2.255,3.53-6.462-3.15-14.74-10.26-12.459m-56.932,26.977c7.041,4.896,14.772-1.731,19.71-6.764,5.239-5.339,13.278-1.157,16.922,4.37,3.32,5.038,11.7,8.321,15.91,2.324" transform="translate(10, 1595.708636) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f04-ja.svgpath1729" stroke-linejoin="miter" d="M226.58,6.7994c-6.51-7.5367-18.17-7.0049-26.39-2.6524-5.7,3.0209-11.53,6.513-15.33,11.723-5.2,7.129-0.62,18.407,8.26,21.306,6.65,1.819,14.24-3.463,8.91-12.672" sodipodi:nodetypes="cssss" transform="translate(10, 1595.708636) " stroke="#000" stroke-linecap="butt" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f04-ja.svgpath1730" stroke-linejoin="miter" d="M206.95,13.832c6.42-6.621,17.63-1.346,20.29,6.427,2.26,6.607,2.77,14.497,9.14,18.923,6.41,4.45,17.12,5.311,21.25-2.256,3.53-6.461-3.16-14.74-10.26-12.459" sodipodi:nodetypes="cssss" transform="translate(10, 1595.708636) " stroke="#000" stroke-linecap="butt" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f04-ja.svgpath1731" d="M190.44,51.444c7.04,4.896,14.77-1.73,19.71-6.763,5.24-5.339,13.27-1.157,16.92,4.369,3.32,5.038,11.7,8.321,15.91,2.324" sodipodi:nodetypes="csss" transform="translate(10, 1595.708636) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <rect id="d0e320" display="none" height="1000px" width="288" y="1662.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e320"/>
</flowRegion>
- <flowDiv xml:space="preserve">複合パスはグループとは違うことを覚えておいてください。複合パスは全体として選択できる一つのオブジェクトです。左図のオブジェクトを選択してノードツールに切り替えると、3 つのサブパスが表示されるのが分かるでしょう。右図を選択すると 1 度に 1 つのパスのノード編集しかできないでしょう。</flowDiv>
+ <flowDiv xml:space="preserve">複合パスはグループとは違うことを覚えておいてください。複合パスは全体として選択できる一つのオブジェクトです。左図のオブジェクトを選択してノードツールに切り替えると、3 つのサブパスが表示されるのが分かるでしょう。右図を選択すると 1 度に 1 つのパスのノード編集しかできません。</flowDiv>
</flowRoot>
- <rect id="d0e323" display="none" height="1000px" width="288" y="1693.8" x="10"/>
+ <rect id="d0e323" display="none" height="1000px" width="288" y="1714.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e323"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape はパスを<flowSpan font-family="sans serif">結合</flowSpan>して複合パスにすることができます (<flowSpan font-weight="bold">Ctrl+K</flowSpan>)。また、複合パスを<flowSpan font-family="sans serif">分解</flowSpan>して独立したパスにすることもできます (<flowSpan font-weight="bold">Shift+Ctrl+K</flowSpan>)。上図の例にこれらのコマンドを試してみてください。1 つのオブジェクトは 1 つのフィルとストロークしか持てないため、複合パスは最初 (Z 軸順序で最背面) のオブジェクトのスタイルになります。</flowDiv>
</flowRoot>
- <rect id="d0e338" display="none" height="1000px" width="288" y="1757.4" x="10"/>
+ <rect id="d0e338" display="none" height="1000px" width="288" y="1778.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e338"/>
</flowRegion>
<flowDiv xml:space="preserve">フィルが設定され、重なっているパスを結合すると、通常、重なっている部分のフィルが消えます:</flowDiv>
</flowRoot>
- <path id="advanced-f05-ja.svgpath1796" d="M155.75,61.987l-26.12-11.321-3.86,19.965-7.44-27.481-18.02,9.429,16.85-22.948-18.602-8.208,28.442-1.134-5.18-19.664,18.62,21.533,12.15-16.312-5.23,27.986,20.33-0.678-25.14,13.365,13.2,15.468zm29.81-9.429c-4.76,12.495-21.78,17.62-37.98,11.44-16.21-6.18-25.49-21.338-20.72-33.833,4.76-12.495,21.78-17.62,37.99-11.44,16.2,6.181,25.48,21.337,20.71,33.833z" fill-rule="evenodd" fill-opacity="0.75000000" transform="translate(10, 1794.3136439999996) " stroke="#000" stroke-width="1.0000000pt" fill="#07ba88"/>
- <rect id="d0e351" display="none" height="1000px" width="288" y="1877.6" x="10"/>
+ <path id="advanced-f05-ja.svgpath1796" d="M155.75,61.987l-26.12-11.321-3.86,19.965-7.44-27.481-18.02,9.429,16.85-22.948-18.602-8.208,28.442-1.134-5.18-19.664,18.62,21.533,12.15-16.312-5.23,27.986,20.33-0.678-25.14,13.365,13.2,15.468zm29.81-9.429c-4.76,12.495-21.78,17.62-37.98,11.44-16.21-6.18-25.49-21.338-20.72-33.833,4.76-12.495,21.78-17.62,37.99-11.44,16.2,6.181,25.48,21.337,20.71,33.833z" fill-rule="evenodd" fill-opacity="0.75000000" transform="translate(10, 1815.6233) " stroke="#000" stroke-width="1.0000000pt" fill="#07ba88"/>
+ <rect id="d0e351" display="none" height="1000px" width="288" y="1898.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e351"/>
</flowRegion>
- <flowDiv xml:space="preserve">これは、穴のあるオブジェクトを作る最も簡単な方法です。さらに強力なパスコマンドについては、下の "ブーリアン操作" をご覧ください。</flowDiv>
+ <flowDiv xml:space="preserve">これは、穴のあるオブジェクトを作る最も簡単な方法です。さらに強力なパスコマンドについては、下の &quot;ブーリアン操作&quot; をご覧ください。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1919.6690879999996" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1919.6690879999996" x="10">パスに変換</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1940.978744" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1940.978744" x="10">パスに変換</tspan>
</text>
- <rect id="d0e360" display="none" height="1000px" width="288" y="1924.9" x="10"/>
+ <rect id="d0e360" display="none" height="1000px" width="288" y="1946.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e360"/>
</flowRegion>
<flowDiv xml:space="preserve">あらゆるシェイプやテキストオブジェクトは<flowSpan font-style="italic">パスに変換</flowSpan> (<flowSpan font-weight="bold">Shift+Ctrl+C</flowSpan>) することができます。この変換はオブジェクトの見た目は変化させずにオブジェクトの種類固有の情報を削除し (例えば、矩形の角を丸めたりテキストを編集することはできなくなります)、代わりに、ノードの編集が可能になります。ここに 2 つの星形があります。左はシェイプのままですが、右はパスに変換されています。ノードツールに切り替え、選択したときの編集性を比較してみましょう:</flowDiv>
</flowRoot>
- <polygon id="advanced-f06-ja.svgpolygon1410" stroke="#000" stroke-width="1.0000000pt" sodipodi:type="star" d="M 48.608655,3873.8302 L 38.020121,3854.1783 L 21.697849,3874.9159 L 30.460473,3854.3847 L 4.0704360,3854.5531 L 25.585784,3848.6030 L 9.0002176,3828.0754 L 27.066793,3841.1869 L 32.774968,3815.4211 L 33.788271,3837.7210 L 57.491814,3826.1191 L 40.688807,3840.8151 L 64.538468,3852.1136 L 42.572158,3848.1393 L 48.608655,3873.8302 z " fill-opacity="0.75000000" fill="#FF0" sodipodi:r1="31.036766" inkscape:flatsided="false" fill-rule="evenodd" transform="translate(10, 2015.0807139999997) translate(49.93435,-3814.793)" sodipodi:arg2="1.0947087" sodipodi:arg1="1.0816765" inkscape:randomized="0.0000000" sodipodi:cy="3846.4326" points="48.609,3873.8,38.02,3854.2,21.698,3874.9,30.46,3854.4,4.0704,3854.6,25.586,3848.6,9.0002,3828.1,27.067,3841.2,32.775,3815.4,33.788,3837.7,57.492,3826.1,40.689,3840.8,64.538,3852.1,42.572,3848.1,48.609,3873.8" sodipodi:sides="7" inkscape:rounded="0.0000000" sodipodi:r2="8.7148495" sodipodi:cx="34.026058"/>
- <path id="advanced-f06-ja.svgpath1412" d="M204.84,59.034l-10.59-19.652-16.32,20.738,8.76-20.532-26.39,0.169,21.52-5.95-16.59-20.528,18.07,13.112,5.71-25.766,1.01,22.3,23.71-11.602-16.81,14.696,23.85,11.298-21.96-3.974,6.03,25.691z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2015.0807139999997) " stroke="#000" stroke-width="1.0000000pt" fill="#FF0"/>
- <rect id="d0e379" display="none" height="1000px" width="288" y="2087.8" x="10"/>
+ <polygon id="advanced-f06-ja.svgpolygon1410" stroke="#000" stroke-width="1.0000000pt" sodipodi:type="star" d="M 48.608655,3873.8302 L 38.020121,3854.1783 L 21.697849,3874.9159 L 30.460473,3854.3847 L 4.0704360,3854.5531 L 25.585784,3848.6030 L 9.0002176,3828.0754 L 27.066793,3841.1869 L 32.774968,3815.4211 L 33.788271,3837.7210 L 57.491814,3826.1191 L 40.688807,3840.8151 L 64.538468,3852.1136 L 42.572158,3848.1393 L 48.608655,3873.8302 z " fill-opacity="0.75000000" fill="#FF0" sodipodi:r1="31.036766" inkscape:flatsided="false" fill-rule="evenodd" transform="translate(10, 2039.211737) translate(49.93435,-3814.793)" sodipodi:arg2="1.0947087" sodipodi:arg1="1.0816765" inkscape:randomized="0.0000000" sodipodi:cy="3846.4326" points="48.609,3873.8,38.02,3854.2,21.698,3874.9,30.46,3854.4,4.0704,3854.6,25.586,3848.6,9.0002,3828.1,27.067,3841.2,32.775,3815.4,33.788,3837.7,57.492,3826.1,40.689,3840.8,64.538,3852.1,42.572,3848.1,48.609,3873.8" sodipodi:sides="7" inkscape:rounded="0.0000000" sodipodi:r2="8.7148495" sodipodi:cx="34.026058"/>
+ <path id="advanced-f06-ja.svgpath1412" d="M204.84,59.034l-10.59-19.652-16.32,20.738,8.76-20.532-26.39,0.169,21.52-5.95-16.59-20.528,18.07,13.112,5.71-25.766,1.01,22.3,23.71-11.602-16.81,14.696,23.85,11.298-21.96-3.974,6.03,25.691z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2039.211737) " stroke="#000" stroke-width="1.0000000pt" fill="#FF0"/>
+ <rect id="d0e379" display="none" height="1000px" width="288" y="2112" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e379"/>
</flowRegion>
- <flowDiv xml:space="preserve">その上、どんなオブジェクトのストロークもパス ("輪郭") に変換できます。下の最初のオブジェクトは元のパス (フィルなし、黒のストローク)、一方 2 番目のオブジェクトは "パスに変換" コマンドの結果 (フィルが黒でストロークなし) です:</flowDiv>
+ <flowDiv xml:space="preserve">その上、どんなオブジェクトのストロークもパス (&quot;輪郭&quot;) に変換できます。下の最初のオブジェクトは元のパス (フィルなし、黒のストローク)、一方 2 番目のオブジェクトは &quot;パスに変換&quot; コマンドの結果 (フィルが黒でストロークなし) です:</flowDiv>
</flowRoot>
- <path id="advanced-f07-ja.svgpath1430" stroke-linejoin="miter" d="M34.91,34.708c10.658-12.173,21.176-24.395,36.677-28.281,9.293-2.3296,11.787,2.3947,4.861,10.163-5.164,5.793-10.411,10.153-12.815,16.793-2.972,8.211,2.886,9.486,11.489,7.954,8.469-1.508,14.084-8.505,19.886-15.467,4.214-5.056,8.772-5.262,10.602-0.884,7.11,15.931,20.13,0.978,22.1-0.441" sodipodi:nodetypes="csssssss" transform="translate(10, 2148.1219459999998) " stroke="#000" stroke-linecap="butt" stroke-width="9.0000000" fill="none"/>
- <path id="advanced-f07-ja.svgpath1432" d="M186.93,0.0677c-1.24,0.1038-2.52,0.3156-3.88,0.6562-8.6,2.1554-15.75,6.6404-22,12-6.24,5.36-11.65,11.611-16.97,17.687l6.75,5.938c5.34-6.096,10.51-12.046,16.06-16.813,5.56-4.766,11.44-8.331,18.35-10.062,1.26-0.3169,1.79-0.2322,2.5-0.25-0.43,0.8111-0.91,1.7071-2.1,3.0311-2.45,2.75-5.08,5.295-7.53,8.156-2.44,2.862-4.7,6.117-6.15,10.125-0.92,2.533-1.37,4.923-0.85,7.375,0.26,1.227,0.79,2.438,1.57,3.438,0.77,1,1.76,1.772,2.78,2.312,2.03,1.081,4.14,1.366,6.28,1.407,2.14,0.04,4.37-0.208,6.72-0.625,5.25-0.935,9.55-3.601,13.12-6.75,3.58-3.15,6.56-6.822,9.44-10.282,0.81-0.969,1.56-1.583,2.12-1.937,0.45-0.281,0.63-0.286,0.75-0.313,0.05,0.058,0.03,0.003,0.13,0.25v0.032l0.03,0.062c1.05,2.345,2.26,4.28,3.72,5.844s3.2,2.742,5.03,3.406,3.72,0.81,5.44,0.625,3.27-0.69,4.69-1.312c2.83-1.244,5.15-3.003,6.93-4.5,0.89-0.749,1.66-1.448,2.22-1.969,0.29-0.261,0.53-0.48,0.69-0.625,0.16-0.146,0.28-0.209,0.12-0.094l-5.28-7.312c-0.4,0.292-0.59,0.497-0.84,0.718-0.25,0.222-0.51,0.435-0.78,0.688-0.55,0.506-1.19,1.115-1.91,1.719-1.43,1.207-3.2,2.444-4.75,3.125-0.77,0.34-1.49,0.532-2.06,0.593-0.57,0.062-0.99,0.028-1.41-0.125-0.42-0.152-0.88-0.432-1.5-1.093-0.61-0.662-1.36-1.737-2.09-3.375-0.72-1.72-1.82-3.188-3.41-4.282-1.58-1.094-3.58-1.602-5.43-1.468-1.86,0.133-3.56,0.811-5.1,1.781-1.53,0.97-2.95,2.253-4.25,3.812-2.92,3.502-5.64,6.815-8.44,9.282-2.79,2.466-5.56,4.051-8.78,4.625-1.95,0.348-3.68,0.524-4.97,0.5-1.13-0.022-1.68-0.216-1.93-0.313-0.01-0.203-0.07-0.765,0.43-2.156,0.96-2.631,2.5-4.917,4.57-7.344s4.69-4.957,7.4-8c1.98-2.211,3.4-4.313,4.28-6.531,0.45-1.109,0.76-2.2602,0.82-3.5001s-0.17-2.5773-0.78-3.8125-1.62-2.2794-2.72-2.9687c-1.1-0.6894-2.27-1.0873-3.44-1.2813s-2.36-0.1976-3.59-0.0937z" fill-rule="evenodd" transform="translate(10, 2148.1219459999998) " fill="#000"/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2219.3205279999997" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2219.3205279999997" x="10">ブーリアン操作</tspan>
+ <path id="advanced-f07-ja.svgpath1430" stroke-linejoin="miter" d="M34.91,34.708c10.658-12.173,21.176-24.395,36.677-28.281,9.293-2.3296,11.787,2.3947,4.861,10.163-5.164,5.793-10.411,10.153-12.815,16.793-2.972,8.211,2.886,9.486,11.489,7.954,8.469-1.508,14.084-8.505,19.886-15.467,4.214-5.056,8.772-5.262,10.602-0.884,7.11,15.931,20.13,0.978,22.1-0.441" sodipodi:nodetypes="csssssss" transform="translate(10, 2172.252969) " stroke="#000" stroke-linecap="butt" stroke-width="9.0000000" fill="none"/>
+ <path id="advanced-f07-ja.svgpath1432" d="M186.93,0.0677c-1.24,0.1038-2.52,0.3156-3.88,0.6562-8.6,2.1554-15.75,6.6404-22,12-6.24,5.36-11.65,11.611-16.97,17.687l6.75,5.938c5.34-6.096,10.51-12.046,16.06-16.813,5.56-4.766,11.44-8.331,18.35-10.062,1.26-0.3169,1.79-0.2322,2.5-0.25-0.43,0.8111-0.91,1.7071-2.1,3.0311-2.45,2.75-5.08,5.295-7.53,8.156-2.44,2.862-4.7,6.117-6.15,10.125-0.92,2.533-1.37,4.923-0.85,7.375,0.26,1.227,0.79,2.438,1.57,3.438,0.77,1,1.76,1.772,2.78,2.312,2.03,1.081,4.14,1.366,6.28,1.407,2.14,0.04,4.37-0.208,6.72-0.625,5.25-0.935,9.55-3.601,13.12-6.75,3.58-3.15,6.56-6.822,9.44-10.282,0.81-0.969,1.56-1.583,2.12-1.937,0.45-0.281,0.63-0.286,0.75-0.313,0.05,0.058,0.03,0.003,0.13,0.25v0.032l0.03,0.062c1.05,2.345,2.26,4.28,3.72,5.844s3.2,2.742,5.03,3.406,3.72,0.81,5.44,0.625,3.27-0.69,4.69-1.312c2.83-1.244,5.15-3.003,6.93-4.5,0.89-0.749,1.66-1.448,2.22-1.969,0.29-0.261,0.53-0.48,0.69-0.625,0.16-0.146,0.28-0.209,0.12-0.094l-5.28-7.312c-0.4,0.292-0.59,0.497-0.84,0.718-0.25,0.222-0.51,0.435-0.78,0.688-0.55,0.506-1.19,1.115-1.91,1.719-1.43,1.207-3.2,2.444-4.75,3.125-0.77,0.34-1.49,0.532-2.06,0.593-0.57,0.062-0.99,0.028-1.41-0.125-0.42-0.152-0.88-0.432-1.5-1.093-0.61-0.662-1.36-1.737-2.09-3.375-0.72-1.72-1.82-3.188-3.41-4.282-1.58-1.094-3.58-1.602-5.43-1.468-1.86,0.133-3.56,0.811-5.1,1.781-1.53,0.97-2.95,2.253-4.25,3.812-2.92,3.502-5.64,6.815-8.44,9.282-2.79,2.466-5.56,4.051-8.78,4.625-1.95,0.348-3.68,0.524-4.97,0.5-1.13-0.022-1.68-0.216-1.93-0.313-0.01-0.203-0.07-0.765,0.43-2.156,0.96-2.631,2.5-4.917,4.57-7.344s4.69-4.957,7.4-8c1.98-2.211,3.4-4.313,4.28-6.531,0.45-1.109,0.76-2.2602,0.82-3.5001s-0.17-2.5773-0.78-3.8125-1.62-2.2794-2.72-2.9687c-1.1-0.6894-2.27-1.0873-3.44-1.2813s-2.36-0.1976-3.59-0.0937z" fill-rule="evenodd" transform="translate(10, 2172.252969) " fill="#000"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2243.451551" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2243.451551" x="10">ブーリアン操作</tspan>
</text>
- <rect id="d0e398" display="none" height="1000px" width="288" y="2224.5" x="10"/>
+ <rect id="d0e398" display="none" height="1000px" width="288" y="2248.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e398"/>
</flowRegion>
<flowDiv xml:space="preserve">パスメニューにあるコマンドで、2 個以上のオブジェクトを<flowSpan font-style="italic">ブーリアン操作</flowSpan>で結合することができます:</flowDiv>
</flowRoot>
- <text id="advanced-f08-ja.svgtext1463" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2261.3324029999994) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2369075" x="132.69385" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1464" y="4.2369075" x="132.69385" role="line">オリジナルのシェイプ</tspan></text>
- <text id="advanced-f08-ja.svgtext1468" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2261.3324029999994) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="75.103027" x="72.512367" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1469" y="75.103027" x="72.512367" role="line">統合 (Ctrl++)</tspan></text>
- <text id="advanced-f08-ja.svgtext1471" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2261.3324029999994) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="75.103027" x="135.35332" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1472" y="75.103027" x="135.35332" role="line">差分 (Ctrl+-)</tspan></text>
- <text id="advanced-f08-ja.svgtext1476" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2261.3324029999994) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="75.103027" x="202.23427" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1477" y="75.103027" x="202.23427" role="line">交差</tspan><tspan id="advanced-f08-ja.svgtspan1482" y="81.236844" x="202.23427" role="line">(Ctrl+*)</tspan></text>
- <text id="advanced-f08-ja.svgtext1479" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2261.3324029999994) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="149.98067" x="73.13726" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1480" y="149.98067" x="73.13726" role="line">排他</tspan><tspan id="advanced-f08-ja.svgtspan1484" y="156.11448" x="73.13726" role="line">(Ctrl+^)</tspan></text>
- <text id="advanced-f08-ja.svgtext2252" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2261.3324029999994) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="149.98067" x="136.91679" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1820" y="149.98067" x="136.91679" role="line">分割</tspan><tspan id="advanced-f08-ja.svgtspan1822" y="156.11448" x="136.91679" role="line">(Ctrl+/)</tspan></text>
- <text id="advanced-f08-ja.svgtext1828" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2261.3324029999994) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="149.98067" x="199.6328" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1829" y="149.98067" x="199.6328" role="line">パスをカット</tspan><tspan id="advanced-f08-ja.svgtspan1831" y="156.11448" x="199.6328" role="line">(Ctrl+Alt+/)</tspan><tspan id="advanced-f08-ja.svgtspan1833" y="162.2483" x="199.6328" sodipodi:role="line"/></text>
- <rect id="advanced-f08-ja.svgrect1449" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 2261.3324029999994) " height="27.398" width="37.561" stroke="#000" y="12.863" x="136.71" stroke-width="1pt" fill="#00F"/>
- <path id="advanced-f08-ja.svgpath1450" sodipodi:rx="15.245441" sodipodi:ry="15.687339" sodipodi:type="arc" d="M54.795,4055.5a15.245,15.687,0,1,1,-30.491,0,15.245,15.687,0,1,1,30.491,0z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2261.3324029999994) translate(125.2248,-4014.097)" stroke="#000" sodipodi:cy="4055.4646" sodipodi:cx="39.549770" stroke-width="1.0000000pt" fill="#F00"/>
- <path id="advanced-f08-ja.svgpath1459" d="M72.94,90.828v27.372h12.937c-0.026,0.38-0.125,0.74-0.125,1.13,0,8.66,6.835,15.69,15.248,15.69,8.42,0,15.25-7.03,15.25-15.69,0-4.94-2.28-9.31-5.75-12.19v-16.312h-37.56z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2261.3324029999994) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
- <path id="advanced-f08-ja.svgpath1460" d="M136.71,90.828v27.372h12.94c0.57-8.12,7.09-14.56,15.13-14.56,3.61,0,6.88,1.34,9.5,3.5v-16.312h-37.57z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2261.3324029999994) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
- <path id="advanced-f08-ja.svgpath1461" d="M228.55,103.64c-8.04,0-14.55,6.44-15.12,14.56h24.62v-11.06c-2.61-2.16-5.89-3.5-9.5-3.5z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2261.3324029999994) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
- <path id="advanced-f08-ja.svgpath1462" d="M72.924,165.7v27.38h12.937c0.572-8.12,7.085-14.56,15.129-14.56,3.61,0,6.88,1.34,9.5,3.5v-16.32h-37.566zm37.566,16.32v11.06h-24.629c-0.027,0.38-0.125,0.74-0.125,1.12,0,8.66,6.835,15.69,15.254,15.69,8.41,0,15.25-7.03,15.25-15.69,0-4.94-2.28-9.31-5.75-12.18z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2261.3324029999994) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
- <path id="advanced-f08-ja.svgpath1817" d="M136.73,165.74v27.37h12.94c0.04-0.68,0.05-1.37,0.18-2.03,0.21-1.02,0.49-2.03,0.88-2.97,0.38-0.94,0.86-1.82,1.4-2.65,0.55-0.84,1.19-1.61,1.88-2.32s1.44-1.37,2.25-1.93c0.81-0.57,1.68-1.04,2.59-1.44,0.92-0.4,1.86-0.7,2.85-0.91s2.01-0.31,3.06-0.31,2.1,0.1,3.09,0.31c1,0.21,1.94,0.51,2.85,0.91s1.78,0.87,2.59,1.44c0.35,0.24,0.64,0.57,0.97,0.84v-16.31h-37.53z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2261.3324029999994) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
- <path id="advanced-f08-ja.svgpath1818" d="M174.26,182.05c-0.33-0.27-0.62-0.6-0.97-0.84-0.81-0.57-1.68-1.04-2.59-1.44s-1.85-0.7-2.85-0.91c-0.99-0.21-2.04-0.31-3.09-0.31s-2.07,0.1-3.06,0.31-1.93,0.51-2.85,0.91c-0.91,0.4-1.78,0.87-2.59,1.44-0.81,0.56-1.56,1.22-2.25,1.93s-1.33,1.48-1.88,2.32c-0.54,0.83-1.02,1.71-1.4,2.65-0.39,0.94-0.67,1.95-0.88,2.97-0.13,0.66-0.14,1.35-0.18,2.03h24.59v-11.06z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2261.3324029999994) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
- <path id="advanced-f08-ja.svgpath1826" d="M214.49,194.75h24.63v-11.09" transform="translate(10, 2261.3324029999994) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <path id="advanced-f08-ja.svgpath1827" d="M238.05,182.24v-16.31h-37.56v27.4h12.94" transform="translate(10, 2261.3324029999994) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
- <flowRoot id="advanced-f08-ja.svgflowRoot2628" xml:space="preserve" transform="translate(10, 2261.3324029999994) " font-size="5.57619715px"><flowRegion id="advanced-f08-ja.svgflowRegion2630"><rect id="advanced-f08-ja.svgrect2632" y="76.05" width="63.135" x="135.36" height="14.647"/></flowRegion><flowPara id="advanced-f08-ja.svgflowPara2634" font-family="Bitstream Vera Serif">(背面側から前面側を引く)</flowPara></flowRoot>
- <rect id="d0e414" display="none" height="1000px" width="288" y="2484.1" x="10"/>
+ <text id="advanced-f08-ja.svgtext1463" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2286.19722) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2369075" x="132.69385" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1464" y="4.2369075" x="132.69385" role="line">オリジナルのシェイプ</tspan></text>
+ <text id="advanced-f08-ja.svgtext1468" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2286.19722) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="75.103027" x="72.512367" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1469" y="75.103027" x="72.512367" role="line">統合 (Ctrl++)</tspan></text>
+ <text id="advanced-f08-ja.svgtext1471" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2286.19722) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="75.103027" x="135.35332" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1472" y="75.103027" x="135.35332" role="line">差分 (Ctrl+-)</tspan></text>
+ <text id="advanced-f08-ja.svgtext1476" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2286.19722) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="75.103027" x="202.23427" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1477" y="75.103027" x="202.23427" role="line">交差</tspan><tspan id="advanced-f08-ja.svgtspan1482" y="81.236844" x="202.23427" role="line">(Ctrl+*)</tspan></text>
+ <text id="advanced-f08-ja.svgtext1479" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2286.19722) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="149.98067" x="73.13726" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1480" y="149.98067" x="73.13726" role="line">排他</tspan><tspan id="advanced-f08-ja.svgtspan1484" y="156.11448" x="73.13726" role="line">(Ctrl+^)</tspan></text>
+ <text id="advanced-f08-ja.svgtext2252" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2286.19722) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="149.98067" x="136.91679" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1820" y="149.98067" x="136.91679" role="line">分割</tspan><tspan id="advanced-f08-ja.svgtspan1822" y="156.11448" x="136.91679" role="line">(Ctrl+/)</tspan></text>
+ <text id="advanced-f08-ja.svgtext1828" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 2286.19722) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="149.98067" x="199.6328" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f08-ja.svgtspan1829" y="149.98067" x="199.6328" role="line">パスをカット</tspan><tspan id="advanced-f08-ja.svgtspan1831" y="156.11448" x="199.6328" role="line">(Ctrl+Alt+/)</tspan><tspan id="advanced-f08-ja.svgtspan1833" y="162.2483" x="199.6328" sodipodi:role="line"/></text>
+ <rect id="advanced-f08-ja.svgrect1449" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 2286.19722) " height="27.398" width="37.561" stroke="#000" y="12.863" x="136.71" stroke-width="1pt" fill="#00F"/>
+ <path id="advanced-f08-ja.svgpath1450" sodipodi:rx="15.245441" sodipodi:ry="15.687339" sodipodi:type="arc" d="M54.795,4055.5a15.245,15.687,0,1,1,-30.491,0,15.245,15.687,0,1,1,30.491,0z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2286.19722) translate(125.2248,-4014.097)" stroke="#000" sodipodi:cy="4055.4646" sodipodi:cx="39.549770" stroke-width="1.0000000pt" fill="#F00"/>
+ <path id="advanced-f08-ja.svgpath1459" d="M72.94,90.828v27.372h12.937c-0.026,0.38-0.125,0.74-0.125,1.13,0,8.66,6.835,15.69,15.248,15.69,8.42,0,15.25-7.03,15.25-15.69,0-4.94-2.28-9.31-5.75-12.19v-16.312h-37.56z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2286.19722) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
+ <path id="advanced-f08-ja.svgpath1460" d="M136.71,90.828v27.372h12.94c0.57-8.12,7.09-14.56,15.13-14.56,3.61,0,6.88,1.34,9.5,3.5v-16.312h-37.57z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2286.19722) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
+ <path id="advanced-f08-ja.svgpath1461" d="M228.55,103.64c-8.04,0-14.55,6.44-15.12,14.56h24.62v-11.06c-2.61-2.16-5.89-3.5-9.5-3.5z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2286.19722) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
+ <path id="advanced-f08-ja.svgpath1462" d="M72.924,165.7v27.38h12.937c0.572-8.12,7.085-14.56,15.129-14.56,3.61,0,6.88,1.34,9.5,3.5v-16.32h-37.566zm37.566,16.32v11.06h-24.629c-0.027,0.38-0.125,0.74-0.125,1.12,0,8.66,6.835,15.69,15.254,15.69,8.41,0,15.25-7.03,15.25-15.69,0-4.94-2.28-9.31-5.75-12.18z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2286.19722) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
+ <path id="advanced-f08-ja.svgpath1817" d="M136.73,165.74v27.37h12.94c0.04-0.68,0.05-1.37,0.18-2.03,0.21-1.02,0.49-2.03,0.88-2.97,0.38-0.94,0.86-1.82,1.4-2.65,0.55-0.84,1.19-1.61,1.88-2.32s1.44-1.37,2.25-1.93c0.81-0.57,1.68-1.04,2.59-1.44,0.92-0.4,1.86-0.7,2.85-0.91s2.01-0.31,3.06-0.31,2.1,0.1,3.09,0.31c1,0.21,1.94,0.51,2.85,0.91s1.78,0.87,2.59,1.44c0.35,0.24,0.64,0.57,0.97,0.84v-16.31h-37.53z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2286.19722) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
+ <path id="advanced-f08-ja.svgpath1818" d="M174.26,182.05c-0.33-0.27-0.62-0.6-0.97-0.84-0.81-0.57-1.68-1.04-2.59-1.44s-1.85-0.7-2.85-0.91c-0.99-0.21-2.04-0.31-3.09-0.31s-2.07,0.1-3.06,0.31-1.93,0.51-2.85,0.91c-0.91,0.4-1.78,0.87-2.59,1.44-0.81,0.56-1.56,1.22-2.25,1.93s-1.33,1.48-1.88,2.32c-0.54,0.83-1.02,1.71-1.4,2.65-0.39,0.94-0.67,1.95-0.88,2.97-0.13,0.66-0.14,1.35-0.18,2.03h24.59v-11.06z" fill-opacity="0.75000000" fill-rule="evenodd" transform="translate(10, 2286.19722) " stroke="#000" stroke-width="1.0000000pt" fill="#00F"/>
+ <path id="advanced-f08-ja.svgpath1826" d="M214.49,194.75h24.63v-11.09" transform="translate(10, 2286.19722) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <path id="advanced-f08-ja.svgpath1827" d="M238.05,182.24v-16.31h-37.56v27.4h12.94" transform="translate(10, 2286.19722) " stroke="#000" stroke-width="1.0000000pt" fill="none"/>
+ <flowRoot id="advanced-f08-ja.svgflowRoot2628" xml:space="preserve" transform="translate(10, 2286.19722) " font-size="5.57619715px"><flowRegion id="advanced-f08-ja.svgflowRegion2630"><rect id="advanced-f08-ja.svgrect2632" y="76.05" width="63.135" x="135.36" height="14.647"/></flowRegion><flowPara id="advanced-f08-ja.svgflowPara2634" font-family="Bitstream Vera Serif">(背面側から前面側を引く)</flowPara></flowRoot>
+ <rect id="d0e414" display="none" height="1000px" width="288" y="2508.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e414"/>
</flowRegion>
<flowDiv xml:space="preserve">これらのコマンドのキーボードショートカットは代数演算とブーリアン操作に類似させて関連付けられています (統合は加法、差分は減法等)。<flowSpan font-family="sans serif">差分</flowSpan>と<flowSpan font-family="sans serif">排他</flowSpan>コマンドは選択したオブジェクトが 2 つのときにのみ適用でき、その他は一度にいくつのオブジェクトを選択しても処理できます。結果は常に最背面のオブジェクトのスタイルを受け継ぎます。</flowDiv>
</flowRoot>
- <rect id="d0e423" display="none" height="1000px" width="288" y="2544.9" x="10"/>
+ <rect id="d0e423" display="none" height="1000px" width="288" y="2571" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e423"/>
</flowRegion>
<flowDiv xml:space="preserve"><flowSpan font-family="sans serif">排他</flowSpan>の結果は<flowSpan font-family="sans serif">統合</flowSpan> (上図を参照) の結果に似ていますが、<flowSpan font-family="sans serif">排他</flowSpan>は重なり合った部分にノードを追加するところが異なっています。<flowSpan font-family="sans serif">分割</flowSpan>と<flowSpan font-family="sans serif">パスをカット</flowSpan>は、前者が下のオブジェクトのすべてを上のオブジェクトで切断するのに対し、後者はストロークのみを切断しフィルを取り除くところが異なります (フィルのないストロークをばらばらにするのに便利)。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2618.6036759999993" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2618.6036759999993" x="10">インセットとアウトセット</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2646.110156" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2646.110156" x="10">インセットとアウトセット</tspan>
</text>
- <rect id="d0e446" display="none" height="1000px" width="288" y="2623.8" x="10"/>
+ <rect id="d0e446" display="none" height="1000px" width="288" y="2651.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e446"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape は拡大縮小だけではなくオブジェクトのパスを<flowSpan font-style="italic">オフセット</flowSpan>することでもシェイプを拡張、収縮することができます。つまりパス上のすべての点を垂直方向に移動することができます。相当するコマンドは<flowSpan font-family="sans serif">インセット</flowSpan> (<flowSpan font-weight="bold">Ctrl+(</flowSpan>) と<flowSpan font-family="sans serif">アウトセット</flowSpan> (<flowSpan font-weight="bold">Ctrl+)</flowSpan>) です。下の図は、元になるパス (赤) とそこからのいくつかのインセットとアウトセットを作成した例です:</flowDiv>
</flowRoot>
- <path id="advanced-f09-ja.svgpath1893" stroke-linejoin="miter" d="M115.81,90.263c-16.592-6.213-24.464-26.139-22.243-43.098,1.074-8.205,2.889-17.007,6.823-23.669,2.32-3.927,0.06,6.387-0.16,8.347-0.913,8.042-0.666,17.609,6.23,23.314,3.44,2.848,8.32,3.345,6.88-2.814-2.18-9.364,10.91-16.85,20.11-13.934,7.11,2.251,12.73,9.419,10.97,16.948-1.91,8.158-11.61,4.751-13.16-2.785-1.53-7.452-10.93,1.693-9.85,7.286,1.47,7.682,9.57,9.514,16.01,10.234,7.97,0.892,18.69-2.911,19.6-11.738,0.73-7.13,3.81-14.344,11.82-15.244,9.37-1.054,19.57-0.877,33.29-0.178-15.92,0-23.98,10.502-28.31,19.012-4,7.872-13.27,12.644-21.56,13.805-10.35,1.451-24.13-0.786-30.18-0.786,0,10.718,9.09,15.684,16.62,15.406,6.95-0.257,11.57-8.682,18.44-11.491,8.52-3.478,18.52-3.25,26.14,2.201,6.04,4.319,12.03,12.117,8.66,19.641-3.36,7.5-13.9,8.71-20.32,3.87-5.83-4.39-12.21-9.159-20.21-9.12-7.06,0.034-11.04,2.496-12.62,10.32-2.53-6.862-7.05-9.815-22.98-15.527z" sodipodi:nodetypes="csssssssssssscsscsssssscs" transform="translate(10, 2694.136663999999) " stroke="#ff0100" stroke-linecap="butt" stroke-width="0.67500001" fill="none"/>
- <path id="advanced-f09-ja.svgpath1895" stroke-linejoin="miter" d="M99.5,21.398c-6.586,11.012-8.859,24.639-7.854,37.357,1.466,15.945,12.324,30.921,28.104,35.206,8.4,2.59,16.35,7.479,19.15,16.289,2.3-2.14,2.23-11.427,8.32-12.289,10.68-2.682,18.68,5.939,27.26,10.389,9.5,4.43,22.72-3.64,20.13-14.65-3.68-15.148-22.17-22.946-36.23-17.278-9.17,2.095-14.34,15.051-24.91,11.226-4.16-0.301-12.23-9.472-7.13-10.39,15.56,1.307,34.08,3.251,45.78-9.434,5.96-8.402,10.84-19.432,22.1-21.742,3.95-0.623,17.73-2.335,7.97-5.152-12.56-0.04-25.68-1.842-37.9,1.432-8.52,3.359-7.75,13.674-11.23,20.474-7.16,7.412-21.56,7.107-28.43-0.395-2.97-3.595,0.1-9.54,4.12-10.511,0.97,6.962,10.4,14.117,16,7.406,7.64-12.42-8.42-27.667-21.09-22.691-8.19,1.747-14.36,9.935-12.19,18.285-9.12-1.845-10.22-14.061-9.32-21.897-0.38-4.288,3.98-10.872-1.46-13.103-0.21,0.259-1.004,1.238-1.19,1.468z" transform="translate(10, 2694.136663999999) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
- <path id="advanced-f09-ja.svgpath1898" stroke-linejoin="miter" d="M100.16,15.711c-5.356,2.722-6.771,10.347-9.254,15.553-7.122,20.678-3.885,47.792,15.684,60.581,8.9,7.048,22.79,6.875,28.03,18.395,2.06,6.4,4.1,12.41,7.3,3.16,2.69-4.79,3.35-13.578,11.02-11.75,11.52,2.43,20.79,15.65,33.52,10.87,12.27-3.22,16.17-19.864,7.73-28.907-4.81-6.463-12.31-11.053-20.28-12.277,7.45-8.27,12.17-21.683,25.23-22.073,4.67-0.474,9.69-2.146,11.7-6.802-6.6-8.811-18.34-4.86-27.62-5.957-10.39,0.067-24.54-0.338-29.28,11.105-2.2,4.623-2,10.543-6.03,14.133,7.87-11.785-2.75-27.82-15.76-29.513-10.11-2.066-21.56,4.455-24.34,14.513-4.72-8.621,1.66-18.924-1.87-27.5-1.37-1.772-3.46-3.78-5.78-3.531zm28.72,44.906zm9.21,21.5c7.66-0.952,1.67,2.774-2.56,1.813-7.88-2.432-2.69-2.467,2.56-1.813z" transform="translate(10, 2694.136663999999) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
- <path id="advanced-f09-ja.svgpath1903" stroke-linejoin="miter" d="M98.031,12.804c-9.98,7.226-12.053,20.853-13.978,32.201-2.927,22.271,8.396,47.031,30.167,55.285,8.35,3.22,17.24,8.44,19.09,17.95,2.7,6.12,12.4,2.94,12.27-3.38,0.73-6.17,8.01-12.22,13.11-6.21,10.17,5.66,23.73,13.35,34.52,4.62,13.25-8.52,11.13-30.146-1.94-37.963-2.45-4.196-14.46-4.585-7.97-9.941,4.82-7.411,12.6-12.878,21.5-13.479,4.57-1.449,10.59-6.184,10.55-10.684-9.87-12.008-27.11-8.123-40.73-8.43-8.4,0.451-17.03,2.889-22.59,9.625-7.2-13.726-26.6-18.649-39.15-9.291-4.77,2.404-0.35-9.067-2.63-12.427-1.14-5.133-6.72-11.096-12.219-7.876z" transform="translate(10, 2694.136663999999) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
- <path id="advanced-f09-ja.svgpath1910" stroke-linejoin="miter" d="M99.031,0.2108c-17.313,5.1828-24.393,24.397-26.031,40.813-5.497,29.384,12.02,61.126,39.91,71.936,9.98,4.59,11.89,20.45,24.75,20.31,7.83-0.32,15.77-4.71,18.87-12.12,14.37,9.2,36.37,11.52,48.34-2.79,13.77-14.31,10.55-40.309-5.34-51.743,10.82-4.484,25.06-9.135,27.32-22.432,1.6-12.408-11.82-19.936-22.4-21.839-14.93-3.29-30.59-1.818-45.36,1.396-5.92,5.486-11.16-3.336-16.97-4.594-6.57-2.293-13.69-3.286-20.56-1.781-2.55-9.8036-11.94-18.42-22.529-17.156z" transform="translate(10, 2694.136663999999) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
- <path id="advanced-f09-ja.svgpath1913" stroke-linejoin="miter" d="M97.188,38.023c-4.586,17.702-0.396,40.201,17.092,49.215,8.22,4.204,18.47,6.131,24.16,14.032,3.96-10.464,17.83-8.989,25.57-3.873,7,3.803,16.33,12.483,23.86,4.993,7.32-7.288-1.5-17.853-8.75-21.07-11.11-5.697-24.48-0.993-32.37,7.953-9.04,6.368-23.91,1.398-26-9.687-0.01-6.309,7.22-7.495,11.99-5.934,14.45,1.712,32.63,0.347,40.15-14.168,3.7-5.896,8.34-11.595,14.52-14.992-8.51,0.477-19.01-1.66-25.5,5.031-3.06,8.199-4.75,19.917-15.32,21.557-9.79,3.02-23.68,0.004-26.97-10.776-0.93-7.347,5.88-11.959,11.85-14.374-0.02,4.961,3.88,14.356,10,10.812,4.92-11.553-11.49-21.628-20.91-14.594-6.39,3.893-6.21,12.384-3.94,18.625-10.62-0.824-19.229-10.229-18.496-20.962-0.579-2.052,0.503-7.623-0.936-1.788z" transform="translate(10, 2694.136663999999) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
- <path id="advanced-f09-ja.svgpath1920" stroke-linejoin="miter" d="M125.31,44.211zm10.53,4.531zm39.32-0.062c-6-0.419-11.66,3.641-12.05,9.777,0.03,2.449-6.31,10.556-1.99,7.473,6.83-4.129,9.69-11.85,15.13-17.313-0.33,0.019-1.06,0.061-1.09,0.063zm-75.41,8.593c1.37,11.282,7.67,22.743,18.47,27.344-2.98-4.866-0.67-11.372,3.59-14.094-2.91-5.523-8.48-6.492-13.9-8.093-2.59,0.074-8.4-7.928-8.16-5.157zm64,26.031c-2.77,0.747-13.16,5.474-9.36,6.386,10.87,0.475,17.91,12.25,28.99,11.02,7.13-4.985-0.85-14.641-7.14-16.048-3.88-1.725-8.32-1.952-12.49-1.358z" transform="translate(10, 2694.136663999999) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
- <rect id="d0e474" display="none" height="1000px" width="288" y="2839.5" x="10"/>
+ <path id="advanced-f09-ja.svgpath1893" stroke-linejoin="miter" d="M115.81,90.263c-16.592-6.213-24.464-26.139-22.243-43.098,1.074-8.205,2.889-17.007,6.823-23.669,2.32-3.927,0.06,6.387-0.16,8.347-0.913,8.042-0.666,17.609,6.23,23.314,3.44,2.848,8.32,3.345,6.88-2.814-2.18-9.364,10.91-16.85,20.11-13.934,7.11,2.251,12.73,9.419,10.97,16.948-1.91,8.158-11.61,4.751-13.16-2.785-1.53-7.452-10.93,1.693-9.85,7.286,1.47,7.682,9.57,9.514,16.01,10.234,7.97,0.892,18.69-2.911,19.6-11.738,0.73-7.13,3.81-14.344,11.82-15.244,9.37-1.054,19.57-0.877,33.29-0.178-15.92,0-23.98,10.502-28.31,19.012-4,7.872-13.27,12.644-21.56,13.805-10.35,1.451-24.13-0.786-30.18-0.786,0,10.718,9.09,15.684,16.62,15.406,6.95-0.257,11.57-8.682,18.44-11.491,8.52-3.478,18.52-3.25,26.14,2.201,6.04,4.319,12.03,12.117,8.66,19.641-3.36,7.5-13.9,8.71-20.32,3.87-5.83-4.39-12.21-9.159-20.21-9.12-7.06,0.034-11.04,2.496-12.62,10.32-2.53-6.862-7.05-9.815-22.98-15.527z" sodipodi:nodetypes="csssssssssssscsscsssssscs" transform="translate(10, 2722.282835) " stroke="#ff0100" stroke-linecap="butt" stroke-width="0.67500001" fill="none"/>
+ <path id="advanced-f09-ja.svgpath1895" stroke-linejoin="miter" d="M99.5,21.398c-6.586,11.012-8.859,24.639-7.854,37.357,1.466,15.945,12.324,30.921,28.104,35.206,8.4,2.59,16.35,7.479,19.15,16.289,2.3-2.14,2.23-11.427,8.32-12.289,10.68-2.682,18.68,5.939,27.26,10.389,9.5,4.43,22.72-3.64,20.13-14.65-3.68-15.148-22.17-22.946-36.23-17.278-9.17,2.095-14.34,15.051-24.91,11.226-4.16-0.301-12.23-9.472-7.13-10.39,15.56,1.307,34.08,3.251,45.78-9.434,5.96-8.402,10.84-19.432,22.1-21.742,3.95-0.623,17.73-2.335,7.97-5.152-12.56-0.04-25.68-1.842-37.9,1.432-8.52,3.359-7.75,13.674-11.23,20.474-7.16,7.412-21.56,7.107-28.43-0.395-2.97-3.595,0.1-9.54,4.12-10.511,0.97,6.962,10.4,14.117,16,7.406,7.64-12.42-8.42-27.667-21.09-22.691-8.19,1.747-14.36,9.935-12.19,18.285-9.12-1.845-10.22-14.061-9.32-21.897-0.38-4.288,3.98-10.872-1.46-13.103-0.21,0.259-1.004,1.238-1.19,1.468z" transform="translate(10, 2722.282835) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
+ <path id="advanced-f09-ja.svgpath1898" stroke-linejoin="miter" d="M100.16,15.711c-5.356,2.722-6.771,10.347-9.254,15.553-7.122,20.678-3.885,47.792,15.684,60.581,8.9,7.048,22.79,6.875,28.03,18.395,2.06,6.4,4.1,12.41,7.3,3.16,2.69-4.79,3.35-13.578,11.02-11.75,11.52,2.43,20.79,15.65,33.52,10.87,12.27-3.22,16.17-19.864,7.73-28.907-4.81-6.463-12.31-11.053-20.28-12.277,7.45-8.27,12.17-21.683,25.23-22.073,4.67-0.474,9.69-2.146,11.7-6.802-6.6-8.811-18.34-4.86-27.62-5.957-10.39,0.067-24.54-0.338-29.28,11.105-2.2,4.623-2,10.543-6.03,14.133,7.87-11.785-2.75-27.82-15.76-29.513-10.11-2.066-21.56,4.455-24.34,14.513-4.72-8.621,1.66-18.924-1.87-27.5-1.37-1.772-3.46-3.78-5.78-3.531zm28.72,44.906zm9.21,21.5c7.66-0.952,1.67,2.774-2.56,1.813-7.88-2.432-2.69-2.467,2.56-1.813z" transform="translate(10, 2722.282835) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
+ <path id="advanced-f09-ja.svgpath1903" stroke-linejoin="miter" d="M98.031,12.804c-9.98,7.226-12.053,20.853-13.978,32.201-2.927,22.271,8.396,47.031,30.167,55.285,8.35,3.22,17.24,8.44,19.09,17.95,2.7,6.12,12.4,2.94,12.27-3.38,0.73-6.17,8.01-12.22,13.11-6.21,10.17,5.66,23.73,13.35,34.52,4.62,13.25-8.52,11.13-30.146-1.94-37.963-2.45-4.196-14.46-4.585-7.97-9.941,4.82-7.411,12.6-12.878,21.5-13.479,4.57-1.449,10.59-6.184,10.55-10.684-9.87-12.008-27.11-8.123-40.73-8.43-8.4,0.451-17.03,2.889-22.59,9.625-7.2-13.726-26.6-18.649-39.15-9.291-4.77,2.404-0.35-9.067-2.63-12.427-1.14-5.133-6.72-11.096-12.219-7.876z" transform="translate(10, 2722.282835) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
+ <path id="advanced-f09-ja.svgpath1910" stroke-linejoin="miter" d="M99.031,0.2108c-17.313,5.1828-24.393,24.397-26.031,40.813-5.497,29.384,12.02,61.126,39.91,71.936,9.98,4.59,11.89,20.45,24.75,20.31,7.83-0.32,15.77-4.71,18.87-12.12,14.37,9.2,36.37,11.52,48.34-2.79,13.77-14.31,10.55-40.309-5.34-51.743,10.82-4.484,25.06-9.135,27.32-22.432,1.6-12.408-11.82-19.936-22.4-21.839-14.93-3.29-30.59-1.818-45.36,1.396-5.92,5.486-11.16-3.336-16.97-4.594-6.57-2.293-13.69-3.286-20.56-1.781-2.55-9.8036-11.94-18.42-22.529-17.156z" transform="translate(10, 2722.282835) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
+ <path id="advanced-f09-ja.svgpath1913" stroke-linejoin="miter" d="M97.188,38.023c-4.586,17.702-0.396,40.201,17.092,49.215,8.22,4.204,18.47,6.131,24.16,14.032,3.96-10.464,17.83-8.989,25.57-3.873,7,3.803,16.33,12.483,23.86,4.993,7.32-7.288-1.5-17.853-8.75-21.07-11.11-5.697-24.48-0.993-32.37,7.953-9.04,6.368-23.91,1.398-26-9.687-0.01-6.309,7.22-7.495,11.99-5.934,14.45,1.712,32.63,0.347,40.15-14.168,3.7-5.896,8.34-11.595,14.52-14.992-8.51,0.477-19.01-1.66-25.5,5.031-3.06,8.199-4.75,19.917-15.32,21.557-9.79,3.02-23.68,0.004-26.97-10.776-0.93-7.347,5.88-11.959,11.85-14.374-0.02,4.961,3.88,14.356,10,10.812,4.92-11.553-11.49-21.628-20.91-14.594-6.39,3.893-6.21,12.384-3.94,18.625-10.62-0.824-19.229-10.229-18.496-20.962-0.579-2.052,0.503-7.623-0.936-1.788z" transform="translate(10, 2722.282835) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
+ <path id="advanced-f09-ja.svgpath1920" stroke-linejoin="miter" d="M125.31,44.211zm10.53,4.531zm39.32-0.062c-6-0.419-11.66,3.641-12.05,9.777,0.03,2.449-6.31,10.556-1.99,7.473,6.83-4.129,9.69-11.85,15.13-17.313-0.33,0.019-1.06,0.061-1.09,0.063zm-75.41,8.593c1.37,11.282,7.67,22.743,18.47,27.344-2.98-4.866-0.67-11.372,3.59-14.094-2.91-5.523-8.48-6.492-13.9-8.093-2.59,0.074-8.4-7.928-8.16-5.157zm64,26.031c-2.77,0.747-13.16,5.474-9.36,6.386,10.87,0.475,17.91,12.25,28.99,11.02,7.13-4.985-0.85-14.641-7.14-16.048-3.88-1.725-8.32-1.952-12.49-1.358z" transform="translate(10, 2722.282835) " stroke="#000" stroke-linecap="butt" stroke-width="0.17500000" fill="none"/>
+ <rect id="d0e474" display="none" height="1000px" width="288" y="2867.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e474"/>
</flowRegion>
<flowDiv xml:space="preserve">普通の<flowSpan font-family="sans serif">インセット</flowSpan>と<flowSpan font-family="sans serif">アウトセット</flowSpan>コマンドはパスを生成します (元のオブジェクトがパスになっていない場合にはパスに変換する)。ときには、<flowSpan font-family="sans serif">ダイナミックオフセット</flowSpan> (<flowSpan font-weight="bold">Ctrl+J</flowSpan>) が便利です。ダイナミックオフセットはオフセットの距離を制御するためのドラッグできるハンドル (シェイプのハンドルに似ている) を備えたオブジェクトを作ります。下のオブジェクトを選択し、ノードツールに切り替えハンドルをドラッグして理解してみましょう:</flowDiv>
</flowRoot>
- <path id="advanced-f10-ja.svgpath1527" sodipodi:type="inkscape:offset" d="M101,3463c-0.1,0.1-0.13,0.1-0.28,0.4-3.882,6.6-5.68,15.3-6.751,23.5-2.2,16.8,5.598,36.6,21.971,42.7,7.97,2.9,13.1,5,16.59,7.4,3.12,2.1,4.89,4.3,6.16,7.3,0.83-3.4,2.14-5.7,4.09-7.2,2.17-1.7,5.05-2.3,8.63-2.3,8.16-0.1,14.64,4.8,20.47,9.2,3.11,2.3,7.24,3.2,11,2.6,3.75-0.6,7.06-2.7,8.68-6.4,1.63-3.6,1.01-7.3-0.78-10.6-1.79-3.4-4.74-6.4-7.72-8.5-7.49-5.4-17.33-5.6-25.75-2.2-3.34,1.4-6.19,4.2-9.09,6.7s-5.9,4.7-9.53,4.9c-3.86,0.1-8.09-1.1-11.38-3.7s-5.62-6.7-5.62-12.1c-0.01-0.2,0.04-0.3,0.11-0.3,0.08-0.1,0.19-0.2,0.29-0.2,3.08,0,8.03,0.6,13.5,1,5.48,0.4,11.47,0.5,16.6-0.2,8.18-1.1,17.36-5.9,21.28-13.6,3.78-7.4,10.44-16.4,22.65-18.6-10.72-0.5-19.35-0.5-27.24,0.4-3.9,0.5-6.54,2.4-8.35,5.1s-2.73,6.3-3.09,9.8c-0.47,4.6-3.5,7.8-7.38,9.8s-8.62,2.7-12.68,2.3c-3.24-0.4-6.92-1-10-2.6-3.09-1.5-5.59-4-6.35-8-0.29-1.5,0.1-3.2,0.88-4.8,0.77-1.5,1.94-3,3.18-4.1,1.25-1.1,2.59-1.8,3.85-1.6,0.63,0,1.22,0.3,1.68,0.8,0.47,0.6,0.8,1.3,1,2.3,0.75,3.6,3.5,6.2,6.19,7,1.35,0.3,2.66,0.2,3.75-0.4,1.1-0.7,2.01-1.9,2.47-3.8,1.71-7.3-3.75-14.3-10.69-16.5-4.46-1.4-9.94-0.3-14,2.3s-6.67,6.6-5.62,11.1c0.37,1.6,0.35,2.8,0,3.7s-1.07,1.5-1.91,1.6c-1.68,0.3-3.81-0.6-5.59-2-7.058-5.9-7.324-15.6-6.408-23.7,0.105-0.9,0.618-3.4,0.938-5.5,0.16-1.1,0.27-2.1,0.28-2.7,0-0.2-0.02-0.2-0.03-0.3z" inkscape:original="M 101.062500 3462.343750 C 100.902800 3462.433706 100.664673 3462.696654 100.375000 3463.187500 C 96.443695 3469.848900 94.636933 3478.639228 93.562500 3486.843750 C 91.341517 3503.803250 99.219050 3523.756139 115.812500 3529.968750 C 131.737740 3535.680450 136.252411 3538.608005 138.781250 3545.468750 C 140.362240 3537.645750 144.344522 3535.190852 151.406250 3535.156250 C 159.407750 3535.117050 165.798568 3539.886947 171.625000 3544.281250 C 178.046330 3549.124050 188.581246 3547.905311 191.937500 3540.406250 C 195.306020 3532.879850 189.320260 3525.100477 183.281250 3520.781250 C 175.660410 3515.330450 165.675465 3515.083811 157.156250 3518.562500 C 150.278600 3521.370800 145.642062 3529.805821 138.687500 3530.062500 C 131.155160 3530.340700 122.093750 3525.373600 122.093750 3514.656250 C 128.141300 3514.656250 141.893013 3516.888394 152.250000 3515.437500 C 160.536040 3514.276700 169.810637 3509.496825 173.812500 3501.625000 C 178.138690 3493.115200 186.199125 3482.625044 202.125000 3482.625000 C 188.399600 3481.926200 178.222058 3481.757977 168.843750 3482.812500 C 160.838550 3483.712600 157.759946 3490.932125 157.031250 3498.062500 C 156.129180 3506.889400 145.382449 3510.673326 137.406250 3509.781250 C 130.968270 3509.061350 122.881979 3507.244175 121.406250 3499.562500 C 120.331690 3493.969000 129.715916 3484.797919 131.250000 3492.250000 C 132.801250 3499.785400 142.499525 3503.219907 144.406250 3495.062500 C 146.166030 3487.533600 140.576047 3480.344687 133.468750 3478.093750 C 124.261060 3475.177750 111.161820 3482.666917 113.343750 3492.031250 C 114.778810 3498.190350 109.910481 3497.692485 106.468750 3494.843750 C 99.576199 3489.138750 99.307060 3479.573461 100.218750 3471.531250 C 100.413140 3469.816425 102.180400 3461.714057 101.062500 3462.343750 z " transform="translate(10, 2919.651235999999) translate(0.000000,-3462.662)" stroke="#ff0100" inkscape:radius="-0.39687219" stroke-width="0.67500001" fill="none"/>
- <rect id="d0e499" display="none" height="1000px" width="288" y="3016.1" x="10"/>
+ <path id="advanced-f10-ja.svgpath1527" sodipodi:type="inkscape:offset" d="M101,3463c-0.1,0.1-0.13,0.1-0.28,0.4-3.882,6.6-5.68,15.3-6.751,23.5-2.2,16.8,5.598,36.6,21.971,42.7,7.97,2.9,13.1,5,16.59,7.4,3.12,2.1,4.89,4.3,6.16,7.3,0.83-3.4,2.14-5.7,4.09-7.2,2.17-1.7,5.05-2.3,8.63-2.3,8.16-0.1,14.64,4.8,20.47,9.2,3.11,2.3,7.24,3.2,11,2.6,3.75-0.6,7.06-2.7,8.68-6.4,1.63-3.6,1.01-7.3-0.78-10.6-1.79-3.4-4.74-6.4-7.72-8.5-7.49-5.4-17.33-5.6-25.75-2.2-3.34,1.4-6.19,4.2-9.09,6.7s-5.9,4.7-9.53,4.9c-3.86,0.1-8.09-1.1-11.38-3.7s-5.62-6.7-5.62-12.1c-0.01-0.2,0.04-0.3,0.11-0.3,0.08-0.1,0.19-0.2,0.29-0.2,3.08,0,8.03,0.6,13.5,1,5.48,0.4,11.47,0.5,16.6-0.2,8.18-1.1,17.36-5.9,21.28-13.6,3.78-7.4,10.44-16.4,22.65-18.6-10.72-0.5-19.35-0.5-27.24,0.4-3.9,0.5-6.54,2.4-8.35,5.1s-2.73,6.3-3.09,9.8c-0.47,4.6-3.5,7.8-7.38,9.8s-8.62,2.7-12.68,2.3c-3.24-0.4-6.92-1-10-2.6-3.09-1.5-5.59-4-6.35-8-0.29-1.5,0.1-3.2,0.88-4.8,0.77-1.5,1.94-3,3.18-4.1,1.25-1.1,2.59-1.8,3.85-1.6,0.63,0,1.22,0.3,1.68,0.8,0.47,0.6,0.8,1.3,1,2.3,0.75,3.6,3.5,6.2,6.19,7,1.35,0.3,2.66,0.2,3.75-0.4,1.1-0.7,2.01-1.9,2.47-3.8,1.71-7.3-3.75-14.3-10.69-16.5-4.46-1.4-9.94-0.3-14,2.3s-6.67,6.6-5.62,11.1c0.37,1.6,0.35,2.8,0,3.7s-1.07,1.5-1.91,1.6c-1.68,0.3-3.81-0.6-5.59-2-7.058-5.9-7.324-15.6-6.408-23.7,0.105-0.9,0.618-3.4,0.938-5.5,0.16-1.1,0.27-2.1,0.28-2.7,0-0.2-0.02-0.2-0.03-0.3z" inkscape:original="M 101.062500 3462.343750 C 100.902800 3462.433706 100.664673 3462.696654 100.375000 3463.187500 C 96.443695 3469.848900 94.636933 3478.639228 93.562500 3486.843750 C 91.341517 3503.803250 99.219050 3523.756139 115.812500 3529.968750 C 131.737740 3535.680450 136.252411 3538.608005 138.781250 3545.468750 C 140.362240 3537.645750 144.344522 3535.190852 151.406250 3535.156250 C 159.407750 3535.117050 165.798568 3539.886947 171.625000 3544.281250 C 178.046330 3549.124050 188.581246 3547.905311 191.937500 3540.406250 C 195.306020 3532.879850 189.320260 3525.100477 183.281250 3520.781250 C 175.660410 3515.330450 165.675465 3515.083811 157.156250 3518.562500 C 150.278600 3521.370800 145.642062 3529.805821 138.687500 3530.062500 C 131.155160 3530.340700 122.093750 3525.373600 122.093750 3514.656250 C 128.141300 3514.656250 141.893013 3516.888394 152.250000 3515.437500 C 160.536040 3514.276700 169.810637 3509.496825 173.812500 3501.625000 C 178.138690 3493.115200 186.199125 3482.625044 202.125000 3482.625000 C 188.399600 3481.926200 178.222058 3481.757977 168.843750 3482.812500 C 160.838550 3483.712600 157.759946 3490.932125 157.031250 3498.062500 C 156.129180 3506.889400 145.382449 3510.673326 137.406250 3509.781250 C 130.968270 3509.061350 122.881979 3507.244175 121.406250 3499.562500 C 120.331690 3493.969000 129.715916 3484.797919 131.250000 3492.250000 C 132.801250 3499.785400 142.499525 3503.219907 144.406250 3495.062500 C 146.166030 3487.533600 140.576047 3480.344687 133.468750 3478.093750 C 124.261060 3475.177750 111.161820 3482.666917 113.343750 3492.031250 C 114.778810 3498.190350 109.910481 3497.692485 106.468750 3494.843750 C 99.576199 3489.138750 99.307060 3479.573461 100.218750 3471.531250 C 100.413140 3469.816425 102.180400 3461.714057 101.062500 3462.343750 z " transform="translate(10, 2950.7522950000002) translate(0.000000,-3462.662)" stroke="#ff0100" inkscape:radius="-0.39687219" stroke-width="0.67500001" fill="none"/>
+ <rect id="d0e499" display="none" height="1000px" width="288" y="3047.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e499"/>
</flowRegion>
- <flowDiv xml:space="preserve">このすばらしい<flowSpan font-style="italic">ダイナミックオフセットオブジェクト</flowSpan>は元の形を覚えているので、何度オフセットの距離を変更しても形状が "なまる" ことがありません。変更可能な状態にしておく必要がなくなれば、このオフセットオブジェクトをいつでパスに変換することができます。</flowDiv>
+ <flowDiv xml:space="preserve">このすばらしい<flowSpan font-style="italic">ダイナミックオフセットオブジェクト</flowSpan>は元の形を覚えているので、何度オフセットの距離を変更しても形状が &quot;なまる&quot; ことがありません。変更可能な状態にしておく必要がなくなれば、このオフセットオブジェクトをいつでパスに変換することができます。</flowDiv>
</flowRoot>
- <rect id="d0e505" display="none" height="1000px" width="288" y="3066.2" x="10"/>
+ <rect id="d0e505" display="none" height="1000px" width="288" y="3098" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e505"/>
</flowRegion>
<flowDiv xml:space="preserve">さらにもっと便利なのは<flowSpan font-style="italic">リンクしたオフセット</flowSpan>です。これはダイナミックオフセットの変更に似ていますが、他の編集可能なパスに結合しています。1 つの元になるパスに対していくつでもリンクしたオフセットを作成できます。下の元になる赤いパスにはフィルなしの黒いストロークと、ストロークなしの黒いフィルがあります。</flowDiv>
</flowRoot>
- <rect id="d0e511" display="none" height="1000px" width="288" y="3126.9" x="10"/>
+ <rect id="d0e511" display="none" height="1000px" width="288" y="3159.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e511"/>
</flowRegion>
<flowDiv xml:space="preserve">赤いオブジェクトを選択してノード編集をしてみましょう。どのように両方のリンクしたオフセットが変化するか見てください。そして、オフセットオブジェクトを選択しオフセット値を変化させるハンドルをドラッグしてください。最後に、元のオブジェクトを変形したときに、リンクしているオブジェクトがどのように動いたか、どうやれば元のオブジェクトとの結合を切らさずにオフセットオブジェクトを独立して変形、移動できるかに注目してください。</flowDiv>
</flowRoot>
- <path id="advanced-f11-ja.svgpath1987" stroke-linejoin="miter" d="M115.81,73.567c-16.592-6.212-28.726-20.624-26.505-37.583,1.075-8.205,7.151-22.522,11.085-29.184,2.32-3.9267,0.06,6.3875-0.16,8.3465-0.913,8.043-0.666,17.609,6.23,23.314,3.44,2.849,8.32,3.346,6.88-2.813-2.18-9.365,10.91-16.851,20.11-13.935,7.11,2.251,12.73,9.42,10.97,16.949-1.91,8.157-11.61,4.75-13.16-2.785-1.53-7.452-10.93,1.692-9.85,7.286,1.47,7.681,9.57,9.513,16.01,10.233,7.97,0.892,18.69-2.911,19.6-11.738,0.73-7.13,3.81-14.343,11.82-15.243,9.37-1.055,19.57-0.877,33.29-0.179-15.92,0-23.98,10.502-28.31,19.012-4,7.872-13.27,12.644-21.56,13.805-10.35,1.451-24.13-0.785-30.18-0.785,0,10.717,9.09,15.683,16.62,15.405,6.95-0.257,11.57-8.682,18.44-11.49,8.52-3.479,18.52-3.25,26.14,2.201,6.04,4.319,12.03,12.116,8.66,19.643-3.36,7.499-13.9,8.711-20.32,3.868-5.83-4.395-12.21-9.16-20.21-9.121-7.06,0.035-11.04,2.496-12.62,10.319-2.53-6.861-7.05-9.814-22.98-15.526z" sodipodi:nodetypes="csssssssssssscsscsssssscs" transform="translate(10, 3206.3138689999982) " stroke="#ff0100" stroke-linecap="butt" stroke-width="0.67500001" fill="none"/>
- <path id="advanced-f11-ja.svgpath1988" sodipodi:type="inkscape:offset" d="M100.75,0.40625c-1,0.07921-1.912,0.36008-2.438,0.65625-2.625,1.4789-2.276,2.1032-2.75,2.9063-4.431,7.5092-10.464,21.227-11.781,31.281-2.613,19.956,11.65,36.638,30.059,43.531,0.03,0.011,0.07,0.021,0.1,0.031,7.83,2.81,12.63,4.936,15.28,6.719s3.33,2.837,4.31,5.5c0.86,2.355,3.18,3.849,5.68,3.652s4.56-2.035,5.04-4.495c0.63-3.132,1.45-4.184,2.19-4.75,0.73-0.567,2.11-1.049,5-1.063,5.77-0.028,11.03,3.618,16.84,8,4.56,3.44,10.22,4.601,15.56,3.719,5.35-0.883,10.67-4.148,13.19-9.782,2.48-5.544,1.41-11.469-0.97-15.937s-5.92-7.953-9.53-10.531c-3.93-2.812-8.31-4.433-12.81-5.125,1.99-2,3.72-4.293,5.06-6.938,3.9-7.665,9.87-15.937,23.34-15.937,3.09,0.077,5.65-2.357,5.72-5.438,0.08-3.08-2.35-5.641-5.43-5.718-13.82-0.704-24.29-0.926-34.19,0.187-5.57,0.626-10.07,3.848-12.66,7.75-2.58,3.902-3.67,8.303-4.09,12.469-0.23,2.265-1.51,3.769-4.16,5.125-0.49,0.25-1.13,0.332-1.69,0.531,2.1-1.654,3.59-4.107,4.22-6.812,2.54-10.842-5.13-20.507-14.68-23.532-6.64-2.103-13.58-0.519-19.04,3-4.02,2.594-7.47,6.876-8.34,11.906-2.38-4.009-2.7-9.648-2.03-15.531,0,0.042,0.55-2.913,0.91-5.281,0.17-1.184,0.32-2.2704,0.34-3.5312,0.01-0.6305,0.18-1.1861-0.38-2.75-0.27-0.782-0.81-2.2209-2.78-3.25-0.98-0.51458-2.09-0.64171-3.09-0.5625zm26.5,40.75c1.18,2.28,2.91,4.123,4.94,5.469-0.74-0.232-1.55-0.426-2.13-0.719-1.97-0.989-2.79-1.744-3.18-3.812,0.06,0.324,0.08-0.249,0.37-0.938zm2.69,23.25c1.94,0.159,2.99,0.22,5.25,0.375,2.72,0.187,5.59,0.328,8.5,0.344-2.33,1.917-4.06,2.957-5.22,3-2.46,0.091-5.41-0.767-7.44-2.375-0.46-0.365-0.71-0.917-1.09-1.344z" xlink:href="#advanced-f11-ja.svgpath1987" inkscape:original="M 101.06250 5.9375000 C 100.90280 6.0274518 100.66467 6.3216625 100.37500 6.8125000 C 96.443695 13.473900 90.386936 27.764251 89.312500 35.968750 C 87.091517 52.928250 99.219050 67.349902 115.81250 73.562500 C 131.73774 79.274200 136.25241 82.233048 138.78125 89.093750 C 140.36224 81.270750 144.34452 78.815750 151.40625 78.781250 C 159.40775 78.742050 165.79857 83.512051 171.62500 87.906250 C 178.04633 92.749050 188.58125 91.530346 191.93750 84.031250 C 195.30602 76.504850 189.32026 68.694301 183.28125 64.375000 C 175.66041 58.924200 165.67546 58.708900 157.15625 62.187500 C 150.27860 64.995800 145.64206 73.430703 138.68750 73.687500 C 131.15516 73.965700 122.09375 68.998651 122.09375 58.281250 C 128.14130 58.281250 141.89301 60.513399 152.25000 59.062500 C 160.53604 57.901700 169.81064 53.121899 173.81250 45.250000 C 178.13869 36.740200 186.19912 26.249999 202.12500 26.250000 C 188.39960 25.551200 178.22206 25.351749 168.84375 26.406250 C 160.83855 27.306350 157.75995 34.525849 157.03125 41.656250 C 156.12918 50.483150 145.38245 54.298251 137.40625 53.406250 C 130.96827 52.686350 122.88198 50.837949 121.40625 43.156250 C 120.33169 37.562750 129.71592 28.423000 131.25000 35.875000 C 132.80125 43.410400 142.49952 46.813750 144.40625 38.656250 C 146.16603 31.127350 140.57605 23.969650 133.46875 21.718750 C 124.26106 18.802750 111.16182 26.291850 113.34375 35.656250 C 114.77881 41.815350 109.91048 41.317451 106.46875 38.468750 C 99.576199 32.763750 99.307060 23.198550 100.21875 15.156250 C 100.41314 13.441425 102.18040 5.3078377 101.06250 5.9375000 z " transform="translate(10, 3206.3138689999982) translate(0.248731,0.263444)" stroke="#000" inkscape:href="#advanced-f11-ja.svgpath1987" inkscape:radius="5.5788722" stroke-width="0.67500001" fill="none"/>
- <path id="advanced-f11-ja.svgpath1989" sodipodi:type="inkscape:offset" d="M99.875,10.312c-3.751,7.194-8.534,18.916-9.437,25.813-2.141,16.342,9.562,30.303,25.782,36.375,7.99,2.865,13.15,5.017,16.75,7.438,2.68,1.805,4.28,3.929,5.56,6.312,0.88-2.615,2.05-4.799,3.81-6.156,2.36-1.808,5.4-2.451,9.07-2.469,8.46-0.041,15.07,4.978,20.9,9.375,2.93,2.212,6.89,3.055,10.44,2.469s6.62-2.545,8.13-5.907c1.52-3.396,0.96-6.81-0.76-10.031-1.71-3.22-4.6-6.145-7.5-8.219-7.24-5.182-16.81-5.416-25.03-2.062-3.15,1.286-5.98,3.976-8.9,6.5-2.93,2.524-6.04,4.949-9.97,5.094-4.04,0.149-8.43-1.104-11.88-3.844s-5.9-7.036-5.9-12.719c0-0.307,0.12-0.602,0.33-0.819,0.22-0.218,0.52-0.339,0.82-0.337,3.17,0,8.08,0.563,13.53,0.937,5.46,0.375,11.44,0.58,16.47-0.124,7.98-1.118,16.93-5.819,20.69-13.219,3.29-6.46,8.83-14.162,18.22-17.688-8.2-0.226-15.58-0.194-22.03,0.531-3.68,0.414-6.1,2.198-7.81,4.782-1.72,2.583-2.62,5.996-2.97,9.437-0.5,4.856-3.75,8.339-7.78,10.407-4.04,2.067-8.9,2.847-13.13,2.374-3.27-0.366-7.02-1.036-10.25-2.656-3.22-1.62-5.94-4.325-6.75-8.531-0.34-1.76,0.14-3.605,0.97-5.281,0.83-1.677,2.01-3.203,3.34-4.344,1.34-1.141,2.84-1.966,4.44-1.812,0.8,0.076,1.58,0.472,2.16,1.124,0.58,0.653,0.97,1.527,1.19,2.594,0.68,3.338,3.24,5.731,5.62,6.375,1.19,0.322,2.29,0.218,3.19-0.312,0.9-0.531,1.67-1.501,2.09-3.313,1.6-6.846-3.55-13.502-10.16-15.594-4.18-1.325-9.49-0.255-13.37,2.25-3.88,2.506-6.24,6.223-5.28,10.344,0.39,1.677,0.41,3.024-0.03,4.125-0.44,1.102-1.43,1.826-2.47,2.031-2.08,0.411-4.32-0.645-6.22-2.218-7.367-6.098-7.614-16.144-6.688-24.313,0.101-0.89,0.509-2.873,0.813-4.719z" fill-rule="evenodd" xlink:href="#advanced-f11-ja.svgpath1987" inkscape:original="M 101.06250 5.9375000 C 100.90280 6.0274518 100.66467 6.3216625 100.37500 6.8125000 C 96.443695 13.473900 90.386936 27.764251 89.312500 35.968750 C 87.091517 52.928250 99.219050 67.349902 115.81250 73.562500 C 131.73774 79.274200 136.25241 82.233048 138.78125 89.093750 C 140.36224 81.270750 144.34452 78.815750 151.40625 78.781250 C 159.40775 78.742050 165.79857 83.512051 171.62500 87.906250 C 178.04633 92.749050 188.58125 91.530346 191.93750 84.031250 C 195.30602 76.504850 189.32026 68.694301 183.28125 64.375000 C 175.66041 58.924200 165.67546 58.708900 157.15625 62.187500 C 150.27860 64.995800 145.64206 73.430703 138.68750 73.687500 C 131.15516 73.965700 122.09375 68.998651 122.09375 58.281250 C 128.14130 58.281250 141.89301 60.513399 152.25000 59.062500 C 160.53604 57.901700 169.81064 53.121899 173.81250 45.250000 C 178.13869 36.740200 186.19912 26.249999 202.12500 26.250000 C 188.39960 25.551200 178.22206 25.351749 168.84375 26.406250 C 160.83855 27.306350 157.75995 34.525849 157.03125 41.656250 C 156.12918 50.483150 145.38245 54.298251 137.40625 53.406250 C 130.96827 52.686350 122.88198 50.837949 121.40625 43.156250 C 120.33169 37.562750 129.71592 28.423000 131.25000 35.875000 C 132.80125 43.410400 142.49952 46.813750 144.40625 38.656250 C 146.16603 31.127350 140.57605 23.969650 133.46875 21.718750 C 124.26106 18.802750 111.16182 26.291850 113.34375 35.656250 C 114.77881 41.815350 109.91048 41.317451 106.46875 38.468750 C 99.576199 32.763750 99.307060 23.198550 100.21875 15.156250 C 100.41314 13.441425 102.18040 5.3078377 101.06250 5.9375000 z " transform="translate(10, 3206.3138689999982) matrix(0.393240,0.000000,0.000000,0.393240,199.7709,1.523830)" inkscape:href="#advanced-f11-ja.svgpath1987" inkscape:radius="-1.1492475" stroke-width="0.42500001"/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3327.7814689999987" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3327.7814689999987" x="10">簡略化</tspan>
+ <g id="advanced-f11-ja.svgg8809" xmlns:cc="http://creativecommons.org/ns#" transform="translate(10, 3238.882511) ">
+ <path id="advanced-f11-ja.svgpath1987" stroke-linejoin="miter" d="m113.67,73.853c-16.593-6.2126-28.727-20.624-26.506-37.584,1.0744-8.2045,7.151-22.522,11.082-29.183,2.3174-3.9267,0.06287,6.3871-0.15929,8.3469-0.91169,8.0423-0.66462,17.609,6.2279,23.314,3.4417,2.8487,8.3216,3.3459,6.8865-2.8132-2.1819-9.3644,10.903-16.851,20.11-13.935,7.1073,2.2509,12.728,9.4197,10.968,16.949-1.9067,8.1575-11.609,4.7505-13.16-2.7849-1.5341-7.452-10.93,1.6922-9.8554,7.2857,1.4757,7.6817,9.5717,9.5136,16.01,10.234,7.9762,0.892,18.699-2.9107,19.601-11.738,0.7287-7.1304,3.8134-14.344,11.819-15.244,9.3783-1.0545,19.572-0.8772,33.297-0.1784-15.926,0-23.984,10.502-28.311,19.012-4.0019,7.8719-13.273,12.644-21.559,13.805-10.357,1.4509-24.134-0.7852-30.181-0.7852,0,10.717,9.0837,15.683,16.616,15.405,6.9546-0.2568,11.568-8.6819,18.445-11.49,8.5192-3.4786,18.514-3.2501,26.134,2.2007,6.039,4.3193,12.03,12.117,8.6618,19.643-3.3562,7.4991-13.903,8.7109-20.324,3.8681-5.8264-4.3942-12.202-9.1596-20.204-9.1204-7.0617,0.0345-11.043,2.4957-12.624,10.319-2.5288-6.8607-7.0498-9.8139-22.975-15.526z" sodipodi:nodetypes="csssssssssssscsscsssssscs" inkscape:connector-curvature="0" stroke="#ff0100" stroke-linecap="butt" stroke-width="0.67500000999999998" fill="none"/>
+ <path id="advanced-f11-ja.svgpath1988" sodipodi:type="inkscape:offset" d="m98.562,0.78125c-0.98754,0.080502-1.8534,0.33118-2.375,0.625-2.4005,1.3521-2.2824,2.1356-2.7188,2.875-4.4256,7.4989-10.496,21.228-11.812,31.281-2.6107,19.935,11.668,36.582,30.062,43.469a5.5425,5.5425,0,0,0,0.0625,0.03125c7.8341,2.8098,12.648,4.9301,15.312,6.7188,2.6647,1.7887,3.3939,2.8382,4.375,5.5a5.5425,5.5425,0,0,0,10.625,-0.8125c0.63382-3.1363,1.4421-4.2082,2.1875-4.7812,0.74544-0.57309,2.1375-1.0796,5.0312-1.0938,5.7847-0.02834,10.995,3.6434,16.812,8.0312,4.5524,3.4333,10.229,4.5995,15.562,3.7188,5.3339-0.88076,10.641-4.1604,13.156-9.7812,2.4763-5.5328,1.4093-11.414-0.96875-15.875-2.378-4.4609-5.9308-7.9561-9.5312-10.531-3.9435-2.8206-8.331-4.4389-12.844-5.125,2.0148-2.0121,3.768-4.3307,5.125-7,3.9-7.671,9.89-15.969,23.38-15.969a5.5425,5.5425,0,0,0,0.28,-11.062c-13.811-0.70317-24.32-0.92557-34.219,0.1875-5.5591,0.62506-10.044,3.8239-12.625,7.7188-2.5812,3.8949-3.6371,8.3065-4.0625,12.469-0.23361,2.2859-1.5445,3.799-4.1875,5.1562-0.5351,0.2748-1.2306,0.38146-1.8438,0.59375,2.173-1.6459,3.6971-4.1709,4.3438-6.9375,2.53-10.834-5.16-20.451-14.69-23.469-6.6268-2.0987-13.583-0.51371-19.031,3-4.0336,2.6013-7.5012,6.8894-8.3438,11.938-2.415-4.0184-2.7029-9.669-2.0312-15.594-0.00075,0.0066,0.52695-2.92,0.875-5.2812,0.17402-1.1806,0.32827-2.273,0.34375-3.5312,0.008-0.62915,0.15286-1.1622-0.40625-2.7188-0.28-0.779-0.84-2.2133-2.79-3.2195-0.97-0.50311-2.07-0.61175-3.058-0.53125zm26.531,40.562c1.2096,2.3834,3.0313,4.2871,5.1562,5.6562-0.83131-0.24906-1.731-0.4586-2.375-0.78125-1.9855-0.99474-2.7893-1.7396-3.1875-3.8125,0.067,0.34873,0.008-0.25776,0.40625-1.0625zm2.5938,23.312c1.9742,0.16077,3.0414,0.21721,5.3438,0.375,2.7613,0.18924,5.6999,0.3312,8.6562,0.34375-2.3876,1.9941-4.1511,3.0185-5.3438,3.0625-2.4683,0.09116-5.4276-0.78931-7.4688-2.4062-0.48622-0.38518-0.78896-0.92091-1.1875-1.375z" xlink:href="#advanced-f11-ja.svgpath1987" inkscape:original="M 98.90625 6.25 C 98.74655 6.3399517 98.539672 6.6029125 98.25 7.09375 C 94.318695 13.75515 88.230687 28.07675 87.15625 36.28125 C 84.935267 53.24075 97.062806 67.63115 113.65625 73.84375 C 129.58149 79.55545 134.12741 82.5143 136.65625 89.375 C 138.23724 81.552 142.21952 79.097 149.28125 79.0625 C 157.28275 79.0233 163.64232 83.7933 169.46875 88.1875 C 175.89008 93.0303 186.425 91.8116 189.78125 84.3125 C 193.14977 76.7861 187.16401 68.97555 181.125 64.65625 C 173.50416 59.20545 163.51922 58.99015 155 62.46875 C 148.12235 65.27705 143.51706 73.71195 136.5625 73.96875 C 129.03016 74.24695 119.9375 69.2799 119.9375 58.5625 C 125.98505 58.5625 139.76801 60.79465 150.125 59.34375 C 158.41104 58.18295 167.68563 53.40315 171.6875 45.53125 C 176.01369 37.02145 184.07412 26.53125 200 26.53125 C 186.2746 25.83245 176.06581 25.633 166.6875 26.6875 C 158.6823 27.5876 155.6037 34.8071 154.875 41.9375 C 153.97293 50.7644 143.25745 54.5795 135.28125 53.6875 C 128.84327 52.9676 120.72573 51.1192 119.25 43.4375 C 118.17544 37.844 127.59091 28.70425 129.125 36.15625 C 130.67625 43.69165 140.37452 47.095 142.28125 38.9375 C 144.04103 31.4086 138.41979 24.2509 131.3125 22 C 122.10481 19.084 109.00557 26.5731 111.1875 35.9375 C 112.62256 42.0966 107.75423 41.5987 104.3125 38.75 C 97.419952 33.045 97.182061 23.4798 98.09375 15.4375 C 98.28814 13.722675 100.02415 5.6203379 98.90625 6.25 z " stroke="#000" inkscape:href="#advanced-f11-ja.svgpath1987" inkscape:radius="5.5419211" stroke-width="0.67500000999999998" fill="none"/>
+ <path id="advanced-f11-ja.svgpath1989" sodipodi:type="inkscape:offset" d="m97.719,14.656c-3.7525,7.2074-8.5372,18.906-9.4375,25.781-2.1384,16.329,9.5505,30.232,25.75,36.312,0.0131,0.0049,0.0182,0.02636,0.0312,0.03125,7.9637,2.8574,13.152,5.0224,16.75,7.4375,2.6896,1.8054,4.3093,3.9294,5.5938,6.3125,0.88173-2.6151,2.0476-4.7994,3.8125-6.1562,2.3518-1.808,5.3995-2.4509,9.0625-2.4688,8.4612-0.04145,15.047,4.9795,20.875,9.375,2.9324,2.2116,6.8881,3.0549,10.438,2.4688,3.5494-0.5861,6.6206-2.5448,8.125-5.9062,1.52-3.3962,0.96665-6.811-0.75-10.031-1.7166-3.2203-4.601-6.1453-7.5-8.2188-7.2461-5.1828-16.818-5.416-25.031-2.0625-3.1491,1.2859-5.957,3.9756-8.875,6.5s-6.0371,4.9486-9.9688,5.0938c-4.0353,0.14904-8.4169-1.1043-11.875-3.8438s-5.9375-7.035-5.9375-12.719a1.1494,1.1494,0,0,1,1.1562,-1.1562c3.1652,0,8.0964,0.5629,13.562,0.9375,5.4661,0.3746,11.44,0.5795,16.469-0.125,7.9735-1.117,16.926-5.8187,20.688-13.219,3.2842-6.4602,8.8316-14.162,18.219-17.688-8.2126-0.22588-15.607-0.19463-22.062,0.53125-3.6798,0.41376-6.1004,2.1978-7.8125,4.7812s-2.617,5.9961-2.9688,9.4375c-0.49612,4.8546-3.755,8.3386-7.7812,10.406-4.0262,2.0676-8.8693,2.8474-13.094,2.375-3.2739-0.36609-7.0484-1.0366-10.281-2.6562-3.2328-1.6196-5.9417-4.3238-6.75-8.5312-0.33824-1.7607,0.13908-3.6045,0.96875-5.2812,0.82967-1.6768,2.0355-3.2035,3.375-4.3438s2.8374-1.9659,4.4375-1.8125c0.80004,0.07669,1.5763,0.47274,2.1562,1.125,0.57992,0.65226,0.96765,1.5258,1.1875,2.5938,0.68714,3.3379,3.2442,5.7308,5.625,6.375,1.1904,0.32212,2.2898,0.21819,3.1875-0.3125s1.6702-1.5006,2.0938-3.3125c1.5996-6.8435-3.5825-13.502-10.188-15.594-4.1843-1.3251-9.4906-0.25509-13.375,2.25s-6.2415,6.2225-5.2812,10.344c0.39058,1.6763,0.40714,3.0234-0.0312,4.125-0.43839,1.1016-1.4277,1.8261-2.4688,2.0312-2.0822,0.4104-4.3182-0.64566-6.2188-2.2188-7.3686-6.099-7.5819-16.147-6.6562-24.312,0.09953-0.87798,0.48514-2.8307,0.78125-4.6562z" fill-rule="evenodd" xlink:href="#advanced-f11-ja.svgpath1987" inkscape:original="M 98.90625 6.25 C 98.74655 6.3399517 98.539672 6.6029125 98.25 7.09375 C 94.318695 13.75515 88.230687 28.07675 87.15625 36.28125 C 84.935267 53.24075 97.062806 67.63115 113.65625 73.84375 C 129.58149 79.55545 134.12741 82.5143 136.65625 89.375 C 138.23724 81.552 142.21952 79.097 149.28125 79.0625 C 157.28275 79.0233 163.64232 83.7933 169.46875 88.1875 C 175.89008 93.0303 186.425 91.8116 189.78125 84.3125 C 193.14977 76.7861 187.16401 68.97555 181.125 64.65625 C 173.50416 59.20545 163.51922 58.99015 155 62.46875 C 148.12235 65.27705 143.51706 73.71195 136.5625 73.96875 C 129.03016 74.24695 119.9375 69.2799 119.9375 58.5625 C 125.98505 58.5625 139.76801 60.79465 150.125 59.34375 C 158.41104 58.18295 167.68563 53.40315 171.6875 45.53125 C 176.01369 37.02145 184.07412 26.53125 200 26.53125 C 186.2746 25.83245 176.06581 25.633 166.6875 26.6875 C 158.6823 27.5876 155.6037 34.8071 154.875 41.9375 C 153.97293 50.7644 143.25745 54.5795 135.28125 53.6875 C 128.84327 52.9676 120.72573 51.1192 119.25 43.4375 C 118.17544 37.844 127.59091 28.70425 129.125 36.15625 C 130.67625 43.69165 140.37452 47.095 142.28125 38.9375 C 144.04103 31.4086 138.41979 24.2509 131.3125 22 C 122.10481 19.084 109.00557 26.5731 111.1875 35.9375 C 112.62256 42.0966 107.75423 41.5987 104.3125 38.75 C 97.419952 33.045 97.182061 23.4798 98.09375 15.4375 C 98.28814 13.722675 100.02415 5.6203379 98.90625 6.25 z " transform="matrix(0.39324,0,0,0.39324,199.7709,1.52383)" inkscape:href="#advanced-f11-ja.svgpath1987" inkscape:radius="-1.1492475" stroke-width="0.42500000999999998"/>
+ </g>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3360.226078" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="3360.226078" x="10">簡略化</tspan>
</text>
- <rect id="d0e530" display="none" height="1000px" width="288" y="3333" x="10"/>
+ <rect id="d0e530" display="none" height="1000px" width="288" y="3365.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e530"/>
</flowRegion>
<flowDiv xml:space="preserve"><flowSpan font-family="sans serif">パスの簡略化</flowSpan>コマンドの (<flowSpan font-weight="bold">Ctrl+L</flowSpan>) の主な利用方法は、形状を<flowSpan font-style="italic">ほぼ</flowSpan>維持しつつパスのノード数を減らすことです。これは鉛筆ツールで作成したパスに有効です。なぜなら鉛筆ツールは時に必要以上のノードを生成するからです。下の左のシェイプはフリーハンドツールで作成したもの、右のパスは左のパスをコピーして簡略化したものです。元のパスは 28 ノードありますが、簡略化した方は 17 ノードでより滑らかになっています (これはノードツールでの作業が楽になることを意味しています)。</flowDiv>
</flowRoot>
- <path id="advanced-f12-ja.svgpath2511" d="M65.491,41.902c-0.166-1.366-0.723-7.872-1.13-10.17,0.135-2.902-0.092-6.623-0.376-9.793-0.744-4.076-0.188-7.743,0-12.053,2.061-4.2646,3.993-6.8304,6.779-9.4163,4.693,1.1534,5.894,2.56,6.78,7.1564,1.088,3.7598,0.989,7.7008,0.753,12.053,0,4.002-0.005,5.616,2.26,8.663,5.424,0.469,6.295-0.011,8.287-4.896,1.905-3.313,2.552-6.93,3.766-10.547,3.167-2.269,5.884-3.0937,9.42-4.5195,4.76-1.225,7.7-0.0601,10.92,2.2595,1.74,4.915,2.85,8.223,0.38,12.43-1.73,2.325-4.19,4.017-7.16,5.65-2.22,1.406-5.2,2.924-7.533,4.52-3.678,0.481-3.862,3.5-2.26,6.403,2.547,1.451,5.733,0.568,7.533-1.884,3.49-1.674,5-3.198,9.42-3.389,3.8,0.547,6.04,1.173,8.28,3.013,2.4,3.464,3.26,5.675,4.15,8.663-1.81,2.519-2.95,3.868-5.65,5.65-3.43,0-6.87,0.034-10.17-0.377-3.1-0.32-5.74-1.125-8.67-1.507-4.152,0-8.073,0.208-12.05,0.754-2.662,0.056-3.615,0.344-6.403,0.376-2.371,0.155-4.714,0.521-6.026,0.754-2.937-0.026-5.542-0.531-5.65-0.754-2.119,0.044-3.899,0.058-4.143,0.377" transform="translate(10, 3423.1030679999985) " stroke="#000" stroke-width="0.75127902pt" fill="none"/>
- <path id="advanced-f12-ja.svgpath2525" d="M171.97,41.902c-0.87-10.337-2.38-20.746-1.38-31.119,0.98-3.9093,3.01-8.0876,6.96-9.6974,4.69-0.4192,6.76,4.9465,7.14,8.7906,0.73,5.6198-0.93,11.53,1.28,16.937,2.74,3.423,8.29,1.043,9.56-2.588,1.71-4.439,1.84-10.153,6.21-13.01,4.72-2.666,11.1-4.9244,16.05-1.5361,5.8,4.6361,3.82,14.881-2.82,17.711-4.03,2.859-9.11,4.268-12.62,7.787-1.83,4.484,5.59,7.277,7.71,3.141,4.26-3.722,10.89-5.473,15.92-2.217,3.94,2.248,7.12,7.464,4.85,11.89-2.56,4.105-8.09,4.283-12.37,3.53-6.49-1.002-13.05-2.329-19.63-1.397-7.75,0.632-15.57,2.16-23.34,0.845-0.68,0.009-1.37,0.108-2.01,0.349" transform="translate(10, 3423.1030679999985) " stroke="#000" stroke-width="0.75127902pt" fill="none"/>
- <rect id="d0e551" display="none" height="1000px" width="288" y="3487.4" x="10"/>
+ <path id="advanced-f12-ja.svgpath2511" d="M65.491,41.902c-0.166-1.366-0.723-7.872-1.13-10.17,0.135-2.902-0.092-6.623-0.376-9.793-0.744-4.076-0.188-7.743,0-12.053,2.061-4.2646,3.993-6.8304,6.779-9.4163,4.693,1.1534,5.894,2.56,6.78,7.1564,1.088,3.7598,0.989,7.7008,0.753,12.053,0,4.002-0.005,5.616,2.26,8.663,5.424,0.469,6.295-0.011,8.287-4.896,1.905-3.313,2.552-6.93,3.766-10.547,3.167-2.269,5.884-3.0937,9.42-4.5195,4.76-1.225,7.7-0.0601,10.92,2.2595,1.74,4.915,2.85,8.223,0.38,12.43-1.73,2.325-4.19,4.017-7.16,5.65-2.22,1.406-5.2,2.924-7.533,4.52-3.678,0.481-3.862,3.5-2.26,6.403,2.547,1.451,5.733,0.568,7.533-1.884,3.49-1.674,5-3.198,9.42-3.389,3.8,0.547,6.04,1.173,8.28,3.013,2.4,3.464,3.26,5.675,4.15,8.663-1.81,2.519-2.95,3.868-5.65,5.65-3.43,0-6.87,0.034-10.17-0.377-3.1-0.32-5.74-1.125-8.67-1.507-4.152,0-8.073,0.208-12.05,0.754-2.662,0.056-3.615,0.344-6.403,0.376-2.371,0.155-4.714,0.521-6.026,0.754-2.937-0.026-5.542-0.531-5.65-0.754-2.119,0.044-3.899,0.058-4.143,0.377" transform="translate(10, 3457.654956) " stroke="#000" stroke-width="0.75127902pt" fill="none"/>
+ <path id="advanced-f12-ja.svgpath2525" d="M171.97,41.902c-0.87-10.337-2.38-20.746-1.38-31.119,0.98-3.9093,3.01-8.0876,6.96-9.6974,4.69-0.4192,6.76,4.9465,7.14,8.7906,0.73,5.6198-0.93,11.53,1.28,16.937,2.74,3.423,8.29,1.043,9.56-2.588,1.71-4.439,1.84-10.153,6.21-13.01,4.72-2.666,11.1-4.9244,16.05-1.5361,5.8,4.6361,3.82,14.881-2.82,17.711-4.03,2.859-9.11,4.268-12.62,7.787-1.83,4.484,5.59,7.277,7.71,3.141,4.26-3.722,10.89-5.473,15.92-2.217,3.94,2.248,7.12,7.464,4.85,11.89-2.56,4.105-8.09,4.283-12.37,3.53-6.49-1.002-13.05-2.329-19.63-1.397-7.75,0.632-15.57,2.16-23.34,0.845-0.68,0.009-1.37,0.108-2.01,0.349" transform="translate(10, 3457.654956) " stroke="#000" stroke-width="0.75127902pt" fill="none"/>
+ <rect id="d0e551" display="none" height="1000px" width="288" y="3522" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e551"/>
</flowRegion>
<flowDiv xml:space="preserve">簡略化の度合い (<flowSpan font-style="italic">しきい値</flowSpan>と呼ばれる) は選択オブジェクトの大きさに依存します。つまり、もし大きいオブジェクトに沿ったパスを選択したら、それは一つのパスを選択した場合より積極的に簡略化しなくてはならないと言うことです。さらに、<flowSpan font-family="sans serif">簡略化</flowSpan>コマンドは<flowSpan font-style="italic">加速</flowSpan>します。 もし <flowSpan font-weight="bold">Ctrl+L</flowSpan> を何回も連続して押したら (各呼び出しの間隔が 0.5 秒以内になるくらい)、しきい値は呼び出しごとに大きくなります (一度休んだあとに次の呼び出しをするとしきい値は既定の値にもどります)。加速することで、個々の場合に応じて必要な量の簡略化を簡単に適用できます。</flowDiv>
</flowRoot>
- <rect id="d0e566" display="none" height="1000px" width="288" y="3580.9" x="10"/>
+ <rect id="d0e566" display="none" height="1000px" width="288" y="3617.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e566"/>
</flowRegion>
<flowDiv xml:space="preserve">フリーハンド曲線を滑らかにする他に、<flowSpan font-family="sans serif">簡略化</flowSpan>は様々な創造的効果として使うことができます。しばしば、ある程度の簡略化は硬い幾何学的な元のシェイプの角をなめらかすることで自然な歪みを加え、生物的な印象を生み出す効果を与えます。ときにそれはスタイリッシュであり、ときにそれは面白みを帯びます。ここにクリップアートのシェイプを<flowSpan font-family="sans serif">簡略化</flowSpan>に見た目がよくなった例があります:</flowDiv>
</flowRoot>
- <text id="advanced-f13-ja.svgtext2796" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3660.2575349999984) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="43.765549" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-ja.svgtspan2797" y="4.2366295" x="43.765549" role="line">オリジナル</tspan></text>
- <text id="advanced-f13-ja.svgtext2799" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3660.2575349999984) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="125.61612" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-ja.svgtspan2800" y="4.2366295" x="125.61612" role="line">少し簡略化</tspan></text>
- <text id="advanced-f13-ja.svgtext2802" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3660.2575349999984) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="213.13528" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-ja.svgtspan2803" y="4.2366295" x="213.13528" role="line">積極的に簡略化</tspan></text>
- <path id="advanced-f13-ja.svgpath2786" d="M97.048,92.194l0.322,9.646-1.286,4.07-1.608,0.64v3.86l-0.964-0.1,0.214,4.82-1.715,0.21-0.857,10.61,6.537,4.18-1.714,2.68-10.717-1.93-10.395,1.93-1.715-2.68,5.251-3.32-5.787-1.18-11.253,2.36v-1.39l7.074-5.36-1.929-18.86c-1.215-0.22-2.394-0.54-3.537-0.97l-1.5-16.075-2.572-0.428-1.179-3.323-0.965,0.215-2.465,33.011-2.036,0.53,9.109,5.9-1.178,3-14.79-3.22-6.001,1.4-0.429,4.71,5.466,4.93c-0.286,0.29-0.464,0.68-0.536,1.18-0.071,0.5-0.286,0.75-0.643,0.75-0.214,0-0.357-0.04-0.429-0.11l-9.216-1.61-9.859,1.72-0.858-1.93,5.466-4.71-1.179-12.22h-1.393c-0.143-1.22-0.25-2.43-0.322-3.65-0.071-1.14-0.143-2.32-0.214-3.53l-1.179-0.86-2.25-4.07,0.643-11.79h-1.286l1.286-7.716c0.285-0.858,0.714-1.501,1.286-1.93,0.643-0.428,1.321-0.749,2.036-0.964,0.786-0.214,1.572-0.393,2.357-0.536,0.858-0.143,1.644-0.357,2.358-0.643l0.536,2.358-5.787,1.393c-0.429,0.357-0.643,0.786-0.643,1.286l-0.857,4.394h2.572v-1.607h2.143v6.322h10.288v-6.322h2.143v1.607h2.572l-0.964-4.715c-0.071-0.358-0.214-0.608-0.429-0.751-0.143-0.142-0.286-0.285-0.428-0.428l-5.895-1.394,0.643-2.143,6.216,1.715c0.572,0.286,1.108,0.786,1.608,1.5v-6.966c-0.358,0.572-0.858,1.072-1.501,1.5-0.643,0.358-1.321,0.644-2.036,0.858-0.286-1.143-0.429-2.25-0.429-3.322v-1.286c0-0.5,0.072-1.072,0.215-1.715,0-0.714-0.179-1.143-0.536-1.286-0.286-0.143-0.643-0.214-1.072-0.214,0.143,0.357,0.25,0.75,0.322,1.179,0.071,0.357,0.107,0.785,0.107,1.286,0,1.786-0.572,3.322-1.715,4.608-1.143,1.215-2.536,1.822-4.179,1.822-1.572,0-2.93-0.607-4.073-1.822-1.143-1.286-1.714-2.822-1.714-4.608,0-1.001,0.178-1.822,0.535-2.465-0.428,0-0.821,0.071-1.178,0.214-0.358,0.143-0.536,0.5-0.536,1.072v0.214c0.214,1.215,0.321,2.179,0.321,2.894,0,1-0.214,2.143-0.643,3.429-0.786-0.214-1.607-0.607-2.465-1.178-0.785-0.572-1.25-1.287-1.393-2.144-0.143-0.572-0.214-1-0.214-1.286,0-1.358,0.571-2.501,1.715-3.43,0.857-0.5,1.75-0.75,2.679-0.75l1.071,0.107-1.393-32.578,15.647-4.287c-1.215-0.714-2.179-1.75-2.894-3.108-0.714-1.357-1.071-2.858-1.071-4.501,0-2.501,0.714-4.573,2.143-6.216,1.5-1.715,3.286-2.572,5.358-2.572s3.858,0.857,5.359,2.572c1.5,1.643,2.25,3.715,2.25,6.216,0,1.643-0.393,3.144-1.179,4.501-0.714,1.358-1.679,2.394-2.893,3.108l16.075,4.287-0.214,5.465,4.822-1.179,0.643,2.358c-0.5,0.214-0.821,0.572-0.964,1.072-0.143,0.428-0.215,0.928-0.215,1.5,0,0.786,0.072,1.571,0.215,2.358,0.214,0.785,0.393,1.321,0.536,1.607h6.108c0.572-1.643,0.857-3.001,0.857-4.072,0-0.929-0.214-1.608-0.643-2.036-0.214-0.215-0.393-0.358-0.535-0.429l0.535-2.358,11.253,2.358,2.143,21.862h0.751l-0.215,2.679c1,1.358,1.501,2.787,1.501,4.287,0,0.715-0.108,1.322-0.322,1.822-0.357,0.929-0.893,1.75-1.607,2.465-0.715,0.642-1.501,1.143-2.358,1.5l7.073,1.929c0.357,0.215,0.75,0.464,1.179,0.751,0.428,0.285,0.679,0.749,0.75,1.392l2.25,10.074h-1.393zm-52.833-44.582l-5.895-11.574c-1.571,0.5-3.179,0.965-4.822,1.394-1.572,0.428-3.179,0.857-4.823,1.285l1.179,28.936c0.357-0.143,0.679-0.322,0.965-0.536,0.357-0.286,0.714-0.5,1.071-0.643v-24.22h2.465v24.22c0.929,0.143,1.715,0.464,2.358,0.964,0.714,0.5,1.25,1.144,1.607,1.929,0.286-0.071,0.786-0.107,1.501-0.107,0.714,0,1.214,0.036,1.5,0.107l2.894-1.178v-20.577zm50.154,36.223c-0.071-0.429-0.25-0.821-0.536-1.179-0.214-0.428-0.643-0.714-1.286-0.857l-7.287-1.822-7.395,1.822c-0.643,0.143-1.071,0.393-1.286,0.75-0.143,0.286-0.321,0.715-0.536,1.286l-1.286,6.001h2.894l0.321-3.965,2.251,0.215-1.822,20.794,13.718,1.07-1.822-21.864,2.25-0.215,0.536,3.965h2.786l-1.5-6.001zm-36.973-46.403c-1.643-0.429-3.286-0.894-4.929-1.394l-5.895,11.574v20.577l9.217,3,2.465-27.756,3.75-0.75,0.322-3.966-4.93-1.285zm-10.824,33.543v43.835l5.359-1.83,2.893-39.112-8.252-2.893zm24.756-12.217c-1-2.001-2.072-4.037-3.215-6.109-1.072-2.071-1.607-4.393-1.607-6.965,0-0.715,0.035-1.251,0.107-1.608-0.143,0.071-0.536,0.178-1.179,0.322-0.572,0.142-1.215,0.321-1.929,0.535-0.643,0.143-1.25,0.286-1.822,0.429-0.572,0.071-0.929,0.107-1.072,0.107l-2.786,30.757,3.322,0.215,1.393-25.292,2.465,0.214-1.393,25.399c1.215,0,2.465-0.107,3.751-0.321,1.286-0.215,2.465-0.679,3.536-1.394-1.286-1.715-1.929-3.786-1.929-6.215,0-1.715,0.25-3.465,0.751-5.252,0.5-1.786,1.035-3.393,1.607-4.822zm13.61-13.289l-6.001-1.179c0.071,0.286,0.107,0.572,0.107,0.858v0.643c0,1.214-0.178,2.393-0.536,3.536-0.285,1.072-0.678,2.143-1.179,3.215-0.5,1-1.036,2.036-1.607,3.108-0.5,1-1,2.036-1.5,3.108-0.715,1.572-1.358,3.215-1.929,4.93-0.572,1.643-0.858,3.322-0.858,5.037,0,1,0.179,2.143,0.536,3.429,0.786,1.714,2.001,2.893,3.644,3.536,1.643,0.572,3.358,0.929,5.144,1.072-0.357-0.428-0.715-0.929-1.072-1.5-0.357-0.572-0.607-1.143-0.75-1.715-0.071-0.286-0.143-0.536-0.214-0.75v-0.75c0-0.643,0.071-1.251,0.214-1.822,0.214-0.572,0.464-1.107,0.75-1.607l-0.107-2.787,1.715-0.215-0.751-14.253h2.465l0.751,13.932,1.071-0.214h1.929l-1.822-19.612zm-5.251,33.651c-1.214-0.143-2.429-0.358-3.644-0.643-1.143-0.357-2.179-0.893-3.107-1.607-1.429,1-2.965,1.643-4.609,1.928-1.571,0.286-3.179,0.429-4.822,0.429l1.714,20.255,7.395,2.358h0.536v-0.43l0.429-9.216c-0.215-0.143-0.465-0.214-0.751-0.214h-0.75l2.144-9.86c0.142-0.643,0.393-1.107,0.75-1.392,0.428-0.287,0.821-0.536,1.179-0.751l3.536-0.857zm-40.295,32.79l0.214-3.85c0.072-1.29,0.108-2.54,0.108-3.76,0-1.42-0.072-2.85-0.215-4.28-0.071-1.432-0.286-2.789-0.643-4.075h-10.502c-0.357,1.358-0.607,2.751-0.75,4.175-0.072,1.36-0.108,2.76-0.108,4.18,0,1.43,0.036,2.86,0.108,4.29,0.071,1.43,0.178,2.82,0.321,4.18h11.467v-0.86zm39.545-76.729c-0.214,1.215-0.786,2.393-1.715,3.536-0.857,1.143-1.893,1.858-3.108,2.144-0.285,0.071-0.714,0.107-1.286,0.107-1.929,0-3.572-0.857-4.929-2.572-0.358-0.572-0.643-1.107-0.858-1.607-0.214-0.5-0.357-1.036-0.428-1.608h-1.394v-0.75c0-1.786,0.358-3.43,1.072-4.93,0.715-1.5,1.858-2.751,3.43-3.751,0.571-0.286,1.214-0.428,1.929-0.428,0.714-0.072,1.428-0.108,2.143-0.108,1.643,0.357,2.893,1,3.751,1.929,0.929,0.929,1.572,1.929,1.929,3.001,0.428,1,0.679,2,0.75,3.001,0.071,0.929,0.107,1.607,0.107,2.036h-1.393zm-29.685-12.432c-0.572-0.357-1.144-0.642-1.715-0.857-0.215-0.071-0.5-0.107-0.858-0.107-0.714,0-1.464,0.179-2.25,0.536-0.714,0.357-1.393,0.715-2.036,1.071-0.786,0.429-1.501,0.929-2.144,1.501v0.321c0.143,1.215,0.501,2.394,1.072,3.537,0.643,1.072,1.572,1.857,2.786,2.357,0.286,0.072,0.679,0.108,1.179,0.108,1.215,0,2.251-0.429,3.108-1.286,1.286-1.358,1.929-3.001,1.929-4.93,0-0.357-0.071-0.893-0.214-1.608l-0.857-0.643zm39.866,49.298c0-1.572-0.5-2.644-1.5-3.215l-2.572-0.965-3.001,1.286c-0.357,0.429-0.643,0.893-0.858,1.393-0.214,0.429-0.321,0.929-0.321,1.501,0,1.214,0.429,2.215,1.286,3,0.857,0.715,1.822,1.072,2.894,1.072,1.143,0,2.107-0.357,2.893-1.072,0.786-0.785,1.179-1.786,1.179-3zm-43.832-38.045l-4.394,1.5,4.501,8.788,4.609-8.788-4.716-1.5zm-8.252,38.902c0-0.286-0.035-0.608-0.107-0.964-0.071-0.358-0.178-0.608-0.321-0.751l-1.072-0.428c-0.357-0.143-0.714-0.25-1.072-0.322-0.357-0.071-0.714-0.107-1.071-0.107-0.358,0-0.715,0.036-1.072,0.107-0.357,0.072-0.714,0.179-1.072,0.322-0.357,0.143-0.75,0.285-1.179,0.428-0.142,0.715-0.214,1.287-0.214,1.715,0,1.072,0.322,2,0.965,2.786,0.714,0.786,1.571,1.18,2.572,1.18,1,0,1.857-0.394,2.572-1.18,0.714-0.786,1.071-1.714,1.071-2.786zm39.009-41.796c-1.143,0.858-2.322,1.644-3.536,2.358-1.143,0.644-2.322,1.144-3.537,1.5,0.215,0.715,0.5,1.323,0.858,1.823,0.357,0.428,0.75,0.821,1.179,1.179,0.5,0.356,1.107,0.535,1.821,0.535h0.215c1.286-0.143,2.215-0.857,2.786-2.143,0.429-0.714,0.643-1.608,0.643-2.679,0-0.429-0.036-0.858-0.107-1.286-0.072-0.5-0.179-0.929-0.322-1.287zm-4.286,73.092l-2.787-0.86,1.929,18.11,0.858,0.22v-17.47zm-37.08,10.93v12.22h2.036v-0.22l1.072-12h-3.108zm-2.251,0h-3.001l1.179,12.22h1.822v-12.22zm51.655,0.21h-3.322l0.964,10.08h2.465l-0.107-10.08zm2.358,0v10.08h2.465l0.857-10.08h-3.322zm-10.288-8.79l-1.715-0.64-0.214-1.39v17.15l0.535-0.22,1.394-12.54v-2.36zm-32.044-1.17l-1.071,1.71-1.179,0.64-0.429,6.22c0.215,0.07,0.465,0.14,0.75,0.21,0.215,0.07,0.501,0.15,0.858,0.22,0.357,0.14,0.75,0.28,1.179,0.43l-0.108-9.43zm-19.397-14.15l-0.643,11.15,1.179,2.35v-1.39c0-1.86,0.143-3.608,0.429-5.252,0.357-1.643,0.535-3.393,0.535-5.251l-0.107-1.607h-1.393zm59.478,19.93c0-0.57-0.036-1.14-0.107-1.71l-4.501-0.22-0.214,3.75h4.822v-1.82zm-41.795-19.93h-1.286c-0.072,0.357-0.107,0.678-0.107,0.964v0.75l0.964,10.186-0.107,1.6,1.179-2.14-0.643-11.36zm52.405,0.964h-1.608l0.965,12.006,0.107,0.1,0.107-0.1,0.965-2.79-0.536-9.216zm-18.969,0l-0.429,9.216,0.751,2.79c0.142,0,0.214,0.03,0.214,0.1h0.107l0.107-0.1,0.75-12.006h-1.5zm15.325,17.896c-0.786,0-1.572-0.03-2.358-0.11-0.786-0.07-1.571-0.17-2.357-0.32v3.32h4.929l-0.214-2.89zm-12.646,5.25h-0.536l-0.643,5.68,1.822,1.18-0.643-6.86zm-17.682-36.22l-1.715-0.322,1.5,3.965,0.643,0.215-0.428-3.858z" stroke-width="1.0000000pt" transform="translate(10, 3660.2575349999984) "/>
- <path id="advanced-f13-ja.svgpath2789" d="M191.83,92.195c1.45,7.046-0.77,13.095-3.47,18.975,0.78,4.16-3.31,6.61-2.16,11.44-3.3,5.28,11.69,7.04,3.16,10.09-4.71-1.02-9.65-2.56-14.42-0.87-2.65,1.72-9.17,0.48-5.32-2.96,7.41-2.69-3.74-3.97-6.35-2.41-2.33,1.05-10.39,2.35-5.07-1.43,8.03-3.01,3.47-11.48,3.57-17.94,0.09-3.33-0.37-4.94-3.53-5.65-1.56-4.654-1.1-9.847-1.86-14.727-0.12-2.069-4.29-1.783-3.88-5.129-2.52,4.029-1.07,10.228-2.08,15.103-0.45,6.043-0.9,12.083-1.35,18.123-4.77,2.22,10.08,4.43,6.21,8.62-4.3,1.29-9.29-1.9-13.92-2.1-5.68-1.9-10.97,4.94-4.8,8.39,4.72,2.41,0.9,5.49-2.77,3.52-5.11-2.71-12.38,2.31-15.95-0.67,3.12-3.32,7.13-6.32,4.67-11.7-0.1-5.17-2.82-8.01-2.86-13.32-5.66-3.77-1.01-12.318-3.16-16.361-0.76-4.213,0.62-10.906,6.29-11.275,6.4,0.351-0.05,3.232-2.83,3.538-2.22,3.126-1.07,7.85,2.5,3.812,1.16,3.39,0.19,8.356,6.2,6.323,5.7,1.9,4.59-2.933,5.45-6.313,1.7,1.281,5.06,2.945,3.62-1.104,1.4-5.093-9.91-2.958-5.9-6.483,3.18-0.414,8.68,5.412,7.14-0.844,1.91-5.888-5.24,2.049-3.91-3.307,0.93-3.027-1.58-7.48-0.99-1.929-0.18,9.225-15.77,4.403-11.14-3.382-3.63,0.907,0.5,11.323-5.28,5.897-4.15-6.165,7.91-6.126,4.39-12.416-0.38-8.972-0.76-17.945-1.15-26.917,4.59-1.62,12.6-2.728,15.05-4.665-6.28-4.254-3.31-16.719,4.84-15.975,9.26,1.024,6.71,13.152,4.22,16.803,4.57,1.851,12.53,1.466,14.7,5.284-2.14,5.52,2.9,2.257,5.04,3.836-2.62,4.317,0,10.211,5.44,7.753,3.1-3.168-2.57-11.291,4.96-7.848,5.74-0.109,8.3,2.632,7.61,8.288,0.71,5.268,0.67,10.733,1.86,15.874,2.49,4.177,1.61,9.167-1.71,12.093,6.25,0.252,9.61,4.586,9.6,10.68-0.27,1.326,2.26,4.024-0.66,3.283zm-52.84-44.583c-2.94-3.17-3.36-12.428-8.26-10.76-5.47-0.266-8.96,3.397-7,8.736,0.3,7.355,0.6,14.71,0.9,22.065,4.54-4.521,0.82-13.392,2.04-19.628-1.32-2.96,1.5-9.122,2.54-3.675,0.53,7.442-1.48,16.415,1.04,22.883,3.93,3.678,11.18,2.004,8.74-4.442v-15.179zm50.16,36.223c-4.18-4.856-13.83-4.64-18.23-0.257-1.43,2.37-1.69,9.314,1.9,5.052-1.84-4.028,4.27-2.806,1.9,0.651,0.09,5.623-2.32,13.359-0.68,17.659,3.83-0.53,11.35,2.6,12.74-0.36-0.57-6.83-1.14-13.662-1.7-20.494,3.49-1.941,2.34,7.392,5.36,2.75-0.25-1.698-1-3.298-1.29-5.001zm-36.98-46.403c-6.9-4.138-9.3,7.484-10.82,12.1,0.75,6.08-1.51,14.342,1.15,19.032,3.83,0.961,9.7,5.016,8.45-1.712,0.7-7.806,1.39-15.613,2.08-23.419,5.92,0.02,5.62-5.997-0.86-6.001zm-10.82,33.543v43.835c8.41-0.34,5.06-10.09,6.39-15.714,0.62-8.409,1.24-16.818,1.86-25.228-2.75-0.964-5.5-1.928-8.25-2.893zm24.76-12.217c-3-4.194-4.8-10.902-5.45-14.571-7.54-0.148-5.43,8.129-6.34,13.081-0.57,6.319-1.14,12.639-1.72,18.958,5.97,1.41,2.73-7.09,3.91-10.474,0.27-4.868,0.54-9.735,0.81-14.603,4.95,0.286,0.99,7.945,1.85,11.384-0.26,4.742-0.52,9.486-0.78,14.229,4.85,0.985,8.54-2.605,5.4-6.966-0.29-3.817,1-7.519,2.32-11.038zm13.61-13.288c-3.33-0.63-7.18-2.523-6.16,2.469-1.52,7.778-8.38,14.123-7.32,22.445-0.23,4.808,12.23,9.786,7.46,3.213-0.38-4.226,1.26-7.206,2.32-10.033,0.53-3.743-2.57-11.163,0.97-12.327,3.1,3.551-1.16,12.714,3.18,13.975,3.1-3.959-0.76-11.394-0.16-16.634-0.1-1.036-0.2-2.072-0.29-3.108zm-5.25,33.65c-5.01-2.273-10.21-0.981-15.12-0.233-2.07,5.278,0.61,11.973,0.41,17.808-1.27,3.885,7.55,5.835,8.21,3.935,1.02-6.763-2-10.412,0.68-17.079,0.29-3.36,3.05-3.958,5.82-4.431zm-40.3,32.79c-0.64-5.13,3.41-16.981-4.47-15.965-3.8-0.2-8.08-0.902-7.18,4.295-0.76,5.13-1.74,15.1,6.42,12.53,0.99-0.58,5.89,1.13,5.23-0.86zm39.55-76.729c-0.82,7.829-11.63,6.661-13.3,0.002-1.94-5.605,4.82-12.889,10.38-9.091,2.5,1.071,6.53,8.202,2.92,9.089zm-29.69-12.432c-6.93-5.162-12.89,8.639-3.56,8.518,3.5-0.491,6.34-5.745,3.56-8.518zm39.87,49.298c-0.63-8.657-13.58-0.718-5.83,3.723,2.54,1.603,6.03-0.835,5.83-3.723zm-43.84-38.044c-7.52,0.34-1.27,6.553,0.11,10.287,1.22-4.57,8.67-9.623-0.11-10.287zm-8.25,38.901c-1.79-7.11-12.38,2.15-4.11,3.954,2.2,0.311,4.22-1.8,4.11-3.954zm39.01-41.796c-3.41,1.376-10.45,6.334-2.82,7.374,3.16-0.602,3.83-4.835,2.82-7.374zm-4.28,73.092c-5.59-2.03-0.76,7.79-1.55,10.8-0.23,2.49,1.49,9.81,1.56,3.63-0.08-4.79,0.03-9.62-0.01-14.43zm-37.08,10.93c0.86,3.73-1.84,11.02,1.54,12.28,1.03-3.5,1.97-9.78,0.79-12.28h-2.33zm-2.26,0c-6.07-0.48-0.88,8.65-1.82,12.22,4.08-0.51,0.7-8.98,1.82-12.22zm51.66,0.21c-5.78-1.41-2.61,8.61-1.38,10.28,3.23-0.85,0.6-7.72,1.38-10.28zm2.36,0c0.23,2.59-1.29,13.69,2.63,8.74-0.7-3.24,3.32-10.53-2.63-8.74zm-10.29-8.79c-4.06-3.52-0.97,6.32-1.93,8.8-0.35,3.24,0.32,9.1,0.91,2.75,0.26-3.85,1.14-7.67,1.02-11.55zm-32.04-1.17c-2.94,1.73-4.35,10.35,0.09,8.55-0.03-2.85-0.06-5.7-0.09-8.55zm-19.4-14.15c0.28,4.214-1.68,9.03,0.33,12.84-0.55-3.4,3.22-11.64-0.33-12.84zm59.48,19.93c-0.72-5.89-9.15,1.96-2.31,1.92,1.7-0.14,2.76,0.41,2.31-1.92zm-41.8-19.93c-3.4,2.635,0.61,9.31-0.53,13.5,2.43-3.96,0.15-9.115,0.53-13.5zm52.41,0.965c-3.32,0.84-0.31,10.885-0.21,11.425,1.49-3.668,0.07-7.626,0.21-11.425zm-18.97,0c0.12,3.072-1.4,11.445,0.83,11.065-0.73-3.08,2.47-10.575-0.83-11.065zm15.32,17.895c-6.13-2.76-5.59,5.51,0.06,2.63,0.62-0.81-0.41-1.75-0.06-2.63zm-12.64,5.25c-3.02,2.36,1.09,10.32,0.33,3.58-0.1-1.19-0.22-2.38-0.33-3.58zm-17.69-36.22c-3.89-1.78,1.69,7.528,0.19,1.646-0.04-0.24-0.17-1.337-0.19-1.646z" stroke-width="1.0000000pt" transform="translate(10, 3660.2575349999984) "/>
- <path id="advanced-f13-ja.svgpath2795" d="M286.61,92.195c1.73,10.245-3.77,20.235-6.8,29.375,2.77,4.43,9.29,12.64-1.06,9.64-5.65-0.31-16.37,3.82-14.05-4.6-2.84-3.18-14.35,4.46-10.78-2.84,7.7-6.54,2.34-17.84-1.36-25.229-0.62-4.229-1.21-17.585-6.15-13.717-1.7,8.995-0.97,18.266-2.47,27.316-1.29,4.25,10.98,12.59,0.71,11.01-6.98-4.44-21.11-1.22-12.58,8.34-2.14,3.4-10.61,0.37-15.3,1.67-4.68-3.02,4.89-11.49-0.25-17.16-3.71-9.72-6.68-20.331-4.79-30.691,0.07-6.547,11.78-4.847,3.23-1.67-2.73,6.045,9.88,15.008,14.39,6.841-0.61-3.752,6.14-2.574,1.12-6.696-7.69-5.089,5.26-0.149,2.74-6.202-4.75,1.088-3.59-9.162-5.01-1.02-4.16,7.948-12.66-7.672-12.14-1.318-9.65,2.941,4.7-10.84,1.31-16.479,0.2-7.576-6.01-18.798,2.72-23.543,7.61,1.254,10.79-5.296,6.97-11.079-0.15-8.62,14.65-11.134,14.68-1.372-2.4,7.562,1.51,13.53,9.57,13.368,6.76,1.808,6.22,18.387,14.23,12.035-0.63-12.042,13.97-5.359,12.73,2.936-1.95,7.935,3.4,15.402,1.74,23.297-1.9,6.014,12.28,9.73,7.27,17.831-0.23-0.014-0.67-0.043-0.67-0.043zm-52.84-44.583c-0.08-7.15-11.88-16.201-15-6.213-1.18,8.035,0.93,16.178,0.59,24.281,4.01-0.052,1.66-12.919,1.63-17.956,2.7-10.251,4.49,8.131,2.3,12.268-3.02,10.592,14.84,10.949,10.98,0.205-0.62-4.161-0.84-8.389-0.5-12.585zm50.16,36.223c-4.33-8.369-23.71-1.358-16.94,4.729,5.78-3.043-0.9,10.326,1.54,13.896,2.22,10.4,17,5.33,12.85-4.483-2.26-4.403-1.87-13.59,3.45-9.025,0.27-1.771-0.4-3.465-0.9-5.117zm-36.98-46.403c-8.85-1.837-10.79,9.521-10.69,16.008-2.87,5.999,1.15,21.939,9.02,14.339,1.94-7.849,1.3-16.277,2.53-24.346,5.97,1.428,4.08-7.941-0.86-6.001zm-10.82,33.543v43.835c8.55-2.12,5.78-12.67,6.36-19.121-0.99-7.749,6.6-20.034-3.24-23.893-0.51-0.148-2.59-0.695-3.12-0.821zm24.75-12.217c-2.35-3.902-6.18-19.179-10.9-9.338-1.07,7.984-1.56,16.114-2.1,24.152,5.93,1.068,2.39-12.048,3.5-16.872,2.54-9.635,4.53,4.48,2.29,7.949-3.22,5.041,2.82,17.762,5.64,7.002,1.04-4.365-2.08-9.196,1.57-12.893zm13.62-13.288c-9.52-2.066-7.18,11.28-11.89,15.95-6.03,4.717,2.29,20.544,6.48,11.12,1.24-6.261,0.25-14.01,2.9-19.232,1.35,2.737,2.04,14.588,3.93,5.969,0.16-4.662-1.94-9.132-1.42-13.807zm-5.26,33.65c-6.44-3.603-17.88-1.256-15.83,8.097-2.75,6.399,6.5,20.193,9.67,8.963-0.79-6.07-2.56-16.071,6.16-17.06zm-40.29,32.79c2.31-6.55-0.28-21.299-9.82-14.876-6.99,6.576-0.12,21.896,9.82,14.876zm39.54-76.729c-0.72,8.483-14.8,5.465-13.97-2.306-0.32-9.702,15.26-9.829,15.19-0.275-0.13,0.44-0.94,2.161-1.22,2.581zm-29.68-12.432c-8.51-7.329-9.63,15.326-0.45,6.694,1.61-1.76,2.31-4.84,0.45-6.694zm39.86,49.298c-1.74-10.586-13.82,6.942-2.44,3.861,1.46-0.666,2.56-2.216,2.44-3.861zm-43.83-38.044c-8.89,0.854,3.1,14.814,3.79,4.093,1.18-2.261-1.45-5.039-3.79-4.093zm-8.25,38.901c-3.02-8.504-10.1,8.305-1.34,3.041,0.89-0.731,1.36-1.901,1.34-3.041zm39.01-41.796c-8.66-1.525-1.77,13.237,0.41,3.083-0.01-0.521-0.29-2.576-0.41-3.083zm-4.29,73.092c-6.9,1.8,1.38,20.57,0.03,8.49-0.02-2.83-0.07-5.66-0.03-8.49zm-37.08,10.93c-1.71,4.45,1.43,14.82,3,5.14,0.48-2.18-0.16-5.24-3-5.14zm-2.25,0c-7.73-0.05,0.74,16.72,0.06,5.53-0.26-1.82-0.57-3.71-0.06-5.53zm51.66,0.21c-8.43-1.44,1.05,15.24,0.04,3.96-0.16-1.31-0.29-2.65-0.04-3.96zm2.36,0c-3.26,4.67,3.5,12.3,3.26,3.45,0.42-1.96-0.74-5.13-3.26-3.45zm-10.29-8.79c-5.47,1.62-0.51,18.15-0.57,7.6,0.31-2.52,0.57-5.05,0.57-7.6zm-32.05-1.17c-6.25,0.28,0.78,12.71,0.04,3.51-0.02-1.17-0.01-2.34-0.04-3.51zm-19.39-14.15c-1.3,4.676,0.18,15.02,1.52,4.882,0.31-1.737-0.03-3.748-1.52-4.882zm59.48,19.93c-3.1-6.35-5.41,6.75-0.16,1.29,0.05-0.43,0.16-1.29,0.16-1.29zm-41.8-19.93c-4.53,4.083,1.96,15.72,0.29,5.078-0.21-1.683-0.42-3.38-0.29-5.078zm52.4,0.965c-5.34,2.162,2.08,13.995,0.25,4.156-0.15-1.38-0.28-2.767-0.25-4.156zm-18.96,0c-1.32,2.826,0.22,13.625,1.42,5.055,0.36-1.726,0.28-4.036-1.42-5.055zm15.32,17.895zm-12.64,5.25zm-17.69-36.22z" stroke-width="1.0000000pt" transform="translate(10, 3660.2575349999984) "/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3819.5917549999986" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3819.5917549999986" x="10">テキストの作成</tspan>
+ <text id="advanced-f13-ja.svgtext2796" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3697.7445959999995) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="43.765549" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-ja.svgtspan2797" y="4.2366295" x="43.765549" role="line">オリジナル</tspan></text>
+ <text id="advanced-f13-ja.svgtext2799" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3697.7445959999995) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="125.61612" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-ja.svgtspan2800" y="4.2366295" x="125.61612" role="line">少し簡略化</tspan></text>
+ <text id="advanced-f13-ja.svgtext2802" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3697.7445959999995) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="213.13528" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-ja.svgtspan2803" y="4.2366295" x="213.13528" role="line">積極的に簡略化</tspan></text>
+ <path id="advanced-f13-ja.svgpath2786" d="M97.048,92.194l0.322,9.646-1.286,4.07-1.608,0.64v3.86l-0.964-0.1,0.214,4.82-1.715,0.21-0.857,10.61,6.537,4.18-1.714,2.68-10.717-1.93-10.395,1.93-1.715-2.68,5.251-3.32-5.787-1.18-11.253,2.36v-1.39l7.074-5.36-1.929-18.86c-1.215-0.22-2.394-0.54-3.537-0.97l-1.5-16.075-2.572-0.428-1.179-3.323-0.965,0.215-2.465,33.011-2.036,0.53,9.109,5.9-1.178,3-14.79-3.22-6.001,1.4-0.429,4.71,5.466,4.93c-0.286,0.29-0.464,0.68-0.536,1.18-0.071,0.5-0.286,0.75-0.643,0.75-0.214,0-0.357-0.04-0.429-0.11l-9.216-1.61-9.859,1.72-0.858-1.93,5.466-4.71-1.179-12.22h-1.393c-0.143-1.22-0.25-2.43-0.322-3.65-0.071-1.14-0.143-2.32-0.214-3.53l-1.179-0.86-2.25-4.07,0.643-11.79h-1.286l1.286-7.716c0.285-0.858,0.714-1.501,1.286-1.93,0.643-0.428,1.321-0.749,2.036-0.964,0.786-0.214,1.572-0.393,2.357-0.536,0.858-0.143,1.644-0.357,2.358-0.643l0.536,2.358-5.787,1.393c-0.429,0.357-0.643,0.786-0.643,1.286l-0.857,4.394h2.572v-1.607h2.143v6.322h10.288v-6.322h2.143v1.607h2.572l-0.964-4.715c-0.071-0.358-0.214-0.608-0.429-0.751-0.143-0.142-0.286-0.285-0.428-0.428l-5.895-1.394,0.643-2.143,6.216,1.715c0.572,0.286,1.108,0.786,1.608,1.5v-6.966c-0.358,0.572-0.858,1.072-1.501,1.5-0.643,0.358-1.321,0.644-2.036,0.858-0.286-1.143-0.429-2.25-0.429-3.322v-1.286c0-0.5,0.072-1.072,0.215-1.715,0-0.714-0.179-1.143-0.536-1.286-0.286-0.143-0.643-0.214-1.072-0.214,0.143,0.357,0.25,0.75,0.322,1.179,0.071,0.357,0.107,0.785,0.107,1.286,0,1.786-0.572,3.322-1.715,4.608-1.143,1.215-2.536,1.822-4.179,1.822-1.572,0-2.93-0.607-4.073-1.822-1.143-1.286-1.714-2.822-1.714-4.608,0-1.001,0.178-1.822,0.535-2.465-0.428,0-0.821,0.071-1.178,0.214-0.358,0.143-0.536,0.5-0.536,1.072v0.214c0.214,1.215,0.321,2.179,0.321,2.894,0,1-0.214,2.143-0.643,3.429-0.786-0.214-1.607-0.607-2.465-1.178-0.785-0.572-1.25-1.287-1.393-2.144-0.143-0.572-0.214-1-0.214-1.286,0-1.358,0.571-2.501,1.715-3.43,0.857-0.5,1.75-0.75,2.679-0.75l1.071,0.107-1.393-32.578,15.647-4.287c-1.215-0.714-2.179-1.75-2.894-3.108-0.714-1.357-1.071-2.858-1.071-4.501,0-2.501,0.714-4.573,2.143-6.216,1.5-1.715,3.286-2.572,5.358-2.572s3.858,0.857,5.359,2.572c1.5,1.643,2.25,3.715,2.25,6.216,0,1.643-0.393,3.144-1.179,4.501-0.714,1.358-1.679,2.394-2.893,3.108l16.075,4.287-0.214,5.465,4.822-1.179,0.643,2.358c-0.5,0.214-0.821,0.572-0.964,1.072-0.143,0.428-0.215,0.928-0.215,1.5,0,0.786,0.072,1.571,0.215,2.358,0.214,0.785,0.393,1.321,0.536,1.607h6.108c0.572-1.643,0.857-3.001,0.857-4.072,0-0.929-0.214-1.608-0.643-2.036-0.214-0.215-0.393-0.358-0.535-0.429l0.535-2.358,11.253,2.358,2.143,21.862h0.751l-0.215,2.679c1,1.358,1.501,2.787,1.501,4.287,0,0.715-0.108,1.322-0.322,1.822-0.357,0.929-0.893,1.75-1.607,2.465-0.715,0.642-1.501,1.143-2.358,1.5l7.073,1.929c0.357,0.215,0.75,0.464,1.179,0.751,0.428,0.285,0.679,0.749,0.75,1.392l2.25,10.074h-1.393zm-52.833-44.582l-5.895-11.574c-1.571,0.5-3.179,0.965-4.822,1.394-1.572,0.428-3.179,0.857-4.823,1.285l1.179,28.936c0.357-0.143,0.679-0.322,0.965-0.536,0.357-0.286,0.714-0.5,1.071-0.643v-24.22h2.465v24.22c0.929,0.143,1.715,0.464,2.358,0.964,0.714,0.5,1.25,1.144,1.607,1.929,0.286-0.071,0.786-0.107,1.501-0.107,0.714,0,1.214,0.036,1.5,0.107l2.894-1.178v-20.577zm50.154,36.223c-0.071-0.429-0.25-0.821-0.536-1.179-0.214-0.428-0.643-0.714-1.286-0.857l-7.287-1.822-7.395,1.822c-0.643,0.143-1.071,0.393-1.286,0.75-0.143,0.286-0.321,0.715-0.536,1.286l-1.286,6.001h2.894l0.321-3.965,2.251,0.215-1.822,20.794,13.718,1.07-1.822-21.864,2.25-0.215,0.536,3.965h2.786l-1.5-6.001zm-36.973-46.403c-1.643-0.429-3.286-0.894-4.929-1.394l-5.895,11.574v20.577l9.217,3,2.465-27.756,3.75-0.75,0.322-3.966-4.93-1.285zm-10.824,33.543v43.835l5.359-1.83,2.893-39.112-8.252-2.893zm24.756-12.217c-1-2.001-2.072-4.037-3.215-6.109-1.072-2.071-1.607-4.393-1.607-6.965,0-0.715,0.035-1.251,0.107-1.608-0.143,0.071-0.536,0.178-1.179,0.322-0.572,0.142-1.215,0.321-1.929,0.535-0.643,0.143-1.25,0.286-1.822,0.429-0.572,0.071-0.929,0.107-1.072,0.107l-2.786,30.757,3.322,0.215,1.393-25.292,2.465,0.214-1.393,25.399c1.215,0,2.465-0.107,3.751-0.321,1.286-0.215,2.465-0.679,3.536-1.394-1.286-1.715-1.929-3.786-1.929-6.215,0-1.715,0.25-3.465,0.751-5.252,0.5-1.786,1.035-3.393,1.607-4.822zm13.61-13.289l-6.001-1.179c0.071,0.286,0.107,0.572,0.107,0.858v0.643c0,1.214-0.178,2.393-0.536,3.536-0.285,1.072-0.678,2.143-1.179,3.215-0.5,1-1.036,2.036-1.607,3.108-0.5,1-1,2.036-1.5,3.108-0.715,1.572-1.358,3.215-1.929,4.93-0.572,1.643-0.858,3.322-0.858,5.037,0,1,0.179,2.143,0.536,3.429,0.786,1.714,2.001,2.893,3.644,3.536,1.643,0.572,3.358,0.929,5.144,1.072-0.357-0.428-0.715-0.929-1.072-1.5-0.357-0.572-0.607-1.143-0.75-1.715-0.071-0.286-0.143-0.536-0.214-0.75v-0.75c0-0.643,0.071-1.251,0.214-1.822,0.214-0.572,0.464-1.107,0.75-1.607l-0.107-2.787,1.715-0.215-0.751-14.253h2.465l0.751,13.932,1.071-0.214h1.929l-1.822-19.612zm-5.251,33.651c-1.214-0.143-2.429-0.358-3.644-0.643-1.143-0.357-2.179-0.893-3.107-1.607-1.429,1-2.965,1.643-4.609,1.928-1.571,0.286-3.179,0.429-4.822,0.429l1.714,20.255,7.395,2.358h0.536v-0.43l0.429-9.216c-0.215-0.143-0.465-0.214-0.751-0.214h-0.75l2.144-9.86c0.142-0.643,0.393-1.107,0.75-1.392,0.428-0.287,0.821-0.536,1.179-0.751l3.536-0.857zm-40.295,32.79l0.214-3.85c0.072-1.29,0.108-2.54,0.108-3.76,0-1.42-0.072-2.85-0.215-4.28-0.071-1.432-0.286-2.789-0.643-4.075h-10.502c-0.357,1.358-0.607,2.751-0.75,4.175-0.072,1.36-0.108,2.76-0.108,4.18,0,1.43,0.036,2.86,0.108,4.29,0.071,1.43,0.178,2.82,0.321,4.18h11.467v-0.86zm39.545-76.729c-0.214,1.215-0.786,2.393-1.715,3.536-0.857,1.143-1.893,1.858-3.108,2.144-0.285,0.071-0.714,0.107-1.286,0.107-1.929,0-3.572-0.857-4.929-2.572-0.358-0.572-0.643-1.107-0.858-1.607-0.214-0.5-0.357-1.036-0.428-1.608h-1.394v-0.75c0-1.786,0.358-3.43,1.072-4.93,0.715-1.5,1.858-2.751,3.43-3.751,0.571-0.286,1.214-0.428,1.929-0.428,0.714-0.072,1.428-0.108,2.143-0.108,1.643,0.357,2.893,1,3.751,1.929,0.929,0.929,1.572,1.929,1.929,3.001,0.428,1,0.679,2,0.75,3.001,0.071,0.929,0.107,1.607,0.107,2.036h-1.393zm-29.685-12.432c-0.572-0.357-1.144-0.642-1.715-0.857-0.215-0.071-0.5-0.107-0.858-0.107-0.714,0-1.464,0.179-2.25,0.536-0.714,0.357-1.393,0.715-2.036,1.071-0.786,0.429-1.501,0.929-2.144,1.501v0.321c0.143,1.215,0.501,2.394,1.072,3.537,0.643,1.072,1.572,1.857,2.786,2.357,0.286,0.072,0.679,0.108,1.179,0.108,1.215,0,2.251-0.429,3.108-1.286,1.286-1.358,1.929-3.001,1.929-4.93,0-0.357-0.071-0.893-0.214-1.608l-0.857-0.643zm39.866,49.298c0-1.572-0.5-2.644-1.5-3.215l-2.572-0.965-3.001,1.286c-0.357,0.429-0.643,0.893-0.858,1.393-0.214,0.429-0.321,0.929-0.321,1.501,0,1.214,0.429,2.215,1.286,3,0.857,0.715,1.822,1.072,2.894,1.072,1.143,0,2.107-0.357,2.893-1.072,0.786-0.785,1.179-1.786,1.179-3zm-43.832-38.045l-4.394,1.5,4.501,8.788,4.609-8.788-4.716-1.5zm-8.252,38.902c0-0.286-0.035-0.608-0.107-0.964-0.071-0.358-0.178-0.608-0.321-0.751l-1.072-0.428c-0.357-0.143-0.714-0.25-1.072-0.322-0.357-0.071-0.714-0.107-1.071-0.107-0.358,0-0.715,0.036-1.072,0.107-0.357,0.072-0.714,0.179-1.072,0.322-0.357,0.143-0.75,0.285-1.179,0.428-0.142,0.715-0.214,1.287-0.214,1.715,0,1.072,0.322,2,0.965,2.786,0.714,0.786,1.571,1.18,2.572,1.18,1,0,1.857-0.394,2.572-1.18,0.714-0.786,1.071-1.714,1.071-2.786zm39.009-41.796c-1.143,0.858-2.322,1.644-3.536,2.358-1.143,0.644-2.322,1.144-3.537,1.5,0.215,0.715,0.5,1.323,0.858,1.823,0.357,0.428,0.75,0.821,1.179,1.179,0.5,0.356,1.107,0.535,1.821,0.535h0.215c1.286-0.143,2.215-0.857,2.786-2.143,0.429-0.714,0.643-1.608,0.643-2.679,0-0.429-0.036-0.858-0.107-1.286-0.072-0.5-0.179-0.929-0.322-1.287zm-4.286,73.092l-2.787-0.86,1.929,18.11,0.858,0.22v-17.47zm-37.08,10.93v12.22h2.036v-0.22l1.072-12h-3.108zm-2.251,0h-3.001l1.179,12.22h1.822v-12.22zm51.655,0.21h-3.322l0.964,10.08h2.465l-0.107-10.08zm2.358,0v10.08h2.465l0.857-10.08h-3.322zm-10.288-8.79l-1.715-0.64-0.214-1.39v17.15l0.535-0.22,1.394-12.54v-2.36zm-32.044-1.17l-1.071,1.71-1.179,0.64-0.429,6.22c0.215,0.07,0.465,0.14,0.75,0.21,0.215,0.07,0.501,0.15,0.858,0.22,0.357,0.14,0.75,0.28,1.179,0.43l-0.108-9.43zm-19.397-14.15l-0.643,11.15,1.179,2.35v-1.39c0-1.86,0.143-3.608,0.429-5.252,0.357-1.643,0.535-3.393,0.535-5.251l-0.107-1.607h-1.393zm59.478,19.93c0-0.57-0.036-1.14-0.107-1.71l-4.501-0.22-0.214,3.75h4.822v-1.82zm-41.795-19.93h-1.286c-0.072,0.357-0.107,0.678-0.107,0.964v0.75l0.964,10.186-0.107,1.6,1.179-2.14-0.643-11.36zm52.405,0.964h-1.608l0.965,12.006,0.107,0.1,0.107-0.1,0.965-2.79-0.536-9.216zm-18.969,0l-0.429,9.216,0.751,2.79c0.142,0,0.214,0.03,0.214,0.1h0.107l0.107-0.1,0.75-12.006h-1.5zm15.325,17.896c-0.786,0-1.572-0.03-2.358-0.11-0.786-0.07-1.571-0.17-2.357-0.32v3.32h4.929l-0.214-2.89zm-12.646,5.25h-0.536l-0.643,5.68,1.822,1.18-0.643-6.86zm-17.682-36.22l-1.715-0.322,1.5,3.965,0.643,0.215-0.428-3.858z" stroke-width="1.0000000pt" transform="translate(10, 3697.7445959999995) "/>
+ <path id="advanced-f13-ja.svgpath2789" d="M191.83,92.195c1.45,7.046-0.77,13.095-3.47,18.975,0.78,4.16-3.31,6.61-2.16,11.44-3.3,5.28,11.69,7.04,3.16,10.09-4.71-1.02-9.65-2.56-14.42-0.87-2.65,1.72-9.17,0.48-5.32-2.96,7.41-2.69-3.74-3.97-6.35-2.41-2.33,1.05-10.39,2.35-5.07-1.43,8.03-3.01,3.47-11.48,3.57-17.94,0.09-3.33-0.37-4.94-3.53-5.65-1.56-4.654-1.1-9.847-1.86-14.727-0.12-2.069-4.29-1.783-3.88-5.129-2.52,4.029-1.07,10.228-2.08,15.103-0.45,6.043-0.9,12.083-1.35,18.123-4.77,2.22,10.08,4.43,6.21,8.62-4.3,1.29-9.29-1.9-13.92-2.1-5.68-1.9-10.97,4.94-4.8,8.39,4.72,2.41,0.9,5.49-2.77,3.52-5.11-2.71-12.38,2.31-15.95-0.67,3.12-3.32,7.13-6.32,4.67-11.7-0.1-5.17-2.82-8.01-2.86-13.32-5.66-3.77-1.01-12.318-3.16-16.361-0.76-4.213,0.62-10.906,6.29-11.275,6.4,0.351-0.05,3.232-2.83,3.538-2.22,3.126-1.07,7.85,2.5,3.812,1.16,3.39,0.19,8.356,6.2,6.323,5.7,1.9,4.59-2.933,5.45-6.313,1.7,1.281,5.06,2.945,3.62-1.104,1.4-5.093-9.91-2.958-5.9-6.483,3.18-0.414,8.68,5.412,7.14-0.844,1.91-5.888-5.24,2.049-3.91-3.307,0.93-3.027-1.58-7.48-0.99-1.929-0.18,9.225-15.77,4.403-11.14-3.382-3.63,0.907,0.5,11.323-5.28,5.897-4.15-6.165,7.91-6.126,4.39-12.416-0.38-8.972-0.76-17.945-1.15-26.917,4.59-1.62,12.6-2.728,15.05-4.665-6.28-4.254-3.31-16.719,4.84-15.975,9.26,1.024,6.71,13.152,4.22,16.803,4.57,1.851,12.53,1.466,14.7,5.284-2.14,5.52,2.9,2.257,5.04,3.836-2.62,4.317,0,10.211,5.44,7.753,3.1-3.168-2.57-11.291,4.96-7.848,5.74-0.109,8.3,2.632,7.61,8.288,0.71,5.268,0.67,10.733,1.86,15.874,2.49,4.177,1.61,9.167-1.71,12.093,6.25,0.252,9.61,4.586,9.6,10.68-0.27,1.326,2.26,4.024-0.66,3.283zm-52.84-44.583c-2.94-3.17-3.36-12.428-8.26-10.76-5.47-0.266-8.96,3.397-7,8.736,0.3,7.355,0.6,14.71,0.9,22.065,4.54-4.521,0.82-13.392,2.04-19.628-1.32-2.96,1.5-9.122,2.54-3.675,0.53,7.442-1.48,16.415,1.04,22.883,3.93,3.678,11.18,2.004,8.74-4.442v-15.179zm50.16,36.223c-4.18-4.856-13.83-4.64-18.23-0.257-1.43,2.37-1.69,9.314,1.9,5.052-1.84-4.028,4.27-2.806,1.9,0.651,0.09,5.623-2.32,13.359-0.68,17.659,3.83-0.53,11.35,2.6,12.74-0.36-0.57-6.83-1.14-13.662-1.7-20.494,3.49-1.941,2.34,7.392,5.36,2.75-0.25-1.698-1-3.298-1.29-5.001zm-36.98-46.403c-6.9-4.138-9.3,7.484-10.82,12.1,0.75,6.08-1.51,14.342,1.15,19.032,3.83,0.961,9.7,5.016,8.45-1.712,0.7-7.806,1.39-15.613,2.08-23.419,5.92,0.02,5.62-5.997-0.86-6.001zm-10.82,33.543v43.835c8.41-0.34,5.06-10.09,6.39-15.714,0.62-8.409,1.24-16.818,1.86-25.228-2.75-0.964-5.5-1.928-8.25-2.893zm24.76-12.217c-3-4.194-4.8-10.902-5.45-14.571-7.54-0.148-5.43,8.129-6.34,13.081-0.57,6.319-1.14,12.639-1.72,18.958,5.97,1.41,2.73-7.09,3.91-10.474,0.27-4.868,0.54-9.735,0.81-14.603,4.95,0.286,0.99,7.945,1.85,11.384-0.26,4.742-0.52,9.486-0.78,14.229,4.85,0.985,8.54-2.605,5.4-6.966-0.29-3.817,1-7.519,2.32-11.038zm13.61-13.288c-3.33-0.63-7.18-2.523-6.16,2.469-1.52,7.778-8.38,14.123-7.32,22.445-0.23,4.808,12.23,9.786,7.46,3.213-0.38-4.226,1.26-7.206,2.32-10.033,0.53-3.743-2.57-11.163,0.97-12.327,3.1,3.551-1.16,12.714,3.18,13.975,3.1-3.959-0.76-11.394-0.16-16.634-0.1-1.036-0.2-2.072-0.29-3.108zm-5.25,33.65c-5.01-2.273-10.21-0.981-15.12-0.233-2.07,5.278,0.61,11.973,0.41,17.808-1.27,3.885,7.55,5.835,8.21,3.935,1.02-6.763-2-10.412,0.68-17.079,0.29-3.36,3.05-3.958,5.82-4.431zm-40.3,32.79c-0.64-5.13,3.41-16.981-4.47-15.965-3.8-0.2-8.08-0.902-7.18,4.295-0.76,5.13-1.74,15.1,6.42,12.53,0.99-0.58,5.89,1.13,5.23-0.86zm39.55-76.729c-0.82,7.829-11.63,6.661-13.3,0.002-1.94-5.605,4.82-12.889,10.38-9.091,2.5,1.071,6.53,8.202,2.92,9.089zm-29.69-12.432c-6.93-5.162-12.89,8.639-3.56,8.518,3.5-0.491,6.34-5.745,3.56-8.518zm39.87,49.298c-0.63-8.657-13.58-0.718-5.83,3.723,2.54,1.603,6.03-0.835,5.83-3.723zm-43.84-38.044c-7.52,0.34-1.27,6.553,0.11,10.287,1.22-4.57,8.67-9.623-0.11-10.287zm-8.25,38.901c-1.79-7.11-12.38,2.15-4.11,3.954,2.2,0.311,4.22-1.8,4.11-3.954zm39.01-41.796c-3.41,1.376-10.45,6.334-2.82,7.374,3.16-0.602,3.83-4.835,2.82-7.374zm-4.28,73.092c-5.59-2.03-0.76,7.79-1.55,10.8-0.23,2.49,1.49,9.81,1.56,3.63-0.08-4.79,0.03-9.62-0.01-14.43zm-37.08,10.93c0.86,3.73-1.84,11.02,1.54,12.28,1.03-3.5,1.97-9.78,0.79-12.28h-2.33zm-2.26,0c-6.07-0.48-0.88,8.65-1.82,12.22,4.08-0.51,0.7-8.98,1.82-12.22zm51.66,0.21c-5.78-1.41-2.61,8.61-1.38,10.28,3.23-0.85,0.6-7.72,1.38-10.28zm2.36,0c0.23,2.59-1.29,13.69,2.63,8.74-0.7-3.24,3.32-10.53-2.63-8.74zm-10.29-8.79c-4.06-3.52-0.97,6.32-1.93,8.8-0.35,3.24,0.32,9.1,0.91,2.75,0.26-3.85,1.14-7.67,1.02-11.55zm-32.04-1.17c-2.94,1.73-4.35,10.35,0.09,8.55-0.03-2.85-0.06-5.7-0.09-8.55zm-19.4-14.15c0.28,4.214-1.68,9.03,0.33,12.84-0.55-3.4,3.22-11.64-0.33-12.84zm59.48,19.93c-0.72-5.89-9.15,1.96-2.31,1.92,1.7-0.14,2.76,0.41,2.31-1.92zm-41.8-19.93c-3.4,2.635,0.61,9.31-0.53,13.5,2.43-3.96,0.15-9.115,0.53-13.5zm52.41,0.965c-3.32,0.84-0.31,10.885-0.21,11.425,1.49-3.668,0.07-7.626,0.21-11.425zm-18.97,0c0.12,3.072-1.4,11.445,0.83,11.065-0.73-3.08,2.47-10.575-0.83-11.065zm15.32,17.895c-6.13-2.76-5.59,5.51,0.06,2.63,0.62-0.81-0.41-1.75-0.06-2.63zm-12.64,5.25c-3.02,2.36,1.09,10.32,0.33,3.58-0.1-1.19-0.22-2.38-0.33-3.58zm-17.69-36.22c-3.89-1.78,1.69,7.528,0.19,1.646-0.04-0.24-0.17-1.337-0.19-1.646z" stroke-width="1.0000000pt" transform="translate(10, 3697.7445959999995) "/>
+ <path id="advanced-f13-ja.svgpath2795" d="M286.61,92.195c1.73,10.245-3.77,20.235-6.8,29.375,2.77,4.43,9.29,12.64-1.06,9.64-5.65-0.31-16.37,3.82-14.05-4.6-2.84-3.18-14.35,4.46-10.78-2.84,7.7-6.54,2.34-17.84-1.36-25.229-0.62-4.229-1.21-17.585-6.15-13.717-1.7,8.995-0.97,18.266-2.47,27.316-1.29,4.25,10.98,12.59,0.71,11.01-6.98-4.44-21.11-1.22-12.58,8.34-2.14,3.4-10.61,0.37-15.3,1.67-4.68-3.02,4.89-11.49-0.25-17.16-3.71-9.72-6.68-20.331-4.79-30.691,0.07-6.547,11.78-4.847,3.23-1.67-2.73,6.045,9.88,15.008,14.39,6.841-0.61-3.752,6.14-2.574,1.12-6.696-7.69-5.089,5.26-0.149,2.74-6.202-4.75,1.088-3.59-9.162-5.01-1.02-4.16,7.948-12.66-7.672-12.14-1.318-9.65,2.941,4.7-10.84,1.31-16.479,0.2-7.576-6.01-18.798,2.72-23.543,7.61,1.254,10.79-5.296,6.97-11.079-0.15-8.62,14.65-11.134,14.68-1.372-2.4,7.562,1.51,13.53,9.57,13.368,6.76,1.808,6.22,18.387,14.23,12.035-0.63-12.042,13.97-5.359,12.73,2.936-1.95,7.935,3.4,15.402,1.74,23.297-1.9,6.014,12.28,9.73,7.27,17.831-0.23-0.014-0.67-0.043-0.67-0.043zm-52.84-44.583c-0.08-7.15-11.88-16.201-15-6.213-1.18,8.035,0.93,16.178,0.59,24.281,4.01-0.052,1.66-12.919,1.63-17.956,2.7-10.251,4.49,8.131,2.3,12.268-3.02,10.592,14.84,10.949,10.98,0.205-0.62-4.161-0.84-8.389-0.5-12.585zm50.16,36.223c-4.33-8.369-23.71-1.358-16.94,4.729,5.78-3.043-0.9,10.326,1.54,13.896,2.22,10.4,17,5.33,12.85-4.483-2.26-4.403-1.87-13.59,3.45-9.025,0.27-1.771-0.4-3.465-0.9-5.117zm-36.98-46.403c-8.85-1.837-10.79,9.521-10.69,16.008-2.87,5.999,1.15,21.939,9.02,14.339,1.94-7.849,1.3-16.277,2.53-24.346,5.97,1.428,4.08-7.941-0.86-6.001zm-10.82,33.543v43.835c8.55-2.12,5.78-12.67,6.36-19.121-0.99-7.749,6.6-20.034-3.24-23.893-0.51-0.148-2.59-0.695-3.12-0.821zm24.75-12.217c-2.35-3.902-6.18-19.179-10.9-9.338-1.07,7.984-1.56,16.114-2.1,24.152,5.93,1.068,2.39-12.048,3.5-16.872,2.54-9.635,4.53,4.48,2.29,7.949-3.22,5.041,2.82,17.762,5.64,7.002,1.04-4.365-2.08-9.196,1.57-12.893zm13.62-13.288c-9.52-2.066-7.18,11.28-11.89,15.95-6.03,4.717,2.29,20.544,6.48,11.12,1.24-6.261,0.25-14.01,2.9-19.232,1.35,2.737,2.04,14.588,3.93,5.969,0.16-4.662-1.94-9.132-1.42-13.807zm-5.26,33.65c-6.44-3.603-17.88-1.256-15.83,8.097-2.75,6.399,6.5,20.193,9.67,8.963-0.79-6.07-2.56-16.071,6.16-17.06zm-40.29,32.79c2.31-6.55-0.28-21.299-9.82-14.876-6.99,6.576-0.12,21.896,9.82,14.876zm39.54-76.729c-0.72,8.483-14.8,5.465-13.97-2.306-0.32-9.702,15.26-9.829,15.19-0.275-0.13,0.44-0.94,2.161-1.22,2.581zm-29.68-12.432c-8.51-7.329-9.63,15.326-0.45,6.694,1.61-1.76,2.31-4.84,0.45-6.694zm39.86,49.298c-1.74-10.586-13.82,6.942-2.44,3.861,1.46-0.666,2.56-2.216,2.44-3.861zm-43.83-38.044c-8.89,0.854,3.1,14.814,3.79,4.093,1.18-2.261-1.45-5.039-3.79-4.093zm-8.25,38.901c-3.02-8.504-10.1,8.305-1.34,3.041,0.89-0.731,1.36-1.901,1.34-3.041zm39.01-41.796c-8.66-1.525-1.77,13.237,0.41,3.083-0.01-0.521-0.29-2.576-0.41-3.083zm-4.29,73.092c-6.9,1.8,1.38,20.57,0.03,8.49-0.02-2.83-0.07-5.66-0.03-8.49zm-37.08,10.93c-1.71,4.45,1.43,14.82,3,5.14,0.48-2.18-0.16-5.24-3-5.14zm-2.25,0c-7.73-0.05,0.74,16.72,0.06,5.53-0.26-1.82-0.57-3.71-0.06-5.53zm51.66,0.21c-8.43-1.44,1.05,15.24,0.04,3.96-0.16-1.31-0.29-2.65-0.04-3.96zm2.36,0c-3.26,4.67,3.5,12.3,3.26,3.45,0.42-1.96-0.74-5.13-3.26-3.45zm-10.29-8.79c-5.47,1.62-0.51,18.15-0.57,7.6,0.31-2.52,0.57-5.05,0.57-7.6zm-32.05-1.17c-6.25,0.28,0.78,12.71,0.04,3.51-0.02-1.17-0.01-2.34-0.04-3.51zm-19.39-14.15c-1.3,4.676,0.18,15.02,1.52,4.882,0.31-1.737-0.03-3.748-1.52-4.882zm59.48,19.93c-3.1-6.35-5.41,6.75-0.16,1.29,0.05-0.43,0.16-1.29,0.16-1.29zm-41.8-19.93c-4.53,4.083,1.96,15.72,0.29,5.078-0.21-1.683-0.42-3.38-0.29-5.078zm52.4,0.965c-5.34,2.162,2.08,13.995,0.25,4.156-0.15-1.38-0.28-2.767-0.25-4.156zm-18.96,0c-1.32,2.826,0.22,13.625,1.42,5.055,0.36-1.726,0.28-4.036-1.42-5.055zm15.32,17.895zm-12.64,5.25zm-17.69-36.22z" stroke-width="1.0000000pt" transform="translate(10, 3697.7445959999995) "/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3857.0788159999997" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="3857.0788159999997" x="10">テキストの作成</tspan>
</text>
- <rect id="d0e591" display="none" height="1000px" width="288" y="3824.8" x="10"/>
+ <rect id="d0e591" display="none" height="1000px" width="288" y="3862.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e591"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape は長くて複雑なテキストを作成できますが、見出し、バナー、ロゴ、図表、注釈その他の小さなオブジェクトを作るのにも非常に便利です。この章ではとても基本的な Inkscape のテキスト機能について紹介します。</flowDiv>
</flowRoot>
- <rect id="d0e594" display="none" height="1000px" width="288" y="3865.1" x="10"/>
+ <rect id="d0e594" display="none" height="1000px" width="288" y="3902.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e594"/>
</flowRegion>
<flowDiv xml:space="preserve">テキストオブジェクトの作成は簡単です。テキストツールに切り替え (<flowSpan font-weight="bold">F8</flowSpan>)、ドキュメントのどこかをクリックしてテキストを打ち込むだけです。フォントファミリ、スタイル、サイズ、位置揃えの変更にはテキストとフォントダイアログ (<flowSpan font-weight="bold">Shift+Ctrl+T</flowSpan>) を開きます。このダイアログにはテキスト入力タブがあり、選択したオブジェクトのテキストを変更できます。これはキャンバス上で直接編集を行うより便利な場合があります (特に、このタブはスペルチェック機能をもっています)。</flowDiv>
</flowRoot>
- <rect id="d0e603" display="none" height="1000px" width="288" y="3948" x="10"/>
+ <rect id="d0e603" display="none" height="1000px" width="288" y="3986.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e603"/>
</flowRegion>
- <flowDiv xml:space="preserve">他のツールと同様に、テキストツールは "テキストオブジェクト" を選択することができるので、既存のテキストオブジェクトを選択しカーソルを置くことができます (この段落のように)。</flowDiv>
+ <flowDiv xml:space="preserve">他のツールと同様に、テキストツールは &quot;テキストオブジェクト&quot; を選択することができるので、既存のテキストオブジェクトを選択しカーソルを置くことができます (この段落のように)。</flowDiv>
</flowRoot>
- <rect id="d0e606" display="none" height="1000px" width="288" y="3987.5" x="10"/>
+ <rect id="d0e606" display="none" height="1000px" width="288" y="4027.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e606"/>
</flowRegion>
<flowDiv xml:space="preserve">テキストデザインでもっとも一般的な操作は文字間と行間を調節することです。いつものように Inkscape はショートカットを用意しています。テキストを編集するとき、<flowSpan font-weight="bold">Alt+&lt;</flowSpan> と <flowSpan font-weight="bold">Alt+&gt;</flowSpan> キーでテキストオブジェクトの現在の行の<flowSpan font-style="italic">文字間隔</flowSpan>を変更し、文字列の全長は現在のズームレベル上での 1 ピクセル分ずつ変更されます (選択ツールが同じキーでピクセル単位でオブジェクトを拡大縮小するのと比べて見てください)。一般的に、もしテキストオブジェクトのフォントサイズがデフォルトより大きい場合には、文字間隔はデフォルトより少し狭めた方がいい感じになります。例を示します:</flowDiv>
</flowRoot>
- <text id="advanced-f14-ja.svgtext1609" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4089.5957449999983) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2361641" x="139.43481" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f14-ja.svgtspan1610" y="4.2361641" x="139.43481" role="line">オリジナル</tspan></text>
- <text id="advanced-f14-ja.svgtext1612" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4089.5957449999983) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="53.843742" x="116.16958" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f14-ja.svgtspan1613" y="53.843742" x="116.16958" role="line">文字間隔を縮小</tspan></text>
- <text id="advanced-f14-ja.svgtext2315" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4089.5957449999983) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="33.29771" x="60.780251" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f14-ja.svgtspan1604">Inspiration</tspan></text>
- <text id="advanced-f14-ja.svgtext1606" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4089.5957449999983) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="82.904648" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f14-ja.svgtspan1607" style="letter-spacing:-1.2478520;">Inspiration</tspan></text>
- <rect id="d0e628" display="none" height="1000px" width="288" y="4191.7" x="10"/>
+ <text id="advanced-f14-ja.svgtext1609" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4132.031155) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2361641" x="139.43481" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f14-ja.svgtspan1610" y="4.2361641" x="139.43481" role="line">オリジナル</tspan></text>
+ <text id="advanced-f14-ja.svgtext1612" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4132.031155) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="53.843742" x="116.16958" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f14-ja.svgtspan1613" y="53.843742" x="116.16958" role="line">文字間隔を縮小</tspan></text>
+ <text id="advanced-f14-ja.svgtext2315" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4132.031155) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="33.29771" x="60.780251" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f14-ja.svgtspan1604">Inspiration</tspan></text>
+ <text id="advanced-f14-ja.svgtext1606" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4132.031155) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="82.904648" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f14-ja.svgtspan1607" style="letter-spacing:-1.2478520;">Inspiration</tspan></text>
+ <rect id="d0e628" display="none" height="1000px" width="288" y="4234" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e628"/>
</flowRegion>
- <flowDiv xml:space="preserve">文字間隔を狭めると見出し用にはちょっと良くなったようですが、まだ完璧ではありません。文字間隔が均一なのです。例えば "a" と "t" の間は離れ過ぎているし、"t" と "i" の間は狭すぎます。このようなまずい文字間隔は (特に大きなフォントサイズにおいて) 低品位のフォントで大きく、高品位のフォントでは小さくなります。しかし、おそらくどんなフォントのどんな文字列にも、カーニングの調整をすると良くなる文字の組み合わせというがあるでしょう。</flowDiv>
+ <flowDiv xml:space="preserve">文字間隔を狭めると見出し用にはちょっと良くなったようですが、まだ完璧ではありません。文字間隔が均一なのです。例えば &quot;a&quot; と &quot;t&quot; の間は離れ過ぎているし、&quot;t&quot; と &quot;i&quot; の間は狭すぎます。このようなまずい文字間隔は (特に大きなフォントサイズにおいて) 低品位のフォントで大きく、高品位のフォントでは小さくなります。しかし、おそらくどんなフォントのどんな文字列にも、カーニングの調整をすると良くなる文字の組み合わせというがあるでしょう。</flowDiv>
</flowRoot>
- <rect id="d0e631" display="none" height="1000px" width="288" y="4264.5" x="10"/>
+ <rect id="d0e631" display="none" height="1000px" width="288" y="4307.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e631"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape はこの調節を実に簡単に実行します。カーソルを気に入らない文字の間に移動して <flowSpan font-weight="bold">Alt+矢印</flowSpan>キーでカーソルの右側の文字を動かすだけです。また同じ見出しを見てみましょう。今度は手作業で文字の位置が均等になるように調整したものです:</flowDiv>
</flowRoot>
- <text id="advanced-f15-ja.svgtext1649" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4323.487601999998) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2368875" x="66.563278" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f15-ja.svgtspan1651" y="4.2368875" x="66.563278" role="line">文字間隔を縮小、一部の文字間を手動で調整</tspan></text>
- <text id="advanced-f15-ja.svgtext2406" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4323.487601999998) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="34.802681" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f15-ja.svgtspan1647" style="letter-spacing:-1.2478520;" dx="0 0 -0.1418031 -0.42540932 -0.42540932 0.42540932 0.42540932 -0.87514824 1.1344248 -0.5672124 -0.5672124">Inspiration</tspan></text>
- <rect id="d0e647" display="none" height="1000px" width="288" y="4377.8" x="10"/>
+ <text id="advanced-f15-ja.svgtext1649" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4367.1712529999995) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2368875" x="66.563278" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f15-ja.svgtspan1651" y="4.2368875" x="66.563278" role="line">文字間隔を縮小、一部の文字間を手動で調整</tspan></text>
+ <text id="advanced-f15-ja.svgtext2406" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4367.1712529999995) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="34.802681" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f15-ja.svgtspan1647" style="letter-spacing:-1.2478520;" dx="0 0 -0.1418031 -0.42540932 -0.42540932 0.42540932 0.42540932 -0.87514824 1.1344248 -0.5672124 -0.5672124">Inspiration</tspan></text>
+ <rect id="d0e647" display="none" height="1000px" width="288" y="4421.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e647"/>
</flowRegion>
<flowDiv xml:space="preserve">加えて、 <flowSpan font-weight="bold">Alt+左</flowSpan> と <flowSpan font-weight="bold">Alt+右</flowSpan> キーで文字を水平方向にシフトでき、<flowSpan font-weight="bold">Alt+上</flowSpan> と <flowSpan font-weight="bold">Alt+下</flowSpan> キーで垂直方向にシフトすることもできます。</flowDiv>
</flowRoot>
- <text id="advanced-f16-ja.svgtext1731" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4415.381177999998) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="32.078743" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f16-ja.svgtspan1732" style="letter-spacing:-1.2478520;" dx="0 -3.4339702 -1.746122 -1.4281086 -2.0297282 -1.981069 -3.9864676 -3.8832457 -1.2720536 -2.1715312 -1.5699117" dy="0 0.0056477566 6.8183579 -6.6178179 0 -6.4172778 6.0161972 -5.8156576 5.8156576 -3.4091773 2.8075578">Inspiration</tspan></text>
- <rect id="d0e672" display="none" height="1000px" width="288" y="4463.5" x="10"/>
+ <text id="advanced-f16-ja.svgtext1731" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4459.064828999999) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="32.078743" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f16-ja.svgtspan1732" style="letter-spacing:-1.2478520;" dx="0 -3.4339702 -1.746122 -1.4281086 -2.0297282 -1.981069 -3.9864676 -3.8832457 -1.2720536 -2.1715312 -1.5699117" dy="0 0.0056477566 6.8183579 -6.6178179 0 -6.4172778 6.0161972 -5.8156576 5.8156576 -3.4091773 2.8075578">Inspiration</tspan></text>
+ <rect id="d0e672" display="none" height="1000px" width="288" y="4507.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e672"/>
</flowRegion>
<flowDiv xml:space="preserve">もちろん、テキストをパスに変換 (<flowSpan font-weight="bold">Shift+Ctrl+C</flowSpan>) して、パスとして動かすことも可能です。しかし、テキストはテキストのままで編集可能にしておく方がより便利です。カーニングの削除や文字間の調整を施していないさまざまなフォントで試してみると、テキストは保存ファイルがとても小さくなるのがわかります。テキストをテキストとしておくことの唯一の欠点は SVG ドキュメントを開くあらゆるシステムにオリジナルのフォントをインストールしておく必要があることです。</flowDiv>
</flowRoot>
- <rect id="d0e678" display="none" height="1000px" width="288" y="4546.4" x="10"/>
+ <rect id="d0e678" display="none" height="1000px" width="288" y="4590.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e678"/>
</flowRegion>
<flowDiv xml:space="preserve">文字間隔の調節と似て、複数行のテキストオブジェクトの<flowSpan font-style="italic">行間の調節</flowSpan>も行うことができます。 <flowSpan font-weight="bold">Ctrl+Alt+&lt;</flowSpan> と <flowSpan font-weight="bold">Ctrl+Alt+&gt;</flowSpan> キーでチュートリアル中のどの段落の高さでも現在のズームレベルで 1 ピクセルごとに調整できることを試してみましょう。選択ツールと同様、<flowSpan font-weight="bold">Shift</flowSpan> を押すことで調整のショートカットも 10 倍の値で変化します。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="4621.467225999999" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="4621.467225999999" x="10">XML エディタ</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="4666.504653" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="4666.504653" x="10">XML エディタ</tspan>
</text>
- <rect id="d0e699" display="none" height="1000px" width="288" y="4626.7" x="10"/>
+ <rect id="d0e699" display="none" height="1000px" width="288" y="4671.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e699"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape における究極の強力なツールは XML エディタ (<flowSpan font-weight="bold">Shift+Ctrl+X</flowSpan>) です。XML エディタはドキュメントの XML ツリー全体を表示し、現在の状態が常に反映され、絵を編集して、相当する XML ツリーの変化を見ることができます。さらに、XML エディタ上で、テキスト、要素、属性ノードを編集してキャンバスでその結果を確認することもできます。これは SVG を対話的に学ぶための想像しうる最高のツールであり、通常の編集ツールではできないワザを使うこともできます。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="4724.520274999999" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="4724.520274999999" x="10">最後に</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="4769.557702" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="4769.557702" x="10">最後に</tspan>
</text>
- <rect id="d0e711" display="none" height="1000px" width="288" y="4729.7" x="10"/>
+ <rect id="d0e711" display="none" height="1000px" width="288" y="4774.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e711"/>
</flowRegion>
<flowDiv xml:space="preserve">このチュートリアルは Inkscape の機能のごく一部についてのみ紹介しています。このチュートリアルを楽しんでいただけたなら幸いです。実験することを恐れず、作り出したものは共有しましょう。<flowSpan font-weight="bold" font-family="sans serif">www.inkscape.org</flowSpan> を訪れてより多くの情報と、最新のバージョン、ユーザと開発者からのヘルプに触れてみてください。</flowDiv>
</flowRoot>
- <g transform="translate(0, 4791.088818999999)">
+ <g transform="translate(0, 4836.126246)">
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
<linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.149642,0.000000,0.000000,0.465194,-0.130153,3495.428)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
<radialGradient id="radialGradient2456" xlink:href="#linearGradient666" gradientUnits="userSpaceOnUse" cy="1036.5" cx="233.92" gradientTransform="scale(1.825742,0.547723)" r="98.26" inkscape:collect="always"/>
diff --git a/share/tutorials/tutorial-advanced.nl.svg b/share/tutorials/tutorial-advanced.nl.svg
index 7306e1cc6..de84ba34e 100644
--- a/share/tutorials/tutorial-advanced.nl.svg
+++ b/share/tutorials/tutorial-advanced.nl.svg
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- DO NOT EDIT THIS FILE. It is produced automatically from a DocBook source (*.xml) by tutorial-svg.xsl. -->
<svg id="svg1" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="tutorial-basic.svg" xmlns:string="http://www.jclark.com/xt/java/java.lang.String" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:version="0.32" height="3170pt" width="256pt" version="1.1" xmlns:cc="http://web.resource.org/cc/" xmlns:xlink="http://www.w3.org/1999/xlink" inkscape:version="0.48" xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview id="base" inkscape:window-x="0" inkscape:window-y="0" snaptoguides="true" inkscape:zoom="2.0000000" inkscape:cx="160.00000" inkscape:cy="3864.0000" inkscape:window-width="780" showborder="false" inkscape:window-height="580" showguides="true"/>
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
@@ -200,7 +201,7 @@ drawing, path manipulation, booleans, offsets, simplification, and text tool.
<flowRegion>
<use y="0" x="0" xlink:href="#d0e287"/>
</flowRegion>
- <flowDiv xml:space="preserve">Also, you can <flowSpan font-style="italic">retract</flowSpan> a node's handle altogether by
+ <flowDiv xml:space="preserve">Also, you can <flowSpan font-style="italic">retract</flowSpan> a node&apos;s handle altogether by
<flowSpan font-weight="bold">Ctrl+click</flowSpan>ing on it. If two adjacent nodes have their handles
retracted, the path segment between them is a straight line. To pull out the retracted
node, <flowSpan font-weight="bold">Shift+drag</flowSpan> away from the node.
@@ -334,7 +335,7 @@ node, <flowSpan font-weight="bold">Shift+drag</flowSpan> away from the node.
<flowRegion>
<use y="0" x="0" xlink:href="#d0e482"/>
</flowRegion>
- <flowDiv xml:space="preserve">De ruwe opdrachten <flowSpan font-family="sans serif">Vernauwen</flowSpan> en <flowSpan font-family="sans serif">Verwijden</flowSpan> maken paden (het origineel object wordt een pad indien het nog geen pad is). Bijgevolg is de <flowSpan font-family="sans serif">Dynamische rand</flowSpan> (<flowSpan font-weight="bold">Ctrl+J</flowSpan>) vaak handiger dat een object maakt met een versleepbaar handvat (vergelijkbaar met een handvat van een vorm) dat de verplaatsing bepaalt. Selecteer het onderstaande object, ga naar het knooppuntengereedschap rn versleep het handvat om een idee te krijgen:</flowDiv>
+ <flowDiv xml:space="preserve">De ruwe opdrachten <flowSpan font-family="sans serif">Vernauwen</flowSpan> en <flowSpan font-family="sans serif">Verwijden</flowSpan> maken paden (het origineel object wordt een pad indien het nog geen pad is). Bijgevolg is de <flowSpan font-family="sans serif">Dynamische offset</flowSpan> (<flowSpan font-weight="bold">Ctrl+J</flowSpan>) vaak handiger dat een object maakt met een versleepbaar handvat (vergelijkbaar met een handvat van een vorm) dat de verplaatsing bepaalt. Selecteer het onderstaande object, ga naar het knooppuntengereedschap en versleep het handvat om een idee te krijgen:</flowDiv>
</flowRoot>
<path id="advanced-f10-nl.svgpath1527" sodipodi:type="inkscape:offset" d="M101,3463c-0.1,0.1-0.13,0.1-0.28,0.4-3.882,6.6-5.68,15.3-6.751,23.5-2.2,16.8,5.598,36.6,21.971,42.7,7.97,2.9,13.1,5,16.59,7.4,3.12,2.1,4.89,4.3,6.16,7.3,0.83-3.4,2.14-5.7,4.09-7.2,2.17-1.7,5.05-2.3,8.63-2.3,8.16-0.1,14.64,4.8,20.47,9.2,3.11,2.3,7.24,3.2,11,2.6,3.75-0.6,7.06-2.7,8.68-6.4,1.63-3.6,1.01-7.3-0.78-10.6-1.79-3.4-4.74-6.4-7.72-8.5-7.49-5.4-17.33-5.6-25.75-2.2-3.34,1.4-6.19,4.2-9.09,6.7s-5.9,4.7-9.53,4.9c-3.86,0.1-8.09-1.1-11.38-3.7s-5.62-6.7-5.62-12.1c-0.01-0.2,0.04-0.3,0.11-0.3,0.08-0.1,0.19-0.2,0.29-0.2,3.08,0,8.03,0.6,13.5,1,5.48,0.4,11.47,0.5,16.6-0.2,8.18-1.1,17.36-5.9,21.28-13.6,3.78-7.4,10.44-16.4,22.65-18.6-10.72-0.5-19.35-0.5-27.24,0.4-3.9,0.5-6.54,2.4-8.35,5.1s-2.73,6.3-3.09,9.8c-0.47,4.6-3.5,7.8-7.38,9.8s-8.62,2.7-12.68,2.3c-3.24-0.4-6.92-1-10-2.6-3.09-1.5-5.59-4-6.35-8-0.29-1.5,0.1-3.2,0.88-4.8,0.77-1.5,1.94-3,3.18-4.1,1.25-1.1,2.59-1.8,3.85-1.6,0.63,0,1.22,0.3,1.68,0.8,0.47,0.6,0.8,1.3,1,2.3,0.75,3.6,3.5,6.2,6.19,7,1.35,0.3,2.66,0.2,3.75-0.4,1.1-0.7,2.01-1.9,2.47-3.8,1.71-7.3-3.75-14.3-10.69-16.5-4.46-1.4-9.94-0.3-14,2.3s-6.67,6.6-5.62,11.1c0.37,1.6,0.35,2.8,0,3.7s-1.07,1.5-1.91,1.6c-1.68,0.3-3.81-0.6-5.59-2-7.058-5.9-7.324-15.6-6.408-23.7,0.105-0.9,0.618-3.4,0.938-5.5,0.16-1.1,0.27-2.1,0.28-2.7,0-0.2-0.02-0.2-0.03-0.3z" inkscape:original="M 101.062500 3462.343750 C 100.902800 3462.433706 100.664673 3462.696654 100.375000 3463.187500 C 96.443695 3469.848900 94.636933 3478.639228 93.562500 3486.843750 C 91.341517 3503.803250 99.219050 3523.756139 115.812500 3529.968750 C 131.737740 3535.680450 136.252411 3538.608005 138.781250 3545.468750 C 140.362240 3537.645750 144.344522 3535.190852 151.406250 3535.156250 C 159.407750 3535.117050 165.798568 3539.886947 171.625000 3544.281250 C 178.046330 3549.124050 188.581246 3547.905311 191.937500 3540.406250 C 195.306020 3532.879850 189.320260 3525.100477 183.281250 3520.781250 C 175.660410 3515.330450 165.675465 3515.083811 157.156250 3518.562500 C 150.278600 3521.370800 145.642062 3529.805821 138.687500 3530.062500 C 131.155160 3530.340700 122.093750 3525.373600 122.093750 3514.656250 C 128.141300 3514.656250 141.893013 3516.888394 152.250000 3515.437500 C 160.536040 3514.276700 169.810637 3509.496825 173.812500 3501.625000 C 178.138690 3493.115200 186.199125 3482.625044 202.125000 3482.625000 C 188.399600 3481.926200 178.222058 3481.757977 168.843750 3482.812500 C 160.838550 3483.712600 157.759946 3490.932125 157.031250 3498.062500 C 156.129180 3506.889400 145.382449 3510.673326 137.406250 3509.781250 C 130.968270 3509.061350 122.881979 3507.244175 121.406250 3499.562500 C 120.331690 3493.969000 129.715916 3484.797919 131.250000 3492.250000 C 132.801250 3499.785400 142.499525 3503.219907 144.406250 3495.062500 C 146.166030 3487.533600 140.576047 3480.344687 133.468750 3478.093750 C 124.261060 3475.177750 111.161820 3482.666917 113.343750 3492.031250 C 114.778810 3498.190350 109.910481 3497.692485 106.468750 3494.843750 C 99.576199 3489.138750 99.307060 3479.573461 100.218750 3471.531250 C 100.413140 3469.816425 102.180400 3461.714057 101.062500 3462.343750 z " transform="translate(10, 3163.744191999999) translate(0.000000,-3462.662)" stroke="#ff0100" inkscape:radius="-0.39687219" stroke-width="0.67500001" fill="none"/>
<rect id="d0e507" display="none" height="1000px" width="288" y="3260.2" x="10"/>
@@ -342,151 +343,153 @@ node, <flowSpan font-weight="bold">Shift+drag</flowSpan> away from the node.
<flowRegion>
<use y="0" x="0" xlink:href="#d0e507"/>
</flowRegion>
- <flowDiv xml:space="preserve">Zo'n <flowSpan font-style="italic">'dynamische rand'-object</flowSpan> onthoudt het origineel pad, zodat het niet “degradeert” wanneer je de verplaatsingsafstand keer op keer aanpast. Wanneer je de aanpasbaarheid niet meer nodig hebt, kan je het 'dynamische rand'-object altijd terug converteren naar een pad.</flowDiv>
+ <flowDiv xml:space="preserve">Zo&apos;n <flowSpan font-style="italic">&apos;dynamische offset&apos;-object</flowSpan> onthoudt het origineel pad, zodat het niet “degradeert” wanneer je de verplaatsingsafstand keer op keer aanpast. Wanneer je de aanpasbaarheid niet meer nodig hebt, kan je het &apos;dynamische offset&apos;-object altijd terug converteren naar een pad.</flowDiv>
</flowRoot>
<rect id="d0e513" display="none" height="1000px" width="288" y="3310" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e513"/>
</flowRegion>
- <flowDiv xml:space="preserve">Nog handiger is een <flowSpan font-style="italic">gekoppelde rand</flowSpan>, die gelijkaardig is aan de dynamische rand, maar verbonden is met een ander pad dat bewerkbaar blijft. Je kan een willekeurig aantal gekoppelde randen hebben voor één bronpad. Hieronder is het bronpad rood, één gekoppelde rand heeft een zwarte lijn en geen vulling, de andere heeft zwarte vulling en geen lijn.</flowDiv>
+ <flowDiv xml:space="preserve">Nog handiger is een <flowSpan font-style="italic">gekoppelde offset</flowSpan>, die gelijkaardig is aan de dynamische offset, maar verbonden is met een ander pad dat bewerkbaar blijft. Je kan een willekeurig aantal gekoppelde offsets hebben voor één bronpad. Hieronder is het bronpad rood, één gekoppelde offset heeft een zwarte lijn en geen vulling, de andere heeft zwarte vulling en geen lijn.</flowDiv>
</flowRoot>
<rect id="d0e519" display="none" height="1000px" width="288" y="3381" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e519"/>
</flowRegion>
- <flowDiv xml:space="preserve">Selecteer het rode object en bewerk zijn knooppunten: zie hoe beide gelinkte randen veranderen. Selecteer nu een van de gekoppelde randen en versleep zijn handvat om de randafstand aan te passen. Noteer tot slot hoe het verplaatsen of transformeren van de bron alle gelinkte objecten verplaatst en hoe je de gelinkte objecten onafhankelijk verplaatst of transformeert zonder de connectie met de bron te verliezen.</flowDiv>
+ <flowDiv xml:space="preserve">Selecteer het rode object en bewerk zijn knooppunten: zie hoe beide gelinkte offsets veranderen. Selecteer nu een van de gekoppelde offsets en versleep zijn handvat om de offsetafstand aan te passen. Noteer tot slot hoe het verplaatsen of transformeren van de bron alle gelinkte objecten verplaatst en hoe je de gelinkte objecten onafhankelijk verplaatst of transformeert zonder de connectie met de bron te verliezen.</flowDiv>
</flowRoot>
- <path id="advanced-f11-nl.svgpath1987" stroke-linejoin="miter" d="M115.81,73.567c-16.592-6.212-28.726-20.624-26.505-37.583,1.075-8.205,7.151-22.522,11.085-29.184,2.32-3.9267,0.06,6.3875-0.16,8.3465-0.913,8.043-0.666,17.609,6.23,23.314,3.44,2.849,8.32,3.346,6.88-2.813-2.18-9.365,10.91-16.851,20.11-13.935,7.11,2.251,12.73,9.42,10.97,16.949-1.91,8.157-11.61,4.75-13.16-2.785-1.53-7.452-10.93,1.692-9.85,7.286,1.47,7.681,9.57,9.513,16.01,10.233,7.97,0.892,18.69-2.911,19.6-11.738,0.73-7.13,3.81-14.343,11.82-15.243,9.37-1.055,19.57-0.877,33.29-0.179-15.92,0-23.98,10.502-28.31,19.012-4,7.872-13.27,12.644-21.56,13.805-10.35,1.451-24.13-0.785-30.18-0.785,0,10.717,9.09,15.683,16.62,15.405,6.95-0.257,11.57-8.682,18.44-11.49,8.52-3.479,18.52-3.25,26.14,2.201,6.04,4.319,12.03,12.116,8.66,19.643-3.36,7.499-13.9,8.711-20.32,3.868-5.83-4.395-12.21-9.16-20.21-9.121-7.06,0.035-11.04,2.496-12.62,10.319-2.53-6.861-7.05-9.814-22.98-15.526z" sodipodi:nodetypes="csssssssssssscsscsssssscs" transform="translate(10, 3469.065730999999) " stroke="#ff0100" stroke-linecap="butt" stroke-width="0.67500001" fill="none"/>
- <path id="advanced-f11-nl.svgpath1988" sodipodi:type="inkscape:offset" d="M100.75,0.40625c-1,0.07921-1.912,0.36008-2.438,0.65625-2.625,1.4789-2.276,2.1032-2.75,2.9063-4.431,7.5092-10.464,21.227-11.781,31.281-2.613,19.956,11.65,36.638,30.059,43.531,0.03,0.011,0.07,0.021,0.1,0.031,7.83,2.81,12.63,4.936,15.28,6.719s3.33,2.837,4.31,5.5c0.86,2.355,3.18,3.849,5.68,3.652s4.56-2.035,5.04-4.495c0.63-3.132,1.45-4.184,2.19-4.75,0.73-0.567,2.11-1.049,5-1.063,5.77-0.028,11.03,3.618,16.84,8,4.56,3.44,10.22,4.601,15.56,3.719,5.35-0.883,10.67-4.148,13.19-9.782,2.48-5.544,1.41-11.469-0.97-15.937s-5.92-7.953-9.53-10.531c-3.93-2.812-8.31-4.433-12.81-5.125,1.99-2,3.72-4.293,5.06-6.938,3.9-7.665,9.87-15.937,23.34-15.937,3.09,0.077,5.65-2.357,5.72-5.438,0.08-3.08-2.35-5.641-5.43-5.718-13.82-0.704-24.29-0.926-34.19,0.187-5.57,0.626-10.07,3.848-12.66,7.75-2.58,3.902-3.67,8.303-4.09,12.469-0.23,2.265-1.51,3.769-4.16,5.125-0.49,0.25-1.13,0.332-1.69,0.531,2.1-1.654,3.59-4.107,4.22-6.812,2.54-10.842-5.13-20.507-14.68-23.532-6.64-2.103-13.58-0.519-19.04,3-4.02,2.594-7.47,6.876-8.34,11.906-2.38-4.009-2.7-9.648-2.03-15.531,0,0.042,0.55-2.913,0.91-5.281,0.17-1.184,0.32-2.2704,0.34-3.5312,0.01-0.6305,0.18-1.1861-0.38-2.75-0.27-0.782-0.81-2.2209-2.78-3.25-0.98-0.51458-2.09-0.64171-3.09-0.5625zm26.5,40.75c1.18,2.28,2.91,4.123,4.94,5.469-0.74-0.232-1.55-0.426-2.13-0.719-1.97-0.989-2.79-1.744-3.18-3.812,0.06,0.324,0.08-0.249,0.37-0.938zm2.69,23.25c1.94,0.159,2.99,0.22,5.25,0.375,2.72,0.187,5.59,0.328,8.5,0.344-2.33,1.917-4.06,2.957-5.22,3-2.46,0.091-5.41-0.767-7.44-2.375-0.46-0.365-0.71-0.917-1.09-1.344z" xlink:href="#advanced-f11-nl.svgpath1987" inkscape:original="M 101.06250 5.9375000 C 100.90280 6.0274518 100.66467 6.3216625 100.37500 6.8125000 C 96.443695 13.473900 90.386936 27.764251 89.312500 35.968750 C 87.091517 52.928250 99.219050 67.349902 115.81250 73.562500 C 131.73774 79.274200 136.25241 82.233048 138.78125 89.093750 C 140.36224 81.270750 144.34452 78.815750 151.40625 78.781250 C 159.40775 78.742050 165.79857 83.512051 171.62500 87.906250 C 178.04633 92.749050 188.58125 91.530346 191.93750 84.031250 C 195.30602 76.504850 189.32026 68.694301 183.28125 64.375000 C 175.66041 58.924200 165.67546 58.708900 157.15625 62.187500 C 150.27860 64.995800 145.64206 73.430703 138.68750 73.687500 C 131.15516 73.965700 122.09375 68.998651 122.09375 58.281250 C 128.14130 58.281250 141.89301 60.513399 152.25000 59.062500 C 160.53604 57.901700 169.81064 53.121899 173.81250 45.250000 C 178.13869 36.740200 186.19912 26.249999 202.12500 26.250000 C 188.39960 25.551200 178.22206 25.351749 168.84375 26.406250 C 160.83855 27.306350 157.75995 34.525849 157.03125 41.656250 C 156.12918 50.483150 145.38245 54.298251 137.40625 53.406250 C 130.96827 52.686350 122.88198 50.837949 121.40625 43.156250 C 120.33169 37.562750 129.71592 28.423000 131.25000 35.875000 C 132.80125 43.410400 142.49952 46.813750 144.40625 38.656250 C 146.16603 31.127350 140.57605 23.969650 133.46875 21.718750 C 124.26106 18.802750 111.16182 26.291850 113.34375 35.656250 C 114.77881 41.815350 109.91048 41.317451 106.46875 38.468750 C 99.576199 32.763750 99.307060 23.198550 100.21875 15.156250 C 100.41314 13.441425 102.18040 5.3078377 101.06250 5.9375000 z " transform="translate(10, 3469.065730999999) translate(0.248731,0.263444)" stroke="#000" inkscape:href="#advanced-f11-nl.svgpath1987" inkscape:radius="5.5788722" stroke-width="0.67500001" fill="none"/>
- <path id="advanced-f11-nl.svgpath1989" sodipodi:type="inkscape:offset" d="M99.875,10.312c-3.751,7.194-8.534,18.916-9.437,25.813-2.141,16.342,9.562,30.303,25.782,36.375,7.99,2.865,13.15,5.017,16.75,7.438,2.68,1.805,4.28,3.929,5.56,6.312,0.88-2.615,2.05-4.799,3.81-6.156,2.36-1.808,5.4-2.451,9.07-2.469,8.46-0.041,15.07,4.978,20.9,9.375,2.93,2.212,6.89,3.055,10.44,2.469s6.62-2.545,8.13-5.907c1.52-3.396,0.96-6.81-0.76-10.031-1.71-3.22-4.6-6.145-7.5-8.219-7.24-5.182-16.81-5.416-25.03-2.062-3.15,1.286-5.98,3.976-8.9,6.5-2.93,2.524-6.04,4.949-9.97,5.094-4.04,0.149-8.43-1.104-11.88-3.844s-5.9-7.036-5.9-12.719c0-0.307,0.12-0.602,0.33-0.819,0.22-0.218,0.52-0.339,0.82-0.337,3.17,0,8.08,0.563,13.53,0.937,5.46,0.375,11.44,0.58,16.47-0.124,7.98-1.118,16.93-5.819,20.69-13.219,3.29-6.46,8.83-14.162,18.22-17.688-8.2-0.226-15.58-0.194-22.03,0.531-3.68,0.414-6.1,2.198-7.81,4.782-1.72,2.583-2.62,5.996-2.97,9.437-0.5,4.856-3.75,8.339-7.78,10.407-4.04,2.067-8.9,2.847-13.13,2.374-3.27-0.366-7.02-1.036-10.25-2.656-3.22-1.62-5.94-4.325-6.75-8.531-0.34-1.76,0.14-3.605,0.97-5.281,0.83-1.677,2.01-3.203,3.34-4.344,1.34-1.141,2.84-1.966,4.44-1.812,0.8,0.076,1.58,0.472,2.16,1.124,0.58,0.653,0.97,1.527,1.19,2.594,0.68,3.338,3.24,5.731,5.62,6.375,1.19,0.322,2.29,0.218,3.19-0.312,0.9-0.531,1.67-1.501,2.09-3.313,1.6-6.846-3.55-13.502-10.16-15.594-4.18-1.325-9.49-0.255-13.37,2.25-3.88,2.506-6.24,6.223-5.28,10.344,0.39,1.677,0.41,3.024-0.03,4.125-0.44,1.102-1.43,1.826-2.47,2.031-2.08,0.411-4.32-0.645-6.22-2.218-7.367-6.098-7.614-16.144-6.688-24.313,0.101-0.89,0.509-2.873,0.813-4.719z" fill-rule="evenodd" xlink:href="#advanced-f11-nl.svgpath1987" inkscape:original="M 101.06250 5.9375000 C 100.90280 6.0274518 100.66467 6.3216625 100.37500 6.8125000 C 96.443695 13.473900 90.386936 27.764251 89.312500 35.968750 C 87.091517 52.928250 99.219050 67.349902 115.81250 73.562500 C 131.73774 79.274200 136.25241 82.233048 138.78125 89.093750 C 140.36224 81.270750 144.34452 78.815750 151.40625 78.781250 C 159.40775 78.742050 165.79857 83.512051 171.62500 87.906250 C 178.04633 92.749050 188.58125 91.530346 191.93750 84.031250 C 195.30602 76.504850 189.32026 68.694301 183.28125 64.375000 C 175.66041 58.924200 165.67546 58.708900 157.15625 62.187500 C 150.27860 64.995800 145.64206 73.430703 138.68750 73.687500 C 131.15516 73.965700 122.09375 68.998651 122.09375 58.281250 C 128.14130 58.281250 141.89301 60.513399 152.25000 59.062500 C 160.53604 57.901700 169.81064 53.121899 173.81250 45.250000 C 178.13869 36.740200 186.19912 26.249999 202.12500 26.250000 C 188.39960 25.551200 178.22206 25.351749 168.84375 26.406250 C 160.83855 27.306350 157.75995 34.525849 157.03125 41.656250 C 156.12918 50.483150 145.38245 54.298251 137.40625 53.406250 C 130.96827 52.686350 122.88198 50.837949 121.40625 43.156250 C 120.33169 37.562750 129.71592 28.423000 131.25000 35.875000 C 132.80125 43.410400 142.49952 46.813750 144.40625 38.656250 C 146.16603 31.127350 140.57605 23.969650 133.46875 21.718750 C 124.26106 18.802750 111.16182 26.291850 113.34375 35.656250 C 114.77881 41.815350 109.91048 41.317451 106.46875 38.468750 C 99.576199 32.763750 99.307060 23.198550 100.21875 15.156250 C 100.41314 13.441425 102.18040 5.3078377 101.06250 5.9375000 z " transform="translate(10, 3469.065730999999) matrix(0.393240,0.000000,0.000000,0.393240,199.7709,1.523830)" inkscape:href="#advanced-f11-nl.svgpath1987" inkscape:radius="-1.1492475" stroke-width="0.42500001"/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3590.5333309999987" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3590.5333309999987" x="10">Vereenvoudigen</tspan>
+ <g id="advanced-f11-nl.svgg8809" xmlns:cc="http://creativecommons.org/ns#" transform="translate(10, 3469.065730999999) ">
+ <path id="advanced-f11-nl.svgpath1987" stroke-linejoin="miter" d="m113.67,73.853c-16.593-6.2126-28.727-20.624-26.506-37.584,1.0744-8.2045,7.151-22.522,11.082-29.183,2.3174-3.9267,0.06287,6.3871-0.15929,8.3469-0.91169,8.0423-0.66462,17.609,6.2279,23.314,3.4417,2.8487,8.3216,3.3459,6.8865-2.8132-2.1819-9.3644,10.903-16.851,20.11-13.935,7.1073,2.2509,12.728,9.4197,10.968,16.949-1.9067,8.1575-11.609,4.7505-13.16-2.7849-1.5341-7.452-10.93,1.6922-9.8554,7.2857,1.4757,7.6817,9.5717,9.5136,16.01,10.234,7.9762,0.892,18.699-2.9107,19.601-11.738,0.7287-7.1304,3.8134-14.344,11.819-15.244,9.3783-1.0545,19.572-0.8772,33.297-0.1784-15.926,0-23.984,10.502-28.311,19.012-4.0019,7.8719-13.273,12.644-21.559,13.805-10.357,1.4509-24.134-0.7852-30.181-0.7852,0,10.717,9.0837,15.683,16.616,15.405,6.9546-0.2568,11.568-8.6819,18.445-11.49,8.5192-3.4786,18.514-3.2501,26.134,2.2007,6.039,4.3193,12.03,12.117,8.6618,19.643-3.3562,7.4991-13.903,8.7109-20.324,3.8681-5.8264-4.3942-12.202-9.1596-20.204-9.1204-7.0617,0.0345-11.043,2.4957-12.624,10.319-2.5288-6.8607-7.0498-9.8139-22.975-15.526z" sodipodi:nodetypes="csssssssssssscsscsssssscs" inkscape:connector-curvature="0" stroke="#ff0100" stroke-linecap="butt" stroke-width="0.67500000999999998" fill="none"/>
+ <path id="advanced-f11-nl.svgpath1988" sodipodi:type="inkscape:offset" d="m98.562,0.78125c-0.98754,0.080502-1.8534,0.33118-2.375,0.625-2.4005,1.3521-2.2824,2.1356-2.7188,2.875-4.4256,7.4989-10.496,21.228-11.812,31.281-2.6107,19.935,11.668,36.582,30.062,43.469a5.5425,5.5425,0,0,0,0.0625,0.03125c7.8341,2.8098,12.648,4.9301,15.312,6.7188,2.6647,1.7887,3.3939,2.8382,4.375,5.5a5.5425,5.5425,0,0,0,10.625,-0.8125c0.63382-3.1363,1.4421-4.2082,2.1875-4.7812,0.74544-0.57309,2.1375-1.0796,5.0312-1.0938,5.7847-0.02834,10.995,3.6434,16.812,8.0312,4.5524,3.4333,10.229,4.5995,15.562,3.7188,5.3339-0.88076,10.641-4.1604,13.156-9.7812,2.4763-5.5328,1.4093-11.414-0.96875-15.875-2.378-4.4609-5.9308-7.9561-9.5312-10.531-3.9435-2.8206-8.331-4.4389-12.844-5.125,2.0148-2.0121,3.768-4.3307,5.125-7,3.9-7.671,9.89-15.969,23.38-15.969a5.5425,5.5425,0,0,0,0.28,-11.062c-13.811-0.70317-24.32-0.92557-34.219,0.1875-5.5591,0.62506-10.044,3.8239-12.625,7.7188-2.5812,3.8949-3.6371,8.3065-4.0625,12.469-0.23361,2.2859-1.5445,3.799-4.1875,5.1562-0.5351,0.2748-1.2306,0.38146-1.8438,0.59375,2.173-1.6459,3.6971-4.1709,4.3438-6.9375,2.53-10.834-5.16-20.451-14.69-23.469-6.6268-2.0987-13.583-0.51371-19.031,3-4.0336,2.6013-7.5012,6.8894-8.3438,11.938-2.415-4.0184-2.7029-9.669-2.0312-15.594-0.00075,0.0066,0.52695-2.92,0.875-5.2812,0.17402-1.1806,0.32827-2.273,0.34375-3.5312,0.008-0.62915,0.15286-1.1622-0.40625-2.7188-0.28-0.779-0.84-2.2133-2.79-3.2195-0.97-0.50311-2.07-0.61175-3.058-0.53125zm26.531,40.562c1.2096,2.3834,3.0313,4.2871,5.1562,5.6562-0.83131-0.24906-1.731-0.4586-2.375-0.78125-1.9855-0.99474-2.7893-1.7396-3.1875-3.8125,0.067,0.34873,0.008-0.25776,0.40625-1.0625zm2.5938,23.312c1.9742,0.16077,3.0414,0.21721,5.3438,0.375,2.7613,0.18924,5.6999,0.3312,8.6562,0.34375-2.3876,1.9941-4.1511,3.0185-5.3438,3.0625-2.4683,0.09116-5.4276-0.78931-7.4688-2.4062-0.48622-0.38518-0.78896-0.92091-1.1875-1.375z" xlink:href="#advanced-f11-nl.svgpath1987" inkscape:original="M 98.90625 6.25 C 98.74655 6.3399517 98.539672 6.6029125 98.25 7.09375 C 94.318695 13.75515 88.230687 28.07675 87.15625 36.28125 C 84.935267 53.24075 97.062806 67.63115 113.65625 73.84375 C 129.58149 79.55545 134.12741 82.5143 136.65625 89.375 C 138.23724 81.552 142.21952 79.097 149.28125 79.0625 C 157.28275 79.0233 163.64232 83.7933 169.46875 88.1875 C 175.89008 93.0303 186.425 91.8116 189.78125 84.3125 C 193.14977 76.7861 187.16401 68.97555 181.125 64.65625 C 173.50416 59.20545 163.51922 58.99015 155 62.46875 C 148.12235 65.27705 143.51706 73.71195 136.5625 73.96875 C 129.03016 74.24695 119.9375 69.2799 119.9375 58.5625 C 125.98505 58.5625 139.76801 60.79465 150.125 59.34375 C 158.41104 58.18295 167.68563 53.40315 171.6875 45.53125 C 176.01369 37.02145 184.07412 26.53125 200 26.53125 C 186.2746 25.83245 176.06581 25.633 166.6875 26.6875 C 158.6823 27.5876 155.6037 34.8071 154.875 41.9375 C 153.97293 50.7644 143.25745 54.5795 135.28125 53.6875 C 128.84327 52.9676 120.72573 51.1192 119.25 43.4375 C 118.17544 37.844 127.59091 28.70425 129.125 36.15625 C 130.67625 43.69165 140.37452 47.095 142.28125 38.9375 C 144.04103 31.4086 138.41979 24.2509 131.3125 22 C 122.10481 19.084 109.00557 26.5731 111.1875 35.9375 C 112.62256 42.0966 107.75423 41.5987 104.3125 38.75 C 97.419952 33.045 97.182061 23.4798 98.09375 15.4375 C 98.28814 13.722675 100.02415 5.6203379 98.90625 6.25 z " stroke="#000" inkscape:href="#advanced-f11-nl.svgpath1987" inkscape:radius="5.5419211" stroke-width="0.67500000999999998" fill="none"/>
+ <path id="advanced-f11-nl.svgpath1989" sodipodi:type="inkscape:offset" d="m97.719,14.656c-3.7525,7.2074-8.5372,18.906-9.4375,25.781-2.1384,16.329,9.5505,30.232,25.75,36.312,0.0131,0.0049,0.0182,0.02636,0.0312,0.03125,7.9637,2.8574,13.152,5.0224,16.75,7.4375,2.6896,1.8054,4.3093,3.9294,5.5938,6.3125,0.88173-2.6151,2.0476-4.7994,3.8125-6.1562,2.3518-1.808,5.3995-2.4509,9.0625-2.4688,8.4612-0.04145,15.047,4.9795,20.875,9.375,2.9324,2.2116,6.8881,3.0549,10.438,2.4688,3.5494-0.5861,6.6206-2.5448,8.125-5.9062,1.52-3.3962,0.96665-6.811-0.75-10.031-1.7166-3.2203-4.601-6.1453-7.5-8.2188-7.2461-5.1828-16.818-5.416-25.031-2.0625-3.1491,1.2859-5.957,3.9756-8.875,6.5s-6.0371,4.9486-9.9688,5.0938c-4.0353,0.14904-8.4169-1.1043-11.875-3.8438s-5.9375-7.035-5.9375-12.719a1.1494,1.1494,0,0,1,1.1562,-1.1562c3.1652,0,8.0964,0.5629,13.562,0.9375,5.4661,0.3746,11.44,0.5795,16.469-0.125,7.9735-1.117,16.926-5.8187,20.688-13.219,3.2842-6.4602,8.8316-14.162,18.219-17.688-8.2126-0.22588-15.607-0.19463-22.062,0.53125-3.6798,0.41376-6.1004,2.1978-7.8125,4.7812s-2.617,5.9961-2.9688,9.4375c-0.49612,4.8546-3.755,8.3386-7.7812,10.406-4.0262,2.0676-8.8693,2.8474-13.094,2.375-3.2739-0.36609-7.0484-1.0366-10.281-2.6562-3.2328-1.6196-5.9417-4.3238-6.75-8.5312-0.33824-1.7607,0.13908-3.6045,0.96875-5.2812,0.82967-1.6768,2.0355-3.2035,3.375-4.3438s2.8374-1.9659,4.4375-1.8125c0.80004,0.07669,1.5763,0.47274,2.1562,1.125,0.57992,0.65226,0.96765,1.5258,1.1875,2.5938,0.68714,3.3379,3.2442,5.7308,5.625,6.375,1.1904,0.32212,2.2898,0.21819,3.1875-0.3125s1.6702-1.5006,2.0938-3.3125c1.5996-6.8435-3.5825-13.502-10.188-15.594-4.1843-1.3251-9.4906-0.25509-13.375,2.25s-6.2415,6.2225-5.2812,10.344c0.39058,1.6763,0.40714,3.0234-0.0312,4.125-0.43839,1.1016-1.4277,1.8261-2.4688,2.0312-2.0822,0.4104-4.3182-0.64566-6.2188-2.2188-7.3686-6.099-7.5819-16.147-6.6562-24.312,0.09953-0.87798,0.48514-2.8307,0.78125-4.6562z" fill-rule="evenodd" xlink:href="#advanced-f11-nl.svgpath1987" inkscape:original="M 98.90625 6.25 C 98.74655 6.3399517 98.539672 6.6029125 98.25 7.09375 C 94.318695 13.75515 88.230687 28.07675 87.15625 36.28125 C 84.935267 53.24075 97.062806 67.63115 113.65625 73.84375 C 129.58149 79.55545 134.12741 82.5143 136.65625 89.375 C 138.23724 81.552 142.21952 79.097 149.28125 79.0625 C 157.28275 79.0233 163.64232 83.7933 169.46875 88.1875 C 175.89008 93.0303 186.425 91.8116 189.78125 84.3125 C 193.14977 76.7861 187.16401 68.97555 181.125 64.65625 C 173.50416 59.20545 163.51922 58.99015 155 62.46875 C 148.12235 65.27705 143.51706 73.71195 136.5625 73.96875 C 129.03016 74.24695 119.9375 69.2799 119.9375 58.5625 C 125.98505 58.5625 139.76801 60.79465 150.125 59.34375 C 158.41104 58.18295 167.68563 53.40315 171.6875 45.53125 C 176.01369 37.02145 184.07412 26.53125 200 26.53125 C 186.2746 25.83245 176.06581 25.633 166.6875 26.6875 C 158.6823 27.5876 155.6037 34.8071 154.875 41.9375 C 153.97293 50.7644 143.25745 54.5795 135.28125 53.6875 C 128.84327 52.9676 120.72573 51.1192 119.25 43.4375 C 118.17544 37.844 127.59091 28.70425 129.125 36.15625 C 130.67625 43.69165 140.37452 47.095 142.28125 38.9375 C 144.04103 31.4086 138.41979 24.2509 131.3125 22 C 122.10481 19.084 109.00557 26.5731 111.1875 35.9375 C 112.62256 42.0966 107.75423 41.5987 104.3125 38.75 C 97.419952 33.045 97.182061 23.4798 98.09375 15.4375 C 98.28814 13.722675 100.02415 5.6203379 98.90625 6.25 z " transform="matrix(0.39324,0,0,0.39324,199.7709,1.52383)" inkscape:href="#advanced-f11-nl.svgpath1987" inkscape:radius="-1.1492475" stroke-width="0.42500000999999998"/>
+ </g>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3590.409297999999" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="3590.409297999999" x="10">Vereenvoudigen</tspan>
</text>
- <rect id="d0e538" display="none" height="1000px" width="288" y="3595.7" x="10"/>
+ <rect id="d0e538" display="none" height="1000px" width="288" y="3595.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e538"/>
</flowRegion>
- <flowDiv xml:space="preserve">De belangrijkste toepassing van de opdracht <flowSpan font-family="sans serif">Vereenvoudigen</flowSpan> (<flowSpan font-weight="bold">Ctrl+L</flowSpan>) is het reduceren van het aantal knooppunten van een pad, maar met zo <flowSpan font-style="italic">goed</flowSpan> mogelijk behoud van de vorm. Dit kan bruikbaar zijn voor paden gemaakt met het Potlood, aangezien dat gereedschap soms meer knooppunten maakt dan nodig. Hieronder is de linkse vorm getekend uit de vrije hand en de rechtse is een vereenvoudigde kopie. Het originele pad bevat 28 knooppunten waar het vereenvoudigde pad er 17 heeft (dit betekent dat het veel eenvoudiger is om mee te werken in het knooppuntengereedschap) en is gladder.</flowDiv>
+ <flowDiv xml:space="preserve">De belangrijkste toepassing van de opdracht <flowSpan font-family="sans serif">Vereenvoudigen</flowSpan> (<flowSpan font-weight="bold">Ctrl+L</flowSpan>) is het reduceren van het aantal knooppunten van een pad, maar met zo <flowSpan font-style="italic">goed</flowSpan> mogelijk behoud van de vorm. Dit kan bruikbaar zijn voor paden gemaakt met het Potlood, aangezien dat gereedschap soms meer knooppunten maakt dan nodig. Hieronder is de linkse vorm getekend uit de vrije hand en de rechtse is een vereenvoudigde kopie. Het originele pad bevat 28 knooppunten waar het vereenvoudigde pad er 17 heeft (dit betekent dat het veel eenvoudiger is om mee te werken in het knooppuntengereedschap) en gladder is.</flowDiv>
</flowRoot>
- <path id="advanced-f12-nl.svgpath2511" d="M65.491,41.902c-0.166-1.366-0.723-7.872-1.13-10.17,0.135-2.902-0.092-6.623-0.376-9.793-0.744-4.076-0.188-7.743,0-12.053,2.061-4.2646,3.993-6.8304,6.779-9.4163,4.693,1.1534,5.894,2.56,6.78,7.1564,1.088,3.7598,0.989,7.7008,0.753,12.053,0,4.002-0.005,5.616,2.26,8.663,5.424,0.469,6.295-0.011,8.287-4.896,1.905-3.313,2.552-6.93,3.766-10.547,3.167-2.269,5.884-3.0937,9.42-4.5195,4.76-1.225,7.7-0.0601,10.92,2.2595,1.74,4.915,2.85,8.223,0.38,12.43-1.73,2.325-4.19,4.017-7.16,5.65-2.22,1.406-5.2,2.924-7.533,4.52-3.678,0.481-3.862,3.5-2.26,6.403,2.547,1.451,5.733,0.568,7.533-1.884,3.49-1.674,5-3.198,9.42-3.389,3.8,0.547,6.04,1.173,8.28,3.013,2.4,3.464,3.26,5.675,4.15,8.663-1.81,2.519-2.95,3.868-5.65,5.65-3.43,0-6.87,0.034-10.17-0.377-3.1-0.32-5.74-1.125-8.67-1.507-4.152,0-8.073,0.208-12.05,0.754-2.662,0.056-3.615,0.344-6.403,0.376-2.371,0.155-4.714,0.521-6.026,0.754-2.937-0.026-5.542-0.531-5.65-0.754-2.119,0.044-3.899,0.058-4.143,0.377" transform="translate(10, 3706.7087979999988) " stroke="#000" stroke-width="0.75127902pt" fill="none"/>
- <path id="advanced-f12-nl.svgpath2525" d="M171.97,41.902c-0.87-10.337-2.38-20.746-1.38-31.119,0.98-3.9093,3.01-8.0876,6.96-9.6974,4.69-0.4192,6.76,4.9465,7.14,8.7906,0.73,5.6198-0.93,11.53,1.28,16.937,2.74,3.423,8.29,1.043,9.56-2.588,1.71-4.439,1.84-10.153,6.21-13.01,4.72-2.666,11.1-4.9244,16.05-1.5361,5.8,4.6361,3.82,14.881-2.82,17.711-4.03,2.859-9.11,4.268-12.62,7.787-1.83,4.484,5.59,7.277,7.71,3.141,4.26-3.722,10.89-5.473,15.92-2.217,3.94,2.248,7.12,7.464,4.85,11.89-2.56,4.105-8.09,4.283-12.37,3.53-6.49-1.002-13.05-2.329-19.63-1.397-7.75,0.632-15.57,2.16-23.34,0.845-0.68,0.009-1.37,0.108-2.01,0.349" transform="translate(10, 3706.7087979999988) " stroke="#000" stroke-width="0.75127902pt" fill="none"/>
- <rect id="d0e560" display="none" height="1000px" width="288" y="3771" x="10"/>
+ <path id="advanced-f12-nl.svgpath2511" d="M65.491,41.902c-0.166-1.366-0.723-7.872-1.13-10.17,0.135-2.902-0.092-6.623-0.376-9.793-0.744-4.076-0.188-7.743,0-12.053,2.061-4.2646,3.993-6.8304,6.779-9.4163,4.693,1.1534,5.894,2.56,6.78,7.1564,1.088,3.7598,0.989,7.7008,0.753,12.053,0,4.002-0.005,5.616,2.26,8.663,5.424,0.469,6.295-0.011,8.287-4.896,1.905-3.313,2.552-6.93,3.766-10.547,3.167-2.269,5.884-3.0937,9.42-4.5195,4.76-1.225,7.7-0.0601,10.92,2.2595,1.74,4.915,2.85,8.223,0.38,12.43-1.73,2.325-4.19,4.017-7.16,5.65-2.22,1.406-5.2,2.924-7.533,4.52-3.678,0.481-3.862,3.5-2.26,6.403,2.547,1.451,5.733,0.568,7.533-1.884,3.49-1.674,5-3.198,9.42-3.389,3.8,0.547,6.04,1.173,8.28,3.013,2.4,3.464,3.26,5.675,4.15,8.663-1.81,2.519-2.95,3.868-5.65,5.65-3.43,0-6.87,0.034-10.17-0.377-3.1-0.32-5.74-1.125-8.67-1.507-4.152,0-8.073,0.208-12.05,0.754-2.662,0.056-3.615,0.344-6.403,0.376-2.371,0.155-4.714,0.521-6.026,0.754-2.937-0.026-5.542-0.531-5.65-0.754-2.119,0.044-3.899,0.058-4.143,0.377" transform="translate(10, 3706.584764999999) " stroke="#000" stroke-width="0.75127902pt" fill="none"/>
+ <path id="advanced-f12-nl.svgpath2525" d="M171.97,41.902c-0.87-10.337-2.38-20.746-1.38-31.119,0.98-3.9093,3.01-8.0876,6.96-9.6974,4.69-0.4192,6.76,4.9465,7.14,8.7906,0.73,5.6198-0.93,11.53,1.28,16.937,2.74,3.423,8.29,1.043,9.56-2.588,1.71-4.439,1.84-10.153,6.21-13.01,4.72-2.666,11.1-4.9244,16.05-1.5361,5.8,4.6361,3.82,14.881-2.82,17.711-4.03,2.859-9.11,4.268-12.62,7.787-1.83,4.484,5.59,7.277,7.71,3.141,4.26-3.722,10.89-5.473,15.92-2.217,3.94,2.248,7.12,7.464,4.85,11.89-2.56,4.105-8.09,4.283-12.37,3.53-6.49-1.002-13.05-2.329-19.63-1.397-7.75,0.632-15.57,2.16-23.34,0.845-0.68,0.009-1.37,0.108-2.01,0.349" transform="translate(10, 3706.584764999999) " stroke="#000" stroke-width="0.75127902pt" fill="none"/>
+ <rect id="d0e560" display="none" height="1000px" width="288" y="3770.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e560"/>
</flowRegion>
<flowDiv xml:space="preserve">De mate van vereenvoudigen (de <flowSpan font-style="italic">grenswaarde</flowSpan> genoemd) hangt af van de grootte van de selectie. Indien je bijgevolg een pad samen met een groter object selecteert, zal het meer aggressief vereenvoudigd worden dan wanneer je het pad alleen selecteert. De opdracht <flowSpan font-family="sans serif">Vereenvoudigen</flowSpan> is bovendien <flowSpan font-style="italic">versneld</flowSpan>. Dit betekent dat wanneer je verschillende keren snel achtereen ( 0.5 sec) op Ctrl+L drukt, de grenswaarde elke keer verhoogt. (Indien je opnieuw vereenvoudigt na een kleine pauze, is de grenswaarde opnieuw de standaardwaarde.) Door gebruik te maken van de versnelling, is het eenvoudig om de juiste hoeveelheid vereenvoudiging toe te passen voor elke situatie.</flowDiv>
</flowRoot>
- <rect id="d0e572" display="none" height="1000px" width="288" y="3884.7" x="10"/>
+ <rect id="d0e572" display="none" height="1000px" width="288" y="3884.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e572"/>
</flowRegion>
<flowDiv xml:space="preserve">Behalve het glad maken van vrij getekende lijnen, kan <flowSpan font-family="sans serif">Vereenvoudigen</flowSpan> gebruikt worden voor diverse creatieve effecten. Een vorm die rigide en geometrische is, heeft vaak voordeel bij een bepaalde mate van vereenvoudiging voor coole realistische veralgemeningen van het origineel - afronden van scherpe hoeken en introduceren van natuurlijke vervormingen, soms stijlvol en soms gewoon grappig. Hier is een voorbeeld van een clipart vorm die veel leuker oogt na <flowSpan font-family="sans serif">Vereenvoudigen</flowSpan>:</flowDiv>
</flowRoot>
- <text id="advanced-f13-nl.svgtext2796" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3984.997887999999) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="43.765549" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-nl.svgtspan2797" y="4.2366295" x="43.765549" role="line">Origineel</tspan></text>
- <text id="advanced-f13-nl.svgtext2799" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3984.997887999999) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="125.61612" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-nl.svgtspan2800" y="4.2366295" x="125.61612" role="line">Lichte vereenvoudiging</tspan></text>
- <text id="advanced-f13-nl.svgtext2802" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3984.997887999999) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="213.13528" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-nl.svgtspan2803" y="4.2366295" x="213.13528" role="line">Agressieve vereenvoudiging</tspan></text>
- <path id="advanced-f13-nl.svgpath2786" d="M97.048,92.194l0.322,9.646-1.286,4.07-1.608,0.64v3.86l-0.964-0.1,0.214,4.82-1.715,0.21-0.857,10.61,6.537,4.18-1.714,2.68-10.717-1.93-10.395,1.93-1.715-2.68,5.251-3.32-5.787-1.18-11.253,2.36v-1.39l7.074-5.36-1.929-18.86c-1.215-0.22-2.394-0.54-3.537-0.97l-1.5-16.075-2.572-0.428-1.179-3.323-0.965,0.215-2.465,33.011-2.036,0.53,9.109,5.9-1.178,3-14.79-3.22-6.001,1.4-0.429,4.71,5.466,4.93c-0.286,0.29-0.464,0.68-0.536,1.18-0.071,0.5-0.286,0.75-0.643,0.75-0.214,0-0.357-0.04-0.429-0.11l-9.216-1.61-9.859,1.72-0.858-1.93,5.466-4.71-1.179-12.22h-1.393c-0.143-1.22-0.25-2.43-0.322-3.65-0.071-1.14-0.143-2.32-0.214-3.53l-1.179-0.86-2.25-4.07,0.643-11.79h-1.286l1.286-7.716c0.285-0.858,0.714-1.501,1.286-1.93,0.643-0.428,1.321-0.749,2.036-0.964,0.786-0.214,1.572-0.393,2.357-0.536,0.858-0.143,1.644-0.357,2.358-0.643l0.536,2.358-5.787,1.393c-0.429,0.357-0.643,0.786-0.643,1.286l-0.857,4.394h2.572v-1.607h2.143v6.322h10.288v-6.322h2.143v1.607h2.572l-0.964-4.715c-0.071-0.358-0.214-0.608-0.429-0.751-0.143-0.142-0.286-0.285-0.428-0.428l-5.895-1.394,0.643-2.143,6.216,1.715c0.572,0.286,1.108,0.786,1.608,1.5v-6.966c-0.358,0.572-0.858,1.072-1.501,1.5-0.643,0.358-1.321,0.644-2.036,0.858-0.286-1.143-0.429-2.25-0.429-3.322v-1.286c0-0.5,0.072-1.072,0.215-1.715,0-0.714-0.179-1.143-0.536-1.286-0.286-0.143-0.643-0.214-1.072-0.214,0.143,0.357,0.25,0.75,0.322,1.179,0.071,0.357,0.107,0.785,0.107,1.286,0,1.786-0.572,3.322-1.715,4.608-1.143,1.215-2.536,1.822-4.179,1.822-1.572,0-2.93-0.607-4.073-1.822-1.143-1.286-1.714-2.822-1.714-4.608,0-1.001,0.178-1.822,0.535-2.465-0.428,0-0.821,0.071-1.178,0.214-0.358,0.143-0.536,0.5-0.536,1.072v0.214c0.214,1.215,0.321,2.179,0.321,2.894,0,1-0.214,2.143-0.643,3.429-0.786-0.214-1.607-0.607-2.465-1.178-0.785-0.572-1.25-1.287-1.393-2.144-0.143-0.572-0.214-1-0.214-1.286,0-1.358,0.571-2.501,1.715-3.43,0.857-0.5,1.75-0.75,2.679-0.75l1.071,0.107-1.393-32.578,15.647-4.287c-1.215-0.714-2.179-1.75-2.894-3.108-0.714-1.357-1.071-2.858-1.071-4.501,0-2.501,0.714-4.573,2.143-6.216,1.5-1.715,3.286-2.572,5.358-2.572s3.858,0.857,5.359,2.572c1.5,1.643,2.25,3.715,2.25,6.216,0,1.643-0.393,3.144-1.179,4.501-0.714,1.358-1.679,2.394-2.893,3.108l16.075,4.287-0.214,5.465,4.822-1.179,0.643,2.358c-0.5,0.214-0.821,0.572-0.964,1.072-0.143,0.428-0.215,0.928-0.215,1.5,0,0.786,0.072,1.571,0.215,2.358,0.214,0.785,0.393,1.321,0.536,1.607h6.108c0.572-1.643,0.857-3.001,0.857-4.072,0-0.929-0.214-1.608-0.643-2.036-0.214-0.215-0.393-0.358-0.535-0.429l0.535-2.358,11.253,2.358,2.143,21.862h0.751l-0.215,2.679c1,1.358,1.501,2.787,1.501,4.287,0,0.715-0.108,1.322-0.322,1.822-0.357,0.929-0.893,1.75-1.607,2.465-0.715,0.642-1.501,1.143-2.358,1.5l7.073,1.929c0.357,0.215,0.75,0.464,1.179,0.751,0.428,0.285,0.679,0.749,0.75,1.392l2.25,10.074h-1.393zm-52.833-44.582l-5.895-11.574c-1.571,0.5-3.179,0.965-4.822,1.394-1.572,0.428-3.179,0.857-4.823,1.285l1.179,28.936c0.357-0.143,0.679-0.322,0.965-0.536,0.357-0.286,0.714-0.5,1.071-0.643v-24.22h2.465v24.22c0.929,0.143,1.715,0.464,2.358,0.964,0.714,0.5,1.25,1.144,1.607,1.929,0.286-0.071,0.786-0.107,1.501-0.107,0.714,0,1.214,0.036,1.5,0.107l2.894-1.178v-20.577zm50.154,36.223c-0.071-0.429-0.25-0.821-0.536-1.179-0.214-0.428-0.643-0.714-1.286-0.857l-7.287-1.822-7.395,1.822c-0.643,0.143-1.071,0.393-1.286,0.75-0.143,0.286-0.321,0.715-0.536,1.286l-1.286,6.001h2.894l0.321-3.965,2.251,0.215-1.822,20.794,13.718,1.07-1.822-21.864,2.25-0.215,0.536,3.965h2.786l-1.5-6.001zm-36.973-46.403c-1.643-0.429-3.286-0.894-4.929-1.394l-5.895,11.574v20.577l9.217,3,2.465-27.756,3.75-0.75,0.322-3.966-4.93-1.285zm-10.824,33.543v43.835l5.359-1.83,2.893-39.112-8.252-2.893zm24.756-12.217c-1-2.001-2.072-4.037-3.215-6.109-1.072-2.071-1.607-4.393-1.607-6.965,0-0.715,0.035-1.251,0.107-1.608-0.143,0.071-0.536,0.178-1.179,0.322-0.572,0.142-1.215,0.321-1.929,0.535-0.643,0.143-1.25,0.286-1.822,0.429-0.572,0.071-0.929,0.107-1.072,0.107l-2.786,30.757,3.322,0.215,1.393-25.292,2.465,0.214-1.393,25.399c1.215,0,2.465-0.107,3.751-0.321,1.286-0.215,2.465-0.679,3.536-1.394-1.286-1.715-1.929-3.786-1.929-6.215,0-1.715,0.25-3.465,0.751-5.252,0.5-1.786,1.035-3.393,1.607-4.822zm13.61-13.289l-6.001-1.179c0.071,0.286,0.107,0.572,0.107,0.858v0.643c0,1.214-0.178,2.393-0.536,3.536-0.285,1.072-0.678,2.143-1.179,3.215-0.5,1-1.036,2.036-1.607,3.108-0.5,1-1,2.036-1.5,3.108-0.715,1.572-1.358,3.215-1.929,4.93-0.572,1.643-0.858,3.322-0.858,5.037,0,1,0.179,2.143,0.536,3.429,0.786,1.714,2.001,2.893,3.644,3.536,1.643,0.572,3.358,0.929,5.144,1.072-0.357-0.428-0.715-0.929-1.072-1.5-0.357-0.572-0.607-1.143-0.75-1.715-0.071-0.286-0.143-0.536-0.214-0.75v-0.75c0-0.643,0.071-1.251,0.214-1.822,0.214-0.572,0.464-1.107,0.75-1.607l-0.107-2.787,1.715-0.215-0.751-14.253h2.465l0.751,13.932,1.071-0.214h1.929l-1.822-19.612zm-5.251,33.651c-1.214-0.143-2.429-0.358-3.644-0.643-1.143-0.357-2.179-0.893-3.107-1.607-1.429,1-2.965,1.643-4.609,1.928-1.571,0.286-3.179,0.429-4.822,0.429l1.714,20.255,7.395,2.358h0.536v-0.43l0.429-9.216c-0.215-0.143-0.465-0.214-0.751-0.214h-0.75l2.144-9.86c0.142-0.643,0.393-1.107,0.75-1.392,0.428-0.287,0.821-0.536,1.179-0.751l3.536-0.857zm-40.295,32.79l0.214-3.85c0.072-1.29,0.108-2.54,0.108-3.76,0-1.42-0.072-2.85-0.215-4.28-0.071-1.432-0.286-2.789-0.643-4.075h-10.502c-0.357,1.358-0.607,2.751-0.75,4.175-0.072,1.36-0.108,2.76-0.108,4.18,0,1.43,0.036,2.86,0.108,4.29,0.071,1.43,0.178,2.82,0.321,4.18h11.467v-0.86zm39.545-76.729c-0.214,1.215-0.786,2.393-1.715,3.536-0.857,1.143-1.893,1.858-3.108,2.144-0.285,0.071-0.714,0.107-1.286,0.107-1.929,0-3.572-0.857-4.929-2.572-0.358-0.572-0.643-1.107-0.858-1.607-0.214-0.5-0.357-1.036-0.428-1.608h-1.394v-0.75c0-1.786,0.358-3.43,1.072-4.93,0.715-1.5,1.858-2.751,3.43-3.751,0.571-0.286,1.214-0.428,1.929-0.428,0.714-0.072,1.428-0.108,2.143-0.108,1.643,0.357,2.893,1,3.751,1.929,0.929,0.929,1.572,1.929,1.929,3.001,0.428,1,0.679,2,0.75,3.001,0.071,0.929,0.107,1.607,0.107,2.036h-1.393zm-29.685-12.432c-0.572-0.357-1.144-0.642-1.715-0.857-0.215-0.071-0.5-0.107-0.858-0.107-0.714,0-1.464,0.179-2.25,0.536-0.714,0.357-1.393,0.715-2.036,1.071-0.786,0.429-1.501,0.929-2.144,1.501v0.321c0.143,1.215,0.501,2.394,1.072,3.537,0.643,1.072,1.572,1.857,2.786,2.357,0.286,0.072,0.679,0.108,1.179,0.108,1.215,0,2.251-0.429,3.108-1.286,1.286-1.358,1.929-3.001,1.929-4.93,0-0.357-0.071-0.893-0.214-1.608l-0.857-0.643zm39.866,49.298c0-1.572-0.5-2.644-1.5-3.215l-2.572-0.965-3.001,1.286c-0.357,0.429-0.643,0.893-0.858,1.393-0.214,0.429-0.321,0.929-0.321,1.501,0,1.214,0.429,2.215,1.286,3,0.857,0.715,1.822,1.072,2.894,1.072,1.143,0,2.107-0.357,2.893-1.072,0.786-0.785,1.179-1.786,1.179-3zm-43.832-38.045l-4.394,1.5,4.501,8.788,4.609-8.788-4.716-1.5zm-8.252,38.902c0-0.286-0.035-0.608-0.107-0.964-0.071-0.358-0.178-0.608-0.321-0.751l-1.072-0.428c-0.357-0.143-0.714-0.25-1.072-0.322-0.357-0.071-0.714-0.107-1.071-0.107-0.358,0-0.715,0.036-1.072,0.107-0.357,0.072-0.714,0.179-1.072,0.322-0.357,0.143-0.75,0.285-1.179,0.428-0.142,0.715-0.214,1.287-0.214,1.715,0,1.072,0.322,2,0.965,2.786,0.714,0.786,1.571,1.18,2.572,1.18,1,0,1.857-0.394,2.572-1.18,0.714-0.786,1.071-1.714,1.071-2.786zm39.009-41.796c-1.143,0.858-2.322,1.644-3.536,2.358-1.143,0.644-2.322,1.144-3.537,1.5,0.215,0.715,0.5,1.323,0.858,1.823,0.357,0.428,0.75,0.821,1.179,1.179,0.5,0.356,1.107,0.535,1.821,0.535h0.215c1.286-0.143,2.215-0.857,2.786-2.143,0.429-0.714,0.643-1.608,0.643-2.679,0-0.429-0.036-0.858-0.107-1.286-0.072-0.5-0.179-0.929-0.322-1.287zm-4.286,73.092l-2.787-0.86,1.929,18.11,0.858,0.22v-17.47zm-37.08,10.93v12.22h2.036v-0.22l1.072-12h-3.108zm-2.251,0h-3.001l1.179,12.22h1.822v-12.22zm51.655,0.21h-3.322l0.964,10.08h2.465l-0.107-10.08zm2.358,0v10.08h2.465l0.857-10.08h-3.322zm-10.288-8.79l-1.715-0.64-0.214-1.39v17.15l0.535-0.22,1.394-12.54v-2.36zm-32.044-1.17l-1.071,1.71-1.179,0.64-0.429,6.22c0.215,0.07,0.465,0.14,0.75,0.21,0.215,0.07,0.501,0.15,0.858,0.22,0.357,0.14,0.75,0.28,1.179,0.43l-0.108-9.43zm-19.397-14.15l-0.643,11.15,1.179,2.35v-1.39c0-1.86,0.143-3.608,0.429-5.252,0.357-1.643,0.535-3.393,0.535-5.251l-0.107-1.607h-1.393zm59.478,19.93c0-0.57-0.036-1.14-0.107-1.71l-4.501-0.22-0.214,3.75h4.822v-1.82zm-41.795-19.93h-1.286c-0.072,0.357-0.107,0.678-0.107,0.964v0.75l0.964,10.186-0.107,1.6,1.179-2.14-0.643-11.36zm52.405,0.964h-1.608l0.965,12.006,0.107,0.1,0.107-0.1,0.965-2.79-0.536-9.216zm-18.969,0l-0.429,9.216,0.751,2.79c0.142,0,0.214,0.03,0.214,0.1h0.107l0.107-0.1,0.75-12.006h-1.5zm15.325,17.896c-0.786,0-1.572-0.03-2.358-0.11-0.786-0.07-1.571-0.17-2.357-0.32v3.32h4.929l-0.214-2.89zm-12.646,5.25h-0.536l-0.643,5.68,1.822,1.18-0.643-6.86zm-17.682-36.22l-1.715-0.322,1.5,3.965,0.643,0.215-0.428-3.858z" stroke-width="1.0000000pt" transform="translate(10, 3984.997887999999) "/>
- <path id="advanced-f13-nl.svgpath2789" d="M191.83,92.195c1.45,7.046-0.77,13.095-3.47,18.975,0.78,4.16-3.31,6.61-2.16,11.44-3.3,5.28,11.69,7.04,3.16,10.09-4.71-1.02-9.65-2.56-14.42-0.87-2.65,1.72-9.17,0.48-5.32-2.96,7.41-2.69-3.74-3.97-6.35-2.41-2.33,1.05-10.39,2.35-5.07-1.43,8.03-3.01,3.47-11.48,3.57-17.94,0.09-3.33-0.37-4.94-3.53-5.65-1.56-4.654-1.1-9.847-1.86-14.727-0.12-2.069-4.29-1.783-3.88-5.129-2.52,4.029-1.07,10.228-2.08,15.103-0.45,6.043-0.9,12.083-1.35,18.123-4.77,2.22,10.08,4.43,6.21,8.62-4.3,1.29-9.29-1.9-13.92-2.1-5.68-1.9-10.97,4.94-4.8,8.39,4.72,2.41,0.9,5.49-2.77,3.52-5.11-2.71-12.38,2.31-15.95-0.67,3.12-3.32,7.13-6.32,4.67-11.7-0.1-5.17-2.82-8.01-2.86-13.32-5.66-3.77-1.01-12.318-3.16-16.361-0.76-4.213,0.62-10.906,6.29-11.275,6.4,0.351-0.05,3.232-2.83,3.538-2.22,3.126-1.07,7.85,2.5,3.812,1.16,3.39,0.19,8.356,6.2,6.323,5.7,1.9,4.59-2.933,5.45-6.313,1.7,1.281,5.06,2.945,3.62-1.104,1.4-5.093-9.91-2.958-5.9-6.483,3.18-0.414,8.68,5.412,7.14-0.844,1.91-5.888-5.24,2.049-3.91-3.307,0.93-3.027-1.58-7.48-0.99-1.929-0.18,9.225-15.77,4.403-11.14-3.382-3.63,0.907,0.5,11.323-5.28,5.897-4.15-6.165,7.91-6.126,4.39-12.416-0.38-8.972-0.76-17.945-1.15-26.917,4.59-1.62,12.6-2.728,15.05-4.665-6.28-4.254-3.31-16.719,4.84-15.975,9.26,1.024,6.71,13.152,4.22,16.803,4.57,1.851,12.53,1.466,14.7,5.284-2.14,5.52,2.9,2.257,5.04,3.836-2.62,4.317,0,10.211,5.44,7.753,3.1-3.168-2.57-11.291,4.96-7.848,5.74-0.109,8.3,2.632,7.61,8.288,0.71,5.268,0.67,10.733,1.86,15.874,2.49,4.177,1.61,9.167-1.71,12.093,6.25,0.252,9.61,4.586,9.6,10.68-0.27,1.326,2.26,4.024-0.66,3.283zm-52.84-44.583c-2.94-3.17-3.36-12.428-8.26-10.76-5.47-0.266-8.96,3.397-7,8.736,0.3,7.355,0.6,14.71,0.9,22.065,4.54-4.521,0.82-13.392,2.04-19.628-1.32-2.96,1.5-9.122,2.54-3.675,0.53,7.442-1.48,16.415,1.04,22.883,3.93,3.678,11.18,2.004,8.74-4.442v-15.179zm50.16,36.223c-4.18-4.856-13.83-4.64-18.23-0.257-1.43,2.37-1.69,9.314,1.9,5.052-1.84-4.028,4.27-2.806,1.9,0.651,0.09,5.623-2.32,13.359-0.68,17.659,3.83-0.53,11.35,2.6,12.74-0.36-0.57-6.83-1.14-13.662-1.7-20.494,3.49-1.941,2.34,7.392,5.36,2.75-0.25-1.698-1-3.298-1.29-5.001zm-36.98-46.403c-6.9-4.138-9.3,7.484-10.82,12.1,0.75,6.08-1.51,14.342,1.15,19.032,3.83,0.961,9.7,5.016,8.45-1.712,0.7-7.806,1.39-15.613,2.08-23.419,5.92,0.02,5.62-5.997-0.86-6.001zm-10.82,33.543v43.835c8.41-0.34,5.06-10.09,6.39-15.714,0.62-8.409,1.24-16.818,1.86-25.228-2.75-0.964-5.5-1.928-8.25-2.893zm24.76-12.217c-3-4.194-4.8-10.902-5.45-14.571-7.54-0.148-5.43,8.129-6.34,13.081-0.57,6.319-1.14,12.639-1.72,18.958,5.97,1.41,2.73-7.09,3.91-10.474,0.27-4.868,0.54-9.735,0.81-14.603,4.95,0.286,0.99,7.945,1.85,11.384-0.26,4.742-0.52,9.486-0.78,14.229,4.85,0.985,8.54-2.605,5.4-6.966-0.29-3.817,1-7.519,2.32-11.038zm13.61-13.288c-3.33-0.63-7.18-2.523-6.16,2.469-1.52,7.778-8.38,14.123-7.32,22.445-0.23,4.808,12.23,9.786,7.46,3.213-0.38-4.226,1.26-7.206,2.32-10.033,0.53-3.743-2.57-11.163,0.97-12.327,3.1,3.551-1.16,12.714,3.18,13.975,3.1-3.959-0.76-11.394-0.16-16.634-0.1-1.036-0.2-2.072-0.29-3.108zm-5.25,33.65c-5.01-2.273-10.21-0.981-15.12-0.233-2.07,5.278,0.61,11.973,0.41,17.808-1.27,3.885,7.55,5.835,8.21,3.935,1.02-6.763-2-10.412,0.68-17.079,0.29-3.36,3.05-3.958,5.82-4.431zm-40.3,32.79c-0.64-5.13,3.41-16.981-4.47-15.965-3.8-0.2-8.08-0.902-7.18,4.295-0.76,5.13-1.74,15.1,6.42,12.53,0.99-0.58,5.89,1.13,5.23-0.86zm39.55-76.729c-0.82,7.829-11.63,6.661-13.3,0.002-1.94-5.605,4.82-12.889,10.38-9.091,2.5,1.071,6.53,8.202,2.92,9.089zm-29.69-12.432c-6.93-5.162-12.89,8.639-3.56,8.518,3.5-0.491,6.34-5.745,3.56-8.518zm39.87,49.298c-0.63-8.657-13.58-0.718-5.83,3.723,2.54,1.603,6.03-0.835,5.83-3.723zm-43.84-38.044c-7.52,0.34-1.27,6.553,0.11,10.287,1.22-4.57,8.67-9.623-0.11-10.287zm-8.25,38.901c-1.79-7.11-12.38,2.15-4.11,3.954,2.2,0.311,4.22-1.8,4.11-3.954zm39.01-41.796c-3.41,1.376-10.45,6.334-2.82,7.374,3.16-0.602,3.83-4.835,2.82-7.374zm-4.28,73.092c-5.59-2.03-0.76,7.79-1.55,10.8-0.23,2.49,1.49,9.81,1.56,3.63-0.08-4.79,0.03-9.62-0.01-14.43zm-37.08,10.93c0.86,3.73-1.84,11.02,1.54,12.28,1.03-3.5,1.97-9.78,0.79-12.28h-2.33zm-2.26,0c-6.07-0.48-0.88,8.65-1.82,12.22,4.08-0.51,0.7-8.98,1.82-12.22zm51.66,0.21c-5.78-1.41-2.61,8.61-1.38,10.28,3.23-0.85,0.6-7.72,1.38-10.28zm2.36,0c0.23,2.59-1.29,13.69,2.63,8.74-0.7-3.24,3.32-10.53-2.63-8.74zm-10.29-8.79c-4.06-3.52-0.97,6.32-1.93,8.8-0.35,3.24,0.32,9.1,0.91,2.75,0.26-3.85,1.14-7.67,1.02-11.55zm-32.04-1.17c-2.94,1.73-4.35,10.35,0.09,8.55-0.03-2.85-0.06-5.7-0.09-8.55zm-19.4-14.15c0.28,4.214-1.68,9.03,0.33,12.84-0.55-3.4,3.22-11.64-0.33-12.84zm59.48,19.93c-0.72-5.89-9.15,1.96-2.31,1.92,1.7-0.14,2.76,0.41,2.31-1.92zm-41.8-19.93c-3.4,2.635,0.61,9.31-0.53,13.5,2.43-3.96,0.15-9.115,0.53-13.5zm52.41,0.965c-3.32,0.84-0.31,10.885-0.21,11.425,1.49-3.668,0.07-7.626,0.21-11.425zm-18.97,0c0.12,3.072-1.4,11.445,0.83,11.065-0.73-3.08,2.47-10.575-0.83-11.065zm15.32,17.895c-6.13-2.76-5.59,5.51,0.06,2.63,0.62-0.81-0.41-1.75-0.06-2.63zm-12.64,5.25c-3.02,2.36,1.09,10.32,0.33,3.58-0.1-1.19-0.22-2.38-0.33-3.58zm-17.69-36.22c-3.89-1.78,1.69,7.528,0.19,1.646-0.04-0.24-0.17-1.337-0.19-1.646z" stroke-width="1.0000000pt" transform="translate(10, 3984.997887999999) "/>
- <path id="advanced-f13-nl.svgpath2795" d="M286.61,92.195c1.73,10.245-3.77,20.235-6.8,29.375,2.77,4.43,9.29,12.64-1.06,9.64-5.65-0.31-16.37,3.82-14.05-4.6-2.84-3.18-14.35,4.46-10.78-2.84,7.7-6.54,2.34-17.84-1.36-25.229-0.62-4.229-1.21-17.585-6.15-13.717-1.7,8.995-0.97,18.266-2.47,27.316-1.29,4.25,10.98,12.59,0.71,11.01-6.98-4.44-21.11-1.22-12.58,8.34-2.14,3.4-10.61,0.37-15.3,1.67-4.68-3.02,4.89-11.49-0.25-17.16-3.71-9.72-6.68-20.331-4.79-30.691,0.07-6.547,11.78-4.847,3.23-1.67-2.73,6.045,9.88,15.008,14.39,6.841-0.61-3.752,6.14-2.574,1.12-6.696-7.69-5.089,5.26-0.149,2.74-6.202-4.75,1.088-3.59-9.162-5.01-1.02-4.16,7.948-12.66-7.672-12.14-1.318-9.65,2.941,4.7-10.84,1.31-16.479,0.2-7.576-6.01-18.798,2.72-23.543,7.61,1.254,10.79-5.296,6.97-11.079-0.15-8.62,14.65-11.134,14.68-1.372-2.4,7.562,1.51,13.53,9.57,13.368,6.76,1.808,6.22,18.387,14.23,12.035-0.63-12.042,13.97-5.359,12.73,2.936-1.95,7.935,3.4,15.402,1.74,23.297-1.9,6.014,12.28,9.73,7.27,17.831-0.23-0.014-0.67-0.043-0.67-0.043zm-52.84-44.583c-0.08-7.15-11.88-16.201-15-6.213-1.18,8.035,0.93,16.178,0.59,24.281,4.01-0.052,1.66-12.919,1.63-17.956,2.7-10.251,4.49,8.131,2.3,12.268-3.02,10.592,14.84,10.949,10.98,0.205-0.62-4.161-0.84-8.389-0.5-12.585zm50.16,36.223c-4.33-8.369-23.71-1.358-16.94,4.729,5.78-3.043-0.9,10.326,1.54,13.896,2.22,10.4,17,5.33,12.85-4.483-2.26-4.403-1.87-13.59,3.45-9.025,0.27-1.771-0.4-3.465-0.9-5.117zm-36.98-46.403c-8.85-1.837-10.79,9.521-10.69,16.008-2.87,5.999,1.15,21.939,9.02,14.339,1.94-7.849,1.3-16.277,2.53-24.346,5.97,1.428,4.08-7.941-0.86-6.001zm-10.82,33.543v43.835c8.55-2.12,5.78-12.67,6.36-19.121-0.99-7.749,6.6-20.034-3.24-23.893-0.51-0.148-2.59-0.695-3.12-0.821zm24.75-12.217c-2.35-3.902-6.18-19.179-10.9-9.338-1.07,7.984-1.56,16.114-2.1,24.152,5.93,1.068,2.39-12.048,3.5-16.872,2.54-9.635,4.53,4.48,2.29,7.949-3.22,5.041,2.82,17.762,5.64,7.002,1.04-4.365-2.08-9.196,1.57-12.893zm13.62-13.288c-9.52-2.066-7.18,11.28-11.89,15.95-6.03,4.717,2.29,20.544,6.48,11.12,1.24-6.261,0.25-14.01,2.9-19.232,1.35,2.737,2.04,14.588,3.93,5.969,0.16-4.662-1.94-9.132-1.42-13.807zm-5.26,33.65c-6.44-3.603-17.88-1.256-15.83,8.097-2.75,6.399,6.5,20.193,9.67,8.963-0.79-6.07-2.56-16.071,6.16-17.06zm-40.29,32.79c2.31-6.55-0.28-21.299-9.82-14.876-6.99,6.576-0.12,21.896,9.82,14.876zm39.54-76.729c-0.72,8.483-14.8,5.465-13.97-2.306-0.32-9.702,15.26-9.829,15.19-0.275-0.13,0.44-0.94,2.161-1.22,2.581zm-29.68-12.432c-8.51-7.329-9.63,15.326-0.45,6.694,1.61-1.76,2.31-4.84,0.45-6.694zm39.86,49.298c-1.74-10.586-13.82,6.942-2.44,3.861,1.46-0.666,2.56-2.216,2.44-3.861zm-43.83-38.044c-8.89,0.854,3.1,14.814,3.79,4.093,1.18-2.261-1.45-5.039-3.79-4.093zm-8.25,38.901c-3.02-8.504-10.1,8.305-1.34,3.041,0.89-0.731,1.36-1.901,1.34-3.041zm39.01-41.796c-8.66-1.525-1.77,13.237,0.41,3.083-0.01-0.521-0.29-2.576-0.41-3.083zm-4.29,73.092c-6.9,1.8,1.38,20.57,0.03,8.49-0.02-2.83-0.07-5.66-0.03-8.49zm-37.08,10.93c-1.71,4.45,1.43,14.82,3,5.14,0.48-2.18-0.16-5.24-3-5.14zm-2.25,0c-7.73-0.05,0.74,16.72,0.06,5.53-0.26-1.82-0.57-3.71-0.06-5.53zm51.66,0.21c-8.43-1.44,1.05,15.24,0.04,3.96-0.16-1.31-0.29-2.65-0.04-3.96zm2.36,0c-3.26,4.67,3.5,12.3,3.26,3.45,0.42-1.96-0.74-5.13-3.26-3.45zm-10.29-8.79c-5.47,1.62-0.51,18.15-0.57,7.6,0.31-2.52,0.57-5.05,0.57-7.6zm-32.05-1.17c-6.25,0.28,0.78,12.71,0.04,3.51-0.02-1.17-0.01-2.34-0.04-3.51zm-19.39-14.15c-1.3,4.676,0.18,15.02,1.52,4.882,0.31-1.737-0.03-3.748-1.52-4.882zm59.48,19.93c-3.1-6.35-5.41,6.75-0.16,1.29,0.05-0.43,0.16-1.29,0.16-1.29zm-41.8-19.93c-4.53,4.083,1.96,15.72,0.29,5.078-0.21-1.683-0.42-3.38-0.29-5.078zm52.4,0.965c-5.34,2.162,2.08,13.995,0.25,4.156-0.15-1.38-0.28-2.767-0.25-4.156zm-18.96,0c-1.32,2.826,0.22,13.625,1.42,5.055,0.36-1.726,0.28-4.036-1.42-5.055zm15.32,17.895zm-12.64,5.25zm-17.69-36.22z" stroke-width="1.0000000pt" transform="translate(10, 3984.997887999999) "/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="4143.787557999999" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="4143.787557999999" x="10">Maken van tekst</tspan>
+ <text id="advanced-f13-nl.svgtext2796" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3984.8738549999994) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="43.765549" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-nl.svgtspan2797" y="4.2366295" x="43.765549" role="line">Origineel</tspan></text>
+ <text id="advanced-f13-nl.svgtext2799" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3984.8738549999994) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="125.61612" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-nl.svgtspan2800" y="4.2366295" x="125.61612" role="line">Lichte vereenvoudiging</tspan></text>
+ <text id="advanced-f13-nl.svgtext2802" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 3984.8738549999994) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2366295" x="213.13528" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f13-nl.svgtspan2803" y="4.2366295" x="213.13528" role="line">Agressieve vereenvoudiging</tspan></text>
+ <path id="advanced-f13-nl.svgpath2786" d="M97.048,92.194l0.322,9.646-1.286,4.07-1.608,0.64v3.86l-0.964-0.1,0.214,4.82-1.715,0.21-0.857,10.61,6.537,4.18-1.714,2.68-10.717-1.93-10.395,1.93-1.715-2.68,5.251-3.32-5.787-1.18-11.253,2.36v-1.39l7.074-5.36-1.929-18.86c-1.215-0.22-2.394-0.54-3.537-0.97l-1.5-16.075-2.572-0.428-1.179-3.323-0.965,0.215-2.465,33.011-2.036,0.53,9.109,5.9-1.178,3-14.79-3.22-6.001,1.4-0.429,4.71,5.466,4.93c-0.286,0.29-0.464,0.68-0.536,1.18-0.071,0.5-0.286,0.75-0.643,0.75-0.214,0-0.357-0.04-0.429-0.11l-9.216-1.61-9.859,1.72-0.858-1.93,5.466-4.71-1.179-12.22h-1.393c-0.143-1.22-0.25-2.43-0.322-3.65-0.071-1.14-0.143-2.32-0.214-3.53l-1.179-0.86-2.25-4.07,0.643-11.79h-1.286l1.286-7.716c0.285-0.858,0.714-1.501,1.286-1.93,0.643-0.428,1.321-0.749,2.036-0.964,0.786-0.214,1.572-0.393,2.357-0.536,0.858-0.143,1.644-0.357,2.358-0.643l0.536,2.358-5.787,1.393c-0.429,0.357-0.643,0.786-0.643,1.286l-0.857,4.394h2.572v-1.607h2.143v6.322h10.288v-6.322h2.143v1.607h2.572l-0.964-4.715c-0.071-0.358-0.214-0.608-0.429-0.751-0.143-0.142-0.286-0.285-0.428-0.428l-5.895-1.394,0.643-2.143,6.216,1.715c0.572,0.286,1.108,0.786,1.608,1.5v-6.966c-0.358,0.572-0.858,1.072-1.501,1.5-0.643,0.358-1.321,0.644-2.036,0.858-0.286-1.143-0.429-2.25-0.429-3.322v-1.286c0-0.5,0.072-1.072,0.215-1.715,0-0.714-0.179-1.143-0.536-1.286-0.286-0.143-0.643-0.214-1.072-0.214,0.143,0.357,0.25,0.75,0.322,1.179,0.071,0.357,0.107,0.785,0.107,1.286,0,1.786-0.572,3.322-1.715,4.608-1.143,1.215-2.536,1.822-4.179,1.822-1.572,0-2.93-0.607-4.073-1.822-1.143-1.286-1.714-2.822-1.714-4.608,0-1.001,0.178-1.822,0.535-2.465-0.428,0-0.821,0.071-1.178,0.214-0.358,0.143-0.536,0.5-0.536,1.072v0.214c0.214,1.215,0.321,2.179,0.321,2.894,0,1-0.214,2.143-0.643,3.429-0.786-0.214-1.607-0.607-2.465-1.178-0.785-0.572-1.25-1.287-1.393-2.144-0.143-0.572-0.214-1-0.214-1.286,0-1.358,0.571-2.501,1.715-3.43,0.857-0.5,1.75-0.75,2.679-0.75l1.071,0.107-1.393-32.578,15.647-4.287c-1.215-0.714-2.179-1.75-2.894-3.108-0.714-1.357-1.071-2.858-1.071-4.501,0-2.501,0.714-4.573,2.143-6.216,1.5-1.715,3.286-2.572,5.358-2.572s3.858,0.857,5.359,2.572c1.5,1.643,2.25,3.715,2.25,6.216,0,1.643-0.393,3.144-1.179,4.501-0.714,1.358-1.679,2.394-2.893,3.108l16.075,4.287-0.214,5.465,4.822-1.179,0.643,2.358c-0.5,0.214-0.821,0.572-0.964,1.072-0.143,0.428-0.215,0.928-0.215,1.5,0,0.786,0.072,1.571,0.215,2.358,0.214,0.785,0.393,1.321,0.536,1.607h6.108c0.572-1.643,0.857-3.001,0.857-4.072,0-0.929-0.214-1.608-0.643-2.036-0.214-0.215-0.393-0.358-0.535-0.429l0.535-2.358,11.253,2.358,2.143,21.862h0.751l-0.215,2.679c1,1.358,1.501,2.787,1.501,4.287,0,0.715-0.108,1.322-0.322,1.822-0.357,0.929-0.893,1.75-1.607,2.465-0.715,0.642-1.501,1.143-2.358,1.5l7.073,1.929c0.357,0.215,0.75,0.464,1.179,0.751,0.428,0.285,0.679,0.749,0.75,1.392l2.25,10.074h-1.393zm-52.833-44.582l-5.895-11.574c-1.571,0.5-3.179,0.965-4.822,1.394-1.572,0.428-3.179,0.857-4.823,1.285l1.179,28.936c0.357-0.143,0.679-0.322,0.965-0.536,0.357-0.286,0.714-0.5,1.071-0.643v-24.22h2.465v24.22c0.929,0.143,1.715,0.464,2.358,0.964,0.714,0.5,1.25,1.144,1.607,1.929,0.286-0.071,0.786-0.107,1.501-0.107,0.714,0,1.214,0.036,1.5,0.107l2.894-1.178v-20.577zm50.154,36.223c-0.071-0.429-0.25-0.821-0.536-1.179-0.214-0.428-0.643-0.714-1.286-0.857l-7.287-1.822-7.395,1.822c-0.643,0.143-1.071,0.393-1.286,0.75-0.143,0.286-0.321,0.715-0.536,1.286l-1.286,6.001h2.894l0.321-3.965,2.251,0.215-1.822,20.794,13.718,1.07-1.822-21.864,2.25-0.215,0.536,3.965h2.786l-1.5-6.001zm-36.973-46.403c-1.643-0.429-3.286-0.894-4.929-1.394l-5.895,11.574v20.577l9.217,3,2.465-27.756,3.75-0.75,0.322-3.966-4.93-1.285zm-10.824,33.543v43.835l5.359-1.83,2.893-39.112-8.252-2.893zm24.756-12.217c-1-2.001-2.072-4.037-3.215-6.109-1.072-2.071-1.607-4.393-1.607-6.965,0-0.715,0.035-1.251,0.107-1.608-0.143,0.071-0.536,0.178-1.179,0.322-0.572,0.142-1.215,0.321-1.929,0.535-0.643,0.143-1.25,0.286-1.822,0.429-0.572,0.071-0.929,0.107-1.072,0.107l-2.786,30.757,3.322,0.215,1.393-25.292,2.465,0.214-1.393,25.399c1.215,0,2.465-0.107,3.751-0.321,1.286-0.215,2.465-0.679,3.536-1.394-1.286-1.715-1.929-3.786-1.929-6.215,0-1.715,0.25-3.465,0.751-5.252,0.5-1.786,1.035-3.393,1.607-4.822zm13.61-13.289l-6.001-1.179c0.071,0.286,0.107,0.572,0.107,0.858v0.643c0,1.214-0.178,2.393-0.536,3.536-0.285,1.072-0.678,2.143-1.179,3.215-0.5,1-1.036,2.036-1.607,3.108-0.5,1-1,2.036-1.5,3.108-0.715,1.572-1.358,3.215-1.929,4.93-0.572,1.643-0.858,3.322-0.858,5.037,0,1,0.179,2.143,0.536,3.429,0.786,1.714,2.001,2.893,3.644,3.536,1.643,0.572,3.358,0.929,5.144,1.072-0.357-0.428-0.715-0.929-1.072-1.5-0.357-0.572-0.607-1.143-0.75-1.715-0.071-0.286-0.143-0.536-0.214-0.75v-0.75c0-0.643,0.071-1.251,0.214-1.822,0.214-0.572,0.464-1.107,0.75-1.607l-0.107-2.787,1.715-0.215-0.751-14.253h2.465l0.751,13.932,1.071-0.214h1.929l-1.822-19.612zm-5.251,33.651c-1.214-0.143-2.429-0.358-3.644-0.643-1.143-0.357-2.179-0.893-3.107-1.607-1.429,1-2.965,1.643-4.609,1.928-1.571,0.286-3.179,0.429-4.822,0.429l1.714,20.255,7.395,2.358h0.536v-0.43l0.429-9.216c-0.215-0.143-0.465-0.214-0.751-0.214h-0.75l2.144-9.86c0.142-0.643,0.393-1.107,0.75-1.392,0.428-0.287,0.821-0.536,1.179-0.751l3.536-0.857zm-40.295,32.79l0.214-3.85c0.072-1.29,0.108-2.54,0.108-3.76,0-1.42-0.072-2.85-0.215-4.28-0.071-1.432-0.286-2.789-0.643-4.075h-10.502c-0.357,1.358-0.607,2.751-0.75,4.175-0.072,1.36-0.108,2.76-0.108,4.18,0,1.43,0.036,2.86,0.108,4.29,0.071,1.43,0.178,2.82,0.321,4.18h11.467v-0.86zm39.545-76.729c-0.214,1.215-0.786,2.393-1.715,3.536-0.857,1.143-1.893,1.858-3.108,2.144-0.285,0.071-0.714,0.107-1.286,0.107-1.929,0-3.572-0.857-4.929-2.572-0.358-0.572-0.643-1.107-0.858-1.607-0.214-0.5-0.357-1.036-0.428-1.608h-1.394v-0.75c0-1.786,0.358-3.43,1.072-4.93,0.715-1.5,1.858-2.751,3.43-3.751,0.571-0.286,1.214-0.428,1.929-0.428,0.714-0.072,1.428-0.108,2.143-0.108,1.643,0.357,2.893,1,3.751,1.929,0.929,0.929,1.572,1.929,1.929,3.001,0.428,1,0.679,2,0.75,3.001,0.071,0.929,0.107,1.607,0.107,2.036h-1.393zm-29.685-12.432c-0.572-0.357-1.144-0.642-1.715-0.857-0.215-0.071-0.5-0.107-0.858-0.107-0.714,0-1.464,0.179-2.25,0.536-0.714,0.357-1.393,0.715-2.036,1.071-0.786,0.429-1.501,0.929-2.144,1.501v0.321c0.143,1.215,0.501,2.394,1.072,3.537,0.643,1.072,1.572,1.857,2.786,2.357,0.286,0.072,0.679,0.108,1.179,0.108,1.215,0,2.251-0.429,3.108-1.286,1.286-1.358,1.929-3.001,1.929-4.93,0-0.357-0.071-0.893-0.214-1.608l-0.857-0.643zm39.866,49.298c0-1.572-0.5-2.644-1.5-3.215l-2.572-0.965-3.001,1.286c-0.357,0.429-0.643,0.893-0.858,1.393-0.214,0.429-0.321,0.929-0.321,1.501,0,1.214,0.429,2.215,1.286,3,0.857,0.715,1.822,1.072,2.894,1.072,1.143,0,2.107-0.357,2.893-1.072,0.786-0.785,1.179-1.786,1.179-3zm-43.832-38.045l-4.394,1.5,4.501,8.788,4.609-8.788-4.716-1.5zm-8.252,38.902c0-0.286-0.035-0.608-0.107-0.964-0.071-0.358-0.178-0.608-0.321-0.751l-1.072-0.428c-0.357-0.143-0.714-0.25-1.072-0.322-0.357-0.071-0.714-0.107-1.071-0.107-0.358,0-0.715,0.036-1.072,0.107-0.357,0.072-0.714,0.179-1.072,0.322-0.357,0.143-0.75,0.285-1.179,0.428-0.142,0.715-0.214,1.287-0.214,1.715,0,1.072,0.322,2,0.965,2.786,0.714,0.786,1.571,1.18,2.572,1.18,1,0,1.857-0.394,2.572-1.18,0.714-0.786,1.071-1.714,1.071-2.786zm39.009-41.796c-1.143,0.858-2.322,1.644-3.536,2.358-1.143,0.644-2.322,1.144-3.537,1.5,0.215,0.715,0.5,1.323,0.858,1.823,0.357,0.428,0.75,0.821,1.179,1.179,0.5,0.356,1.107,0.535,1.821,0.535h0.215c1.286-0.143,2.215-0.857,2.786-2.143,0.429-0.714,0.643-1.608,0.643-2.679,0-0.429-0.036-0.858-0.107-1.286-0.072-0.5-0.179-0.929-0.322-1.287zm-4.286,73.092l-2.787-0.86,1.929,18.11,0.858,0.22v-17.47zm-37.08,10.93v12.22h2.036v-0.22l1.072-12h-3.108zm-2.251,0h-3.001l1.179,12.22h1.822v-12.22zm51.655,0.21h-3.322l0.964,10.08h2.465l-0.107-10.08zm2.358,0v10.08h2.465l0.857-10.08h-3.322zm-10.288-8.79l-1.715-0.64-0.214-1.39v17.15l0.535-0.22,1.394-12.54v-2.36zm-32.044-1.17l-1.071,1.71-1.179,0.64-0.429,6.22c0.215,0.07,0.465,0.14,0.75,0.21,0.215,0.07,0.501,0.15,0.858,0.22,0.357,0.14,0.75,0.28,1.179,0.43l-0.108-9.43zm-19.397-14.15l-0.643,11.15,1.179,2.35v-1.39c0-1.86,0.143-3.608,0.429-5.252,0.357-1.643,0.535-3.393,0.535-5.251l-0.107-1.607h-1.393zm59.478,19.93c0-0.57-0.036-1.14-0.107-1.71l-4.501-0.22-0.214,3.75h4.822v-1.82zm-41.795-19.93h-1.286c-0.072,0.357-0.107,0.678-0.107,0.964v0.75l0.964,10.186-0.107,1.6,1.179-2.14-0.643-11.36zm52.405,0.964h-1.608l0.965,12.006,0.107,0.1,0.107-0.1,0.965-2.79-0.536-9.216zm-18.969,0l-0.429,9.216,0.751,2.79c0.142,0,0.214,0.03,0.214,0.1h0.107l0.107-0.1,0.75-12.006h-1.5zm15.325,17.896c-0.786,0-1.572-0.03-2.358-0.11-0.786-0.07-1.571-0.17-2.357-0.32v3.32h4.929l-0.214-2.89zm-12.646,5.25h-0.536l-0.643,5.68,1.822,1.18-0.643-6.86zm-17.682-36.22l-1.715-0.322,1.5,3.965,0.643,0.215-0.428-3.858z" stroke-width="1.0000000pt" transform="translate(10, 3984.8738549999994) "/>
+ <path id="advanced-f13-nl.svgpath2789" d="M191.83,92.195c1.45,7.046-0.77,13.095-3.47,18.975,0.78,4.16-3.31,6.61-2.16,11.44-3.3,5.28,11.69,7.04,3.16,10.09-4.71-1.02-9.65-2.56-14.42-0.87-2.65,1.72-9.17,0.48-5.32-2.96,7.41-2.69-3.74-3.97-6.35-2.41-2.33,1.05-10.39,2.35-5.07-1.43,8.03-3.01,3.47-11.48,3.57-17.94,0.09-3.33-0.37-4.94-3.53-5.65-1.56-4.654-1.1-9.847-1.86-14.727-0.12-2.069-4.29-1.783-3.88-5.129-2.52,4.029-1.07,10.228-2.08,15.103-0.45,6.043-0.9,12.083-1.35,18.123-4.77,2.22,10.08,4.43,6.21,8.62-4.3,1.29-9.29-1.9-13.92-2.1-5.68-1.9-10.97,4.94-4.8,8.39,4.72,2.41,0.9,5.49-2.77,3.52-5.11-2.71-12.38,2.31-15.95-0.67,3.12-3.32,7.13-6.32,4.67-11.7-0.1-5.17-2.82-8.01-2.86-13.32-5.66-3.77-1.01-12.318-3.16-16.361-0.76-4.213,0.62-10.906,6.29-11.275,6.4,0.351-0.05,3.232-2.83,3.538-2.22,3.126-1.07,7.85,2.5,3.812,1.16,3.39,0.19,8.356,6.2,6.323,5.7,1.9,4.59-2.933,5.45-6.313,1.7,1.281,5.06,2.945,3.62-1.104,1.4-5.093-9.91-2.958-5.9-6.483,3.18-0.414,8.68,5.412,7.14-0.844,1.91-5.888-5.24,2.049-3.91-3.307,0.93-3.027-1.58-7.48-0.99-1.929-0.18,9.225-15.77,4.403-11.14-3.382-3.63,0.907,0.5,11.323-5.28,5.897-4.15-6.165,7.91-6.126,4.39-12.416-0.38-8.972-0.76-17.945-1.15-26.917,4.59-1.62,12.6-2.728,15.05-4.665-6.28-4.254-3.31-16.719,4.84-15.975,9.26,1.024,6.71,13.152,4.22,16.803,4.57,1.851,12.53,1.466,14.7,5.284-2.14,5.52,2.9,2.257,5.04,3.836-2.62,4.317,0,10.211,5.44,7.753,3.1-3.168-2.57-11.291,4.96-7.848,5.74-0.109,8.3,2.632,7.61,8.288,0.71,5.268,0.67,10.733,1.86,15.874,2.49,4.177,1.61,9.167-1.71,12.093,6.25,0.252,9.61,4.586,9.6,10.68-0.27,1.326,2.26,4.024-0.66,3.283zm-52.84-44.583c-2.94-3.17-3.36-12.428-8.26-10.76-5.47-0.266-8.96,3.397-7,8.736,0.3,7.355,0.6,14.71,0.9,22.065,4.54-4.521,0.82-13.392,2.04-19.628-1.32-2.96,1.5-9.122,2.54-3.675,0.53,7.442-1.48,16.415,1.04,22.883,3.93,3.678,11.18,2.004,8.74-4.442v-15.179zm50.16,36.223c-4.18-4.856-13.83-4.64-18.23-0.257-1.43,2.37-1.69,9.314,1.9,5.052-1.84-4.028,4.27-2.806,1.9,0.651,0.09,5.623-2.32,13.359-0.68,17.659,3.83-0.53,11.35,2.6,12.74-0.36-0.57-6.83-1.14-13.662-1.7-20.494,3.49-1.941,2.34,7.392,5.36,2.75-0.25-1.698-1-3.298-1.29-5.001zm-36.98-46.403c-6.9-4.138-9.3,7.484-10.82,12.1,0.75,6.08-1.51,14.342,1.15,19.032,3.83,0.961,9.7,5.016,8.45-1.712,0.7-7.806,1.39-15.613,2.08-23.419,5.92,0.02,5.62-5.997-0.86-6.001zm-10.82,33.543v43.835c8.41-0.34,5.06-10.09,6.39-15.714,0.62-8.409,1.24-16.818,1.86-25.228-2.75-0.964-5.5-1.928-8.25-2.893zm24.76-12.217c-3-4.194-4.8-10.902-5.45-14.571-7.54-0.148-5.43,8.129-6.34,13.081-0.57,6.319-1.14,12.639-1.72,18.958,5.97,1.41,2.73-7.09,3.91-10.474,0.27-4.868,0.54-9.735,0.81-14.603,4.95,0.286,0.99,7.945,1.85,11.384-0.26,4.742-0.52,9.486-0.78,14.229,4.85,0.985,8.54-2.605,5.4-6.966-0.29-3.817,1-7.519,2.32-11.038zm13.61-13.288c-3.33-0.63-7.18-2.523-6.16,2.469-1.52,7.778-8.38,14.123-7.32,22.445-0.23,4.808,12.23,9.786,7.46,3.213-0.38-4.226,1.26-7.206,2.32-10.033,0.53-3.743-2.57-11.163,0.97-12.327,3.1,3.551-1.16,12.714,3.18,13.975,3.1-3.959-0.76-11.394-0.16-16.634-0.1-1.036-0.2-2.072-0.29-3.108zm-5.25,33.65c-5.01-2.273-10.21-0.981-15.12-0.233-2.07,5.278,0.61,11.973,0.41,17.808-1.27,3.885,7.55,5.835,8.21,3.935,1.02-6.763-2-10.412,0.68-17.079,0.29-3.36,3.05-3.958,5.82-4.431zm-40.3,32.79c-0.64-5.13,3.41-16.981-4.47-15.965-3.8-0.2-8.08-0.902-7.18,4.295-0.76,5.13-1.74,15.1,6.42,12.53,0.99-0.58,5.89,1.13,5.23-0.86zm39.55-76.729c-0.82,7.829-11.63,6.661-13.3,0.002-1.94-5.605,4.82-12.889,10.38-9.091,2.5,1.071,6.53,8.202,2.92,9.089zm-29.69-12.432c-6.93-5.162-12.89,8.639-3.56,8.518,3.5-0.491,6.34-5.745,3.56-8.518zm39.87,49.298c-0.63-8.657-13.58-0.718-5.83,3.723,2.54,1.603,6.03-0.835,5.83-3.723zm-43.84-38.044c-7.52,0.34-1.27,6.553,0.11,10.287,1.22-4.57,8.67-9.623-0.11-10.287zm-8.25,38.901c-1.79-7.11-12.38,2.15-4.11,3.954,2.2,0.311,4.22-1.8,4.11-3.954zm39.01-41.796c-3.41,1.376-10.45,6.334-2.82,7.374,3.16-0.602,3.83-4.835,2.82-7.374zm-4.28,73.092c-5.59-2.03-0.76,7.79-1.55,10.8-0.23,2.49,1.49,9.81,1.56,3.63-0.08-4.79,0.03-9.62-0.01-14.43zm-37.08,10.93c0.86,3.73-1.84,11.02,1.54,12.28,1.03-3.5,1.97-9.78,0.79-12.28h-2.33zm-2.26,0c-6.07-0.48-0.88,8.65-1.82,12.22,4.08-0.51,0.7-8.98,1.82-12.22zm51.66,0.21c-5.78-1.41-2.61,8.61-1.38,10.28,3.23-0.85,0.6-7.72,1.38-10.28zm2.36,0c0.23,2.59-1.29,13.69,2.63,8.74-0.7-3.24,3.32-10.53-2.63-8.74zm-10.29-8.79c-4.06-3.52-0.97,6.32-1.93,8.8-0.35,3.24,0.32,9.1,0.91,2.75,0.26-3.85,1.14-7.67,1.02-11.55zm-32.04-1.17c-2.94,1.73-4.35,10.35,0.09,8.55-0.03-2.85-0.06-5.7-0.09-8.55zm-19.4-14.15c0.28,4.214-1.68,9.03,0.33,12.84-0.55-3.4,3.22-11.64-0.33-12.84zm59.48,19.93c-0.72-5.89-9.15,1.96-2.31,1.92,1.7-0.14,2.76,0.41,2.31-1.92zm-41.8-19.93c-3.4,2.635,0.61,9.31-0.53,13.5,2.43-3.96,0.15-9.115,0.53-13.5zm52.41,0.965c-3.32,0.84-0.31,10.885-0.21,11.425,1.49-3.668,0.07-7.626,0.21-11.425zm-18.97,0c0.12,3.072-1.4,11.445,0.83,11.065-0.73-3.08,2.47-10.575-0.83-11.065zm15.32,17.895c-6.13-2.76-5.59,5.51,0.06,2.63,0.62-0.81-0.41-1.75-0.06-2.63zm-12.64,5.25c-3.02,2.36,1.09,10.32,0.33,3.58-0.1-1.19-0.22-2.38-0.33-3.58zm-17.69-36.22c-3.89-1.78,1.69,7.528,0.19,1.646-0.04-0.24-0.17-1.337-0.19-1.646z" stroke-width="1.0000000pt" transform="translate(10, 3984.8738549999994) "/>
+ <path id="advanced-f13-nl.svgpath2795" d="M286.61,92.195c1.73,10.245-3.77,20.235-6.8,29.375,2.77,4.43,9.29,12.64-1.06,9.64-5.65-0.31-16.37,3.82-14.05-4.6-2.84-3.18-14.35,4.46-10.78-2.84,7.7-6.54,2.34-17.84-1.36-25.229-0.62-4.229-1.21-17.585-6.15-13.717-1.7,8.995-0.97,18.266-2.47,27.316-1.29,4.25,10.98,12.59,0.71,11.01-6.98-4.44-21.11-1.22-12.58,8.34-2.14,3.4-10.61,0.37-15.3,1.67-4.68-3.02,4.89-11.49-0.25-17.16-3.71-9.72-6.68-20.331-4.79-30.691,0.07-6.547,11.78-4.847,3.23-1.67-2.73,6.045,9.88,15.008,14.39,6.841-0.61-3.752,6.14-2.574,1.12-6.696-7.69-5.089,5.26-0.149,2.74-6.202-4.75,1.088-3.59-9.162-5.01-1.02-4.16,7.948-12.66-7.672-12.14-1.318-9.65,2.941,4.7-10.84,1.31-16.479,0.2-7.576-6.01-18.798,2.72-23.543,7.61,1.254,10.79-5.296,6.97-11.079-0.15-8.62,14.65-11.134,14.68-1.372-2.4,7.562,1.51,13.53,9.57,13.368,6.76,1.808,6.22,18.387,14.23,12.035-0.63-12.042,13.97-5.359,12.73,2.936-1.95,7.935,3.4,15.402,1.74,23.297-1.9,6.014,12.28,9.73,7.27,17.831-0.23-0.014-0.67-0.043-0.67-0.043zm-52.84-44.583c-0.08-7.15-11.88-16.201-15-6.213-1.18,8.035,0.93,16.178,0.59,24.281,4.01-0.052,1.66-12.919,1.63-17.956,2.7-10.251,4.49,8.131,2.3,12.268-3.02,10.592,14.84,10.949,10.98,0.205-0.62-4.161-0.84-8.389-0.5-12.585zm50.16,36.223c-4.33-8.369-23.71-1.358-16.94,4.729,5.78-3.043-0.9,10.326,1.54,13.896,2.22,10.4,17,5.33,12.85-4.483-2.26-4.403-1.87-13.59,3.45-9.025,0.27-1.771-0.4-3.465-0.9-5.117zm-36.98-46.403c-8.85-1.837-10.79,9.521-10.69,16.008-2.87,5.999,1.15,21.939,9.02,14.339,1.94-7.849,1.3-16.277,2.53-24.346,5.97,1.428,4.08-7.941-0.86-6.001zm-10.82,33.543v43.835c8.55-2.12,5.78-12.67,6.36-19.121-0.99-7.749,6.6-20.034-3.24-23.893-0.51-0.148-2.59-0.695-3.12-0.821zm24.75-12.217c-2.35-3.902-6.18-19.179-10.9-9.338-1.07,7.984-1.56,16.114-2.1,24.152,5.93,1.068,2.39-12.048,3.5-16.872,2.54-9.635,4.53,4.48,2.29,7.949-3.22,5.041,2.82,17.762,5.64,7.002,1.04-4.365-2.08-9.196,1.57-12.893zm13.62-13.288c-9.52-2.066-7.18,11.28-11.89,15.95-6.03,4.717,2.29,20.544,6.48,11.12,1.24-6.261,0.25-14.01,2.9-19.232,1.35,2.737,2.04,14.588,3.93,5.969,0.16-4.662-1.94-9.132-1.42-13.807zm-5.26,33.65c-6.44-3.603-17.88-1.256-15.83,8.097-2.75,6.399,6.5,20.193,9.67,8.963-0.79-6.07-2.56-16.071,6.16-17.06zm-40.29,32.79c2.31-6.55-0.28-21.299-9.82-14.876-6.99,6.576-0.12,21.896,9.82,14.876zm39.54-76.729c-0.72,8.483-14.8,5.465-13.97-2.306-0.32-9.702,15.26-9.829,15.19-0.275-0.13,0.44-0.94,2.161-1.22,2.581zm-29.68-12.432c-8.51-7.329-9.63,15.326-0.45,6.694,1.61-1.76,2.31-4.84,0.45-6.694zm39.86,49.298c-1.74-10.586-13.82,6.942-2.44,3.861,1.46-0.666,2.56-2.216,2.44-3.861zm-43.83-38.044c-8.89,0.854,3.1,14.814,3.79,4.093,1.18-2.261-1.45-5.039-3.79-4.093zm-8.25,38.901c-3.02-8.504-10.1,8.305-1.34,3.041,0.89-0.731,1.36-1.901,1.34-3.041zm39.01-41.796c-8.66-1.525-1.77,13.237,0.41,3.083-0.01-0.521-0.29-2.576-0.41-3.083zm-4.29,73.092c-6.9,1.8,1.38,20.57,0.03,8.49-0.02-2.83-0.07-5.66-0.03-8.49zm-37.08,10.93c-1.71,4.45,1.43,14.82,3,5.14,0.48-2.18-0.16-5.24-3-5.14zm-2.25,0c-7.73-0.05,0.74,16.72,0.06,5.53-0.26-1.82-0.57-3.71-0.06-5.53zm51.66,0.21c-8.43-1.44,1.05,15.24,0.04,3.96-0.16-1.31-0.29-2.65-0.04-3.96zm2.36,0c-3.26,4.67,3.5,12.3,3.26,3.45,0.42-1.96-0.74-5.13-3.26-3.45zm-10.29-8.79c-5.47,1.62-0.51,18.15-0.57,7.6,0.31-2.52,0.57-5.05,0.57-7.6zm-32.05-1.17c-6.25,0.28,0.78,12.71,0.04,3.51-0.02-1.17-0.01-2.34-0.04-3.51zm-19.39-14.15c-1.3,4.676,0.18,15.02,1.52,4.882,0.31-1.737-0.03-3.748-1.52-4.882zm59.48,19.93c-3.1-6.35-5.41,6.75-0.16,1.29,0.05-0.43,0.16-1.29,0.16-1.29zm-41.8-19.93c-4.53,4.083,1.96,15.72,0.29,5.078-0.21-1.683-0.42-3.38-0.29-5.078zm52.4,0.965c-5.34,2.162,2.08,13.995,0.25,4.156-0.15-1.38-0.28-2.767-0.25-4.156zm-18.96,0c-1.32,2.826,0.22,13.625,1.42,5.055,0.36-1.726,0.28-4.036-1.42-5.055zm15.32,17.895zm-12.64,5.25zm-17.69-36.22z" stroke-width="1.0000000pt" transform="translate(10, 3984.8738549999994) "/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="4143.663525" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="4143.663525" x="10">Maken van tekst</tspan>
</text>
- <rect id="d0e597" display="none" height="1000px" width="288" y="4149" x="10"/>
+ <rect id="d0e597" display="none" height="1000px" width="288" y="4148.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e597"/>
</flowRegion>
- <flowDiv xml:space="preserve">Inkscape kan lange en complexe teksten maken. Echter, het is tevens handig om kleine tekstobjecten te maken zoals, hoofdingen, banners, logo's, labels, onderschriften, etc. Deze sectie geeft een korte introductie in Inkscape's tekstmogelijkheden.</flowDiv>
+ <flowDiv xml:space="preserve">Inkscape kan lange en complexe teksten maken. Echter, het is tevens handig om kleine tekstobjecten te maken zoals, hoofdingen, banners, logo&apos;s, labels, onderschriften, etc. Deze sectie geeft een korte introductie in Inkscape&apos;s tekstmogelijkheden.</flowDiv>
</flowRoot>
- <rect id="d0e600" display="none" height="1000px" width="288" y="4198.8" x="10"/>
+ <rect id="d0e600" display="none" height="1000px" width="288" y="4198.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e600"/>
</flowRegion>
<flowDiv xml:space="preserve">Een tekstobject maken is zo eenvoudig als het openen van het tekstgereedschap (<flowSpan font-weight="bold">F8</flowSpan>), ergens in het document te klikken en je tekst te typen. Open het dialoogvenster Tekst en lettertype om lettertypefamilie, stijl, grootte en uitlijning te veranderen (<flowSpan font-weight="bold">Shift+Ctrl+T</flowSpan>). Dit dialoogvenster bevat ook een tabblad voor wijziging van de tekst van het geselecteerde object - in sommige situaties is dit handiger dan direct bewerken op het canvas (in het bijzonder ondersteund deze tab spellingscontrole tijdens het typen).</flowDiv>
</flowRoot>
- <rect id="d0e609" display="none" height="1000px" width="288" y="4291.2" x="10"/>
+ <rect id="d0e609" display="none" height="1000px" width="288" y="4291" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e609"/>
</flowRegion>
<flowDiv xml:space="preserve">Zoals andere gereedschappen kan het tekstgereedschap objecten van het eigen type selecteren - tekstobjecten - zo kan je klikken om te selecteren en de cursor te positioneren in een bestaand tekstobject (zoals deze paragraaf).</flowDiv>
</flowRoot>
- <rect id="d0e612" display="none" height="1000px" width="288" y="4340.9" x="10"/>
+ <rect id="d0e612" display="none" height="1000px" width="288" y="4340.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e612"/>
</flowRegion>
<flowDiv xml:space="preserve">Een van de meest voorkomende handelingen in tekstontwerp is het aanpassen van de afstand tussen letters en lijnen. Zoals gewoonlijk heeft Inkscape hiervoor sneltoetsen. Tijdens het wijzigen van tekst veranderen <flowSpan font-weight="bold">Alt+&lt;</flowSpan> en <flowSpan font-weight="bold">Alt+&gt;</flowSpan> de <flowSpan font-style="italic">letterafstand</flowSpan> in de huidige lijn van het tekstobject zodat de totale lengte van de lijn verandert met 1 pixel bij de huidige zoom (vergelijk met het selectiegereedschap waar dezelfde toetsen schalen op pixelniveau). Indien de lettergrootte in een tekstobject groter is dan standaard, zal het algemeen gunstig zijn om letters dichter opeen te plaatsen dan normaal. Zie hier een voorbeeld:</flowDiv>
</flowRoot>
- <text id="advanced-f14-nl.svgtext1609" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4451.815004999999) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2361641" x="139.43481" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f14-nl.svgtspan1610" y="4.2361641" x="139.43481" role="line">Origineel</tspan></text>
- <text id="advanced-f14-nl.svgtext1612" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4451.815004999999) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="53.843742" x="116.16958" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f14-nl.svgtspan1613" y="53.843742" x="116.16958" role="line">Letterafstand verminderd</tspan></text>
- <text id="advanced-f14-nl.svgtext2315" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4451.815004999999) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="33.29771" x="60.780251" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f14-nl.svgtspan1604">Inspiratie</tspan></text>
- <text id="advanced-f14-nl.svgtext1606" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4451.815004999999) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="82.904648" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f14-nl.svgtspan1607" style="letter-spacing:-1.2478520;">Inspiratie</tspan></text>
- <rect id="d0e634" display="none" height="1000px" width="288" y="4553.7" x="10"/>
+ <text id="advanced-f14-nl.svgtext1609" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4451.690971999999) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2361641" x="139.43481" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f14-nl.svgtspan1610" y="4.2361641" x="139.43481" role="line">Origineel</tspan></text>
+ <text id="advanced-f14-nl.svgtext1612" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4451.690971999999) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="53.843742" x="116.16958" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f14-nl.svgtspan1613" y="53.843742" x="116.16958" role="line">Letterafstand verminderd</tspan></text>
+ <text id="advanced-f14-nl.svgtext2315" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4451.690971999999) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="33.29771" x="60.780251" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f14-nl.svgtspan1604">Inspiratie</tspan></text>
+ <text id="advanced-f14-nl.svgtext1606" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4451.690971999999) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="82.904648" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f14-nl.svgtspan1607" style="letter-spacing:-1.2478520;">Inspiratie</tspan></text>
+ <rect id="d0e634" display="none" height="1000px" width="288" y="4553.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e634"/>
</flowRegion>
<flowDiv xml:space="preserve">De smallere variant ziet er beter uit als een hoofding, maar het is nog steeds niet perfect: de afstanden tussen letters zijn niet uniform. Bijvoorbeeld, de “a” en “t” staan te ver van elkaar, terwijl “t” en “i” te dicht opeen staan. Het aantal slechte tekenspatiëringen (vooral zichtbaar in hoge lettertypegroottes) is groter bij lettertypes van lage kwaliteit dan bij hoge kwaliteitslettertypes. Echter, in elke tekst en bij elk lettertype, zal je wellicht letterparen vinden die voordeel ondervinden van aanpassingen in de tekenspatiëring.</flowDiv>
</flowRoot>
- <rect id="d0e637" display="none" height="1000px" width="288" y="4646" x="10"/>
+ <rect id="d0e637" display="none" height="1000px" width="288" y="4645.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e637"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape maakt deze aanpassingen echt eenvoudig. Verplaats je cursor in tekstbewerkingsmodus tussen de bewuste tekens en gebruik <flowSpan font-weight="bold">Alt+pijltjestoetsen</flowSpan> om de letters rechts van de cursor te verplaatsen. Hier is dezelfde hoofding, deze keer met manuele aanpassingen voor visueel uniforme tekenpositionering.</flowDiv>
</flowRoot>
- <text id="advanced-f15-nl.svgtext1649" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4714.499520999998) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2368875" x="66.563278" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f15-nl.svgtspan1651" y="4.2368875" x="66.563278" role="line">Letterafstand verminderd, voor enkele letterparen manueel</tspan></text>
- <text id="advanced-f15-nl.svgtext2406" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4714.499520999998) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="34.802681" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f15-nl.svgtspan1647" style="letter-spacing:-1.2478520;" dx="0 0 -0.1418031 -0.42540932 -0.42540932 0.42540932 0.42540932 -0.87514824 1.1344248 -0.5672124 -0.5672124">Inspiratie</tspan></text>
- <rect id="d0e653" display="none" height="1000px" width="288" y="4768.3" x="10"/>
+ <text id="advanced-f15-nl.svgtext1649" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" sodipodi:linespacing="110.00000%" transform="translate(10, 4714.375487999999) " line-height="110.00000%" xml:space="preserve" font-size="5.5761971" font-style="normal" y="4.2368875" x="66.563278" font-family="Bitstream Vera Serif" sodipodi:insensitive="true" fill="#000000"><tspan id="advanced-f15-nl.svgtspan1651" y="4.2368875" x="66.563278" role="line">Letterafstand verminderd, voor enkele letterparen manueel</tspan></text>
+ <text id="advanced-f15-nl.svgtext2406" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4714.375487999999) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="34.802681" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f15-nl.svgtspan1647" style="letter-spacing:-1.2478520;" dx="0 0 -0.1418031 -0.42540932 -0.42540932 0.42540932 0.42540932 -0.87514824 1.1344248 -0.5672124 -0.5672124">Inspiratie</tspan></text>
+ <rect id="d0e653" display="none" height="1000px" width="288" y="4768.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e653"/>
</flowRegion>
<flowDiv xml:space="preserve">Naast letters horizontaal verplaatsen met <flowSpan font-weight="bold">Alt+Links</flowSpan> of <flowSpan font-weight="bold">Alt+Rechts</flowSpan>, kan je ze ook verticaal verplaatsen met <flowSpan font-weight="bold">Alt+Omhoog</flowSpan> of <flowSpan font-weight="bold">Alt+omlaag</flowSpan>:</flowDiv>
</flowRoot>
- <text id="advanced-f16-nl.svgtext1731" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4804.806160999998) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="32.078743" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f16-nl.svgtspan1732" style="letter-spacing:-1.2478520;" dx="0 -3.4339702 -1.746122 -1.4281086 -2.0297282 -1.981069 -3.9864676 -3.8832457 -1.2720536 -2.1715312 -1.5699117" dy="0 0.0056477566 6.8183579 -6.6178179 0 -6.4172778 6.0161972 -5.8156576 5.8156576 -3.4091773 2.8075578">Inspiratie</tspan></text>
- <rect id="d0e678" display="none" height="1000px" width="288" y="4853" x="10"/>
+ <text id="advanced-f16-nl.svgtext1731" style="writing-mode:lr-tb;text-anchor:start;" font-weight="normal" xml:space="preserve" transform="translate(10, 4804.682127999999) " font-style="normal" font-stretch="normal" font-size="33.599998" font-variant="normal" y="32.078743" x="67.866859" font-family="Bitstream Vera Serif" fill="#000000"><tspan id="advanced-f16-nl.svgtspan1732" style="letter-spacing:-1.2478520;" dx="0 -3.4339702 -1.746122 -1.4281086 -2.0297282 -1.981069 -3.9864676 -3.8832457 -1.2720536 -2.1715312 -1.5699117" dy="0 0.0056477566 6.8183579 -6.6178179 0 -6.4172778 6.0161972 -5.8156576 5.8156576 -3.4091773 2.8075578">Inspiratie</tspan></text>
+ <rect id="d0e678" display="none" height="1000px" width="288" y="4852.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e678"/>
</flowRegion>
<flowDiv xml:space="preserve">Je kan natuurlijk je tekst gewoon omzetten naar een pad (<flowSpan font-weight="bold">Shift+Ctrl+C</flowSpan>) en de letters verplaatsen als een reguliere paden. Het is echter handiger om tekst als tekst te behouden - het blijft bewerkbaar. Je kan verschillende lettertypes proberen zonder de tekenspatiëring te verwijderen en neemt het minder plaats in in het bewaarde bestand. Het enige nadeel van de “tekst als tekst”-benadering is dat je het originele lettertype geïnstalleerd moet hebben op elk systeem waarop je het SVG-document wil openen.</flowDiv>
</flowRoot>
- <rect id="d0e684" display="none" height="1000px" width="288" y="4945.3" x="10"/>
+ <rect id="d0e684" display="none" height="1000px" width="288" y="4945.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e684"/>
</flowRegion>
<flowDiv xml:space="preserve">Gelijkaardig aan de tekenspatiëring kan je de <flowSpan font-style="italic">regelafstand</flowSpan> in meerlijnige tekstobjecten aanpassen. Probeer <flowSpan font-weight="bold">Ctrl+Alt+&lt;</flowSpan> en <flowSpan font-weight="bold">Ctrl+Alt+&gt;</flowSpan> op eender welke paragraaf in deze handleiding om de totale hoogte van het tekstobject te verlagen/verhogen met 1 pixel bij de huidige zoom.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="5018.631261999998" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="5018.631261999998" x="10">XML-editor</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="5018.507228999999" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="5018.507228999999" x="10">XML-editor</tspan>
</text>
- <rect id="d0e702" display="none" height="1000px" width="288" y="5023.8" x="10"/>
+ <rect id="d0e702" display="none" height="1000px" width="288" y="5023.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e702"/>
</flowRegion>
- <flowDiv xml:space="preserve">Het ultieme gereedschap van Inkscape is de XML-editor (<flowSpan font-weight="bold">Shift+Ctrl+X</flowSpan>). Het toont de volledige XML-boom van het document en geeft altijd de huidige status weer. Je kan je tekening bewerken en de overeenkomstige veranderingen in de XML-boom zien. Bovendien kan je teksten, objecten of attributen wijzigen inde XML-boom en het resultaat zien op het canvas. Dit is het beste gereedschap om SVG op interactieve wijze te leren en het laat je toe om trucs toe te passen die onmogelijk zijn met reguliere bewerkingsprogramma's.</flowDiv>
+ <flowDiv xml:space="preserve">Het ultieme gereedschap van Inkscape is de XML-editor (<flowSpan font-weight="bold">Shift+Ctrl+X</flowSpan>). Het toont de volledige XML-boom van het document en geeft altijd de huidige status weer. Je kan je tekening bewerken en de overeenkomstige veranderingen in de XML-boom zien. Bovendien kan je teksten, objecten of attributen wijzigen inde XML-boom en het resultaat zien op het canvas. Dit is het beste gereedschap om SVG op interactieve wijze te leren en het laat je toe om trucs toe te passen die onmogelijk zijn met reguliere bewerkingsprogramma&apos;s.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="5128.986443999998" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="5128.986443999998" x="10">Conclusie</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="5128.862410999999" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="5128.862410999999" x="10">Conclusie</tspan>
</text>
- <rect id="d0e714" display="none" height="1000px" width="288" y="5134.2" x="10"/>
+ <rect id="d0e714" display="none" height="1000px" width="288" y="5134.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e714"/>
</flowRegion>
<flowDiv xml:space="preserve">Deze handleiding toont slechts een kleine fractie van alle mogelijkheden van Inkscape. We hopen dat je het tof vond. Aarzel niet om te experimenteren en te delen wat je maakt. Bezoek <flowSpan font-weight="bold" font-family="sans serif">www.inkscape.org</flowSpan> a.u.b. voor meer informatie, de laatste versies en help van de gebruikers- en ontwikkelgemeenschap.</flowDiv>
</flowRoot>
- <g transform="translate(0, 5194.601913999998)">
+ <g transform="translate(0, 5194.477880999999)">
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
<linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.149642,0.000000,0.000000,0.465194,-0.130153,3495.428)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
<radialGradient id="radialGradient2456" xlink:href="#linearGradient666" gradientUnits="userSpaceOnUse" cy="1036.5" cx="233.92" gradientTransform="scale(1.825742,0.547723)" r="98.26" inkscape:collect="always"/>
diff --git a/share/tutorials/tutorial-calligraphy.svg b/share/tutorials/tutorial-calligraphy.svg
index 8bcee8623..39430b531 100644
--- a/share/tutorials/tutorial-calligraphy.svg
+++ b/share/tutorials/tutorial-calligraphy.svg
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- DO NOT EDIT THIS FILE. It is produced automatically from a DocBook source (*.xml) by tutorial-svg.xsl. -->
<svg id="svg1" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="tutorial-basic.svg" xmlns:string="http://www.jclark.com/xt/java/java.lang.String" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:version="0.32" height="3170pt" width="256pt" version="1.1" xmlns:cc="http://web.resource.org/cc/" xmlns:xlink="http://www.w3.org/1999/xlink" inkscape:version="0.48" xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview id="base" inkscape:window-x="0" inkscape:window-y="0" snaptoguides="true" inkscape:zoom="2.0000000" inkscape:cx="160.00000" inkscape:cy="3864.0000" inkscape:window-width="780" showborder="false" inkscape:window-height="580" showguides="true"/>
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
@@ -153,7 +154,7 @@ currently functions.
</flowRegion>
<flowDiv xml:space="preserve">One great advantage that we have over the scribes of the past is the
<flowSpan font-family="sans serif">Undo</flowSpan> command: If you make a mistake, the entire page is not
-ruined. Inkscape's Calligraphy tool also enables some techniques which would not be
+ruined. Inkscape&apos;s Calligraphy tool also enables some techniques which would not be
possible with a traditional pen-and-ink.
</flowDiv>
</flowRoot>
@@ -203,7 +204,7 @@ now on, Inkscape will remember those settings on startup.
<use y="0" x="0" xlink:href="#d0e105"/>
</flowRegion>
<flowDiv xml:space="preserve">The Inkscape calligraphy pen can be sensitive to the <flowSpan font-style="italic">velocity</flowSpan> of
-the stroke (see “Thinning” below), so if you are using a mouse, you'll probably want to
+the stroke (see “Thinning” below), so if you are using a mouse, you&apos;ll probably want to
zero this parameter.
</flowDiv>
</flowRoot>
@@ -233,12 +234,12 @@ drawing tablets).
<flowDiv xml:space="preserve">This pair of options control the <flowSpan font-style="italic">width</flowSpan> of your pen. The width can
vary from 1 to 100 and (by default) is measured in units relative to the size of
your editing window, but independent of zoom. This makes sense, because the
-natural “unit of measure” in calligraphy is the range of your hand's movement,
+natural “unit of measure” in calligraphy is the range of your hand&apos;s movement,
and it is therefore convenient to have the width of your pen nib in constant
ratio to the size of your “drawing board” and not in some real units which
would make it depend on zoom. This behavior is optional though, so it can be
changed for those who would prefer absolute units regardless of zoom. To switch
-to this mode, use the checkbox on the tool's Preferences page (you can open it
+to this mode, use the checkbox on the tool&apos;s Preferences page (you can open it
by double-clicking the tool button).
</flowDiv>
</flowRoot>
@@ -356,7 +357,7 @@ the angle is determined by the tilt of the pen.
<use y="0" x="0" xlink:href="#d0e208"/>
</flowRegion>
<flowDiv xml:space="preserve">Each traditional calligraphy style has its own prevalent pen angle. For example, the
-Unicial hand uses the angle of 25 degrees. More complex hands and more experienced
+Uncial hand uses the angle of 25 degrees. More complex hands and more experienced
calligraphers will often vary the angle while drawing, and Inkscape makes this possible
by pressing <flowSpan font-weight="bold">up</flowSpan> and <flowSpan font-weight="bold">down</flowSpan> arrow keys or with a tablet that
supports the tilt sensitivity feature. For beginning calligraphy lessons, however,
@@ -392,7 +393,7 @@ natural and traditional for right-handed calligraphy.
<use y="0" x="0" xlink:href="#d0e230"/>
</flowRegion>
<flowDiv xml:space="preserve">The level of contrast between the thinnest and the thickest is controlled by the
-<flowSpan font-style="italic">fixation</flowSpan> parameter. The value of 1 means that the angle is always
+<flowSpan font-style="italic">fixation</flowSpan> parameter. The value of 100 means that the angle is always
constant, as set in the Angle field. Decreasing fixation lets the pen turn a little
against the direction of the stroke. With fixation=0, pen rotates freely to be always
perpendicular to the stroke, and Angle has no effect anymore:
@@ -659,7 +660,7 @@ splotches. This significantly expands the creative range of the tool.
<use y="0" x="0" xlink:href="#d0e277"/>
</flowRegion>
<flowDiv xml:space="preserve">Unlike width and angle, these two last parameters define how the tool “feels” rather
-than affect its visual output. So there won't be any illustrations in this section;
+than affect its visual output. So there won&apos;t be any illustrations in this section;
instead just try them yourself to get a better idea.
</flowDiv>
</flowRoot>
@@ -704,7 +705,7 @@ it with Inkscape. This section will show you just a few simple examples.
<flowRegion>
<use y="0" x="0" xlink:href="#d0e301"/>
</flowRegion>
- <flowDiv xml:space="preserve">First of all, to do letters, you need to create a pair of rulers to guide you. If you're
+ <flowDiv xml:space="preserve">First of all, to do letters, you need to create a pair of rulers to guide you. If you&apos;re
going to write in a slanted or cursive hand, add some slanted guides across the two
rulers as well, for example:
</flowDiv>
@@ -733,7 +734,7 @@ movement range, adjust width and angle, and off you go!
</flowRegion>
<flowDiv xml:space="preserve">Probably the first thing you would do as a beginner calligrapher is practice the basic
elements of letters — vertical and horizontal stems, round strokes, slanted
-stems. Here are some letter elements for the Unicial hand:
+stems. Here are some letter elements for the Uncial hand:
</flowDiv>
</flowRoot>
<path id="calligraphy-f09-en.svgpath8610" stroke-linejoin="miter" style="stroke-dasharray:0.59489660 1.7846897;" d="M10.513,1.4559h290.3" display="block" transform="translate(10, 3227.1048566999993) " stroke-dashoffset="0.0000000" stroke="#aeaeae" stroke-linecap="butt" stroke-miterlimit="4.0000000" stroke-width="0.59489685" sodipodi:insensitive="true" fill="none"/>
@@ -767,7 +768,7 @@ stems. Here are some letter elements for the Unicial hand:
<flowRegion>
<use y="0" x="0" xlink:href="#d0e336"/>
</flowRegion>
- <flowDiv xml:space="preserve">If your hand is comfortable on the tablet, don't move it. Instead,
+ <flowDiv xml:space="preserve">If your hand is comfortable on the tablet, don&apos;t move it. Instead,
scroll the canvas (<flowSpan font-weight="bold">Ctrl+arrow</flowSpan> keys) with your left hand after finishing
each letter. </flowDiv>
</flowRoot>
@@ -779,7 +780,7 @@ each letter. </flowDiv>
</flowRegion>
<flowDiv xml:space="preserve">If your last stroke is bad, just undo it
(<flowSpan font-weight="bold">Ctrl+Z</flowSpan>). However, if its shape is good but the position or size are
-slightly off, it's better to switch to Selector temporarily (<flowSpan font-weight="bold">Space</flowSpan>) and
+slightly off, it&apos;s better to switch to Selector temporarily (<flowSpan font-weight="bold">Space</flowSpan>) and
nudge/scale/rotate it as needed (using mouse or keys), then press <flowSpan font-weight="bold">Space</flowSpan>
again to return to Calligraphy tool.
</flowDiv>
@@ -791,7 +792,7 @@ again to return to Calligraphy tool.
<use y="0" x="0" xlink:href="#d0e356"/>
</flowRegion>
<flowDiv xml:space="preserve">Having done a word, switch to Selector again to adjust stem uniformity
-and letterspacing. Don't overdo this, however; good calligraphy must retain somewhat
+and letterspacing. Don&apos;t overdo this, however; good calligraphy must retain somewhat
irregular handwritten look. Resist the temptation to copy over letters and letter
elements; each stroke must be original.
</flowDiv>
@@ -924,8 +925,8 @@ elements; each stroke must be original.
<flowRegion>
<use y="0" x="0" xlink:href="#d0e379"/>
</flowRegion>
- <flowDiv xml:space="preserve">Calligraphy is not only fun; it's a deeply spiritual art that may
-transform your outlook on everything you do and see. Inkscape's
+ <flowDiv xml:space="preserve">Calligraphy is not only fun; it&apos;s a deeply spiritual art that may
+transform your outlook on everything you do and see. Inkscape&apos;s
calligraphy tool can only serve as a modest introduction. And yet
it is very nice to play with and may be useful in real design. Enjoy!
</flowDiv>
diff --git a/share/tutorials/tutorial-interpolate.fr.svg b/share/tutorials/tutorial-interpolate.fr.svg
index aa58ffc8a..7f0894e45 100644
--- a/share/tutorials/tutorial-interpolate.fr.svg
+++ b/share/tutorials/tutorial-interpolate.fr.svg
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- DO NOT EDIT THIS FILE. It is produced automatically from a DocBook source (*.xml) by tutorial-svg.xsl. -->
<svg id="svg1" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="tutorial-basic.svg" xmlns:string="http://www.jclark.com/xt/java/java.lang.String" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:version="0.32" height="3170pt" width="256pt" version="1.1" xmlns:cc="http://web.resource.org/cc/" xmlns:xlink="http://www.w3.org/1999/xlink" inkscape:version="0.48" xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview id="base" inkscape:window-x="0" inkscape:window-y="0" snaptoguides="true" inkscape:zoom="2.0000000" inkscape:cx="160.00000" inkscape:cy="3864.0000" inkscape:window-width="780" showborder="false" inkscape:window-height="580" showguides="true"/>
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
@@ -58,7 +59,7 @@ Ryan Lerch, ryanlerch at gmail dot com
<flowRegion>
<use y="0" x="0" xlink:href="#d0e15"/>
</flowRegion>
- <flowDiv xml:space="preserve">Ce document explique comment utiliser l'extension Interpoler</flowDiv>
+ <flowDiv xml:space="preserve">Ce document explique comment utiliser l&apos;extension Interpoler</flowDiv>
</flowRoot>
<text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="67.7679686" x="10" font-family="sans" font-style="normal" fill="#000000">
<tspan y="67.7679686" x="10">Introduction</tspan>
@@ -68,51 +69,51 @@ Ryan Lerch, ryanlerch at gmail dot com
<flowRegion>
<use y="0" x="0" xlink:href="#d0e24"/>
</flowRegion>
- <flowDiv xml:space="preserve">Interpoler réalise une <flowSpan font-style="italic">interpolation linéaire</flowSpan> entre deux (ou plus) chemins sélectionnés. Cela signifie essentiellement qu'il « comble les vides » entre les chemins et les transforme en fonction du nombre d'étapes demandées.</flowDiv>
+ <flowDiv xml:space="preserve">Interpoler réalise une <flowSpan font-style="italic">interpolation linéaire</flowSpan> entre deux (ou plus) chemins sélectionnés. Cela signifie essentiellement qu&apos;il « comble les vides » entre les chemins et les transforme en fonction du nombre d&apos;étapes demandées.</flowDiv>
</flowRoot>
<rect id="d0e30" display="none" height="1000px" width="288" y="122.95" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e30"/>
</flowRegion>
- <flowDiv xml:space="preserve">Pour utiliser l'extension Interpoler, sélectionnez les chemins que vous souhaitez transformer, et choisissez la commande <flowSpan font-family="sans serif">Extensions &gt; Générer à partir du chemin &gt; Interpoler</flowSpan>.</flowDiv>
+ <flowDiv xml:space="preserve">Pour utiliser l&apos;extension Interpoler, sélectionnez les chemins que vous souhaitez transformer, et choisissez la commande <flowSpan font-family="sans serif">Extensions &gt; Générer à partir du chemin &gt; Interpoler</flowSpan>.</flowDiv>
</flowRoot>
<rect id="d0e36" display="none" height="1000px" width="288" y="162.29" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e36"/>
</flowRegion>
- <flowDiv xml:space="preserve">Avant de lancer cet extension, les objets que vous souhaitez transformer doivent être des <flowSpan font-style="italic">chemins</flowSpan>. Si ce n'est pas le cas, l'extension sera inopérante. Pour transformer un objet en chemin, utilisez la commande <flowSpan font-family="sans serif">Chemin &gt; Objet en chemin</flowSpan> or <flowSpan font-weight="bold">Ctrl+Maj+C</flowSpan>.</flowDiv>
+ <flowDiv xml:space="preserve">Avant de lancer cet extension, les objets que vous souhaitez transformer doivent être des <flowSpan font-style="italic">chemins</flowSpan>. Pour transformer un objet en chemin, utilisez la commande <flowSpan font-family="sans serif">Chemin &gt; Objet en chemin</flowSpan> or <flowSpan font-weight="bold">Maj+Ctrl+C</flowSpan>. Si ce n&apos;est pas le cas, l&apos;extension sera inopérante.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="224.8881536" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="224.8881536" x="10">Interpolation entre deux chemins identiques</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="224.7945826" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="224.7945826" x="10">Interpolation entre deux chemins identiques</tspan>
</text>
- <rect id="d0e54" display="none" height="1000px" width="288" y="230.09" x="10"/>
+ <rect id="d0e54" display="none" height="1000px" width="288" y="229.99" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e54"/>
</flowRegion>
- <flowDiv xml:space="preserve">L'utilisation la plus simple de l'extension Interpoler consiste à l'appliquer entre deux chemins identiques. Lorsque l'extension est appelée, elle a pour effet de remplir l'espace entre les deux chemins avec des copies des chemins originaux. Le nombre d'étapes défini combien de copies seront utilisées.</flowDiv>
+ <flowDiv xml:space="preserve">L&apos;utilisation la plus simple de l&apos;extension Interpoler consiste à l&apos;appliquer entre deux chemins identiques. Lorsque l&apos;extension est appelée, elle a pour effet de remplir l&apos;espace entre les deux chemins avec des copies des chemins originaux. Le nombre d&apos;étapes défini combien de copies seront utilisées.</flowDiv>
</flowRoot>
- <rect id="d0e57" display="none" height="1000px" width="288" y="290.7" x="10"/>
+ <rect id="d0e57" display="none" height="1000px" width="288" y="290.61" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e57"/>
</flowRegion>
<flowDiv xml:space="preserve">Prenons par exemple les deux chemins suivants :</flowDiv>
</flowRoot>
- <g id="interpolate-f01-fr.svgg2896" transform="translate(10, 316.4450301) translate(4.5977783e-8,7.758846e-3)">
+ <g id="interpolate-f01-fr.svgg2896" transform="translate(10, 316.3514591) translate(4.5977783e-8,7.758846e-3)">
<path id="interpolate-f01-fr.svgrect4368" stroke-linejoin="round" d="M20.29,2.0163c10.119,0,18.265,8.1467,18.265,18.266s-8.146,18.265-18.265,18.265c-10.12,0-18.266-8.146-18.266-18.265s8.1459-18.266,18.266-18.266z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f01-fr.svgrect4370" stroke-linejoin="round" d="M245.44,2.0163c10.12,0,18.27,8.1467,18.27,18.266s-8.15,18.265-18.27,18.265-18.27-8.146-18.27-18.265,8.15-18.266,18.27-18.266z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
</g>
- <rect id="d0e70" display="none" height="1000px" width="288" y="369.02" x="10"/>
+ <rect id="d0e70" display="none" height="1000px" width="288" y="368.93" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e70"/>
</flowRegion>
- <flowDiv xml:space="preserve">Sélectionnez maintenant les deux chemins et exécutez l'extension Interpoler avec les paramètres proposés dans l'image suivante.</flowDiv>
+ <flowDiv xml:space="preserve">Sélectionnez maintenant les deux chemins et exécutez l&apos;extension Interpoler avec les paramètres proposés dans l&apos;image suivante.</flowDiv>
</flowRoot>
- <g id="interpolate-f02-fr.svgg3003" transform="translate(10, 405.8399801) translate(2.8125e-6,2.0373646e-2)">
+ <g id="interpolate-f02-fr.svgg3003" transform="translate(10, 405.7464091) translate(2.8125e-6,2.0373646e-2)">
<path id="interpolate-f02-fr.svgpath4419" stroke-linejoin="round" d="M20.29,2.0037c10.119,0,18.265,8.1463,18.265,18.265s-8.146,18.266-18.265,18.266c-10.12,0-18.266-8.147-18.266-18.266s8.1459-18.265,18.266-18.265z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate2.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f02-fr.svgpath4421" stroke-linejoin="round" d="M245.44,2.0037c10.12,0,18.27,8.1463,18.27,18.265s-8.15,18.266-18.27,18.266-18.27-8.147-18.27-18.266,8.15-18.265,18.27-18.265z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate2.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<g id="interpolate-f02-fr.svgg4423" inkscape:export-ydpi="88.379997" inkscape:export-xdpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate2.png" transform="matrix(0.5218716,0,0,0.5218716,-12.141006,-26.068155)">
@@ -123,44 +124,44 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f02-fr.svgpath4433" stroke-linejoin="round" d="M370.31,53.791c19.39,0,35,15.61,35,35,0,19.389-15.61,34.999-35,34.999s-35-15.61-35-34.999c0-19.39,15.61-35,35-35" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
<path id="interpolate-f02-fr.svgpath4435" stroke-linejoin="round" d="M431.94,53.791c19.39,0,35,15.61,35,35,0,19.389-15.61,34.999-35,34.999s-35-15.61-35-34.999c0-19.39,15.61-35,35-35" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
</g>
- <flowRoot id="interpolate-f02-fr.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,26.335616)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f02-fr.svgflowRegion2611"><rect id="interpolate-f02-fr.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f02-fr.svgflowPara2615">Exposant : 0.0</flowPara><flowPara id="interpolate-f02-fr.svgflowPara2617">Étapes d'interpolation : 6</flowPara><flowPara id="interpolate-f02-fr.svgflowPara2619">Méthode d'interpolation : 2</flowPara><flowPara id="interpolate-f02-fr.svgflowPara2621">Dupliquer les extrémités : décoché</flowPara><flowPara id="interpolate-f02-fr.svgflowPara2623">Interpoler le style : décoché</flowPara></flowRoot>
+ <flowRoot id="interpolate-f02-fr.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,26.335616)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f02-fr.svgflowRegion2611"><rect id="interpolate-f02-fr.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f02-fr.svgflowPara2615">Exposant : 0.0</flowPara><flowPara id="interpolate-f02-fr.svgflowPara2617">Étapes d&apos;interpolation : 6</flowPara><flowPara id="interpolate-f02-fr.svgflowPara2619">Méthode d&apos;interpolation : 2</flowPara><flowPara id="interpolate-f02-fr.svgflowPara2621">Dupliquer les extrémités : décoché</flowPara><flowPara id="interpolate-f02-fr.svgflowPara2623">Interpoler le style : décoché</flowPara></flowRoot>
</g>
- <rect id="d0e83" display="none" height="1000px" width="288" y="497.36" x="10"/>
+ <rect id="d0e83" display="none" height="1000px" width="288" y="497.27" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e83"/>
</flowRegion>
- <flowDiv xml:space="preserve">Comme vous pouvez le voir ci-dessus, l'espace entre les deux chemins en forme de cercle a été rempli par six (le nombre d'étapes d'interpolation) autres chemins de même forme. Notez également que l'extension groupe toutes les formes.</flowDiv>
+ <flowDiv xml:space="preserve">Comme vous pouvez le voir ci-dessus, l&apos;espace entre les deux chemins en forme de cercle a été rempli par six (le nombre d&apos;étapes d&apos;interpolation) autres chemins de même forme. Notez également que l&apos;extension groupe toutes les formes.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="559.9374821" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="559.9374821" x="10">Interpolation entre deux différents chemins</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="559.8439111" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="559.8439111" x="10">Interpolation entre deux différents chemins</tspan>
</text>
- <rect id="d0e92" display="none" height="1000px" width="288" y="565.14" x="10"/>
+ <rect id="d0e92" display="none" height="1000px" width="288" y="565.04" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e92"/>
</flowRegion>
- <flowDiv xml:space="preserve">Lorsque l'interpolation est effectuée entre deux chemins différents, le programme interpole la forme du chemin du premier vers le second. En résultat, vous obtenez une séquence fondue entre les chemins, toujours avec la régularité définie par le paramètre Étapes d'interpolation.</flowDiv>
+ <flowDiv xml:space="preserve">Lorsque l&apos;interpolation est effectuée entre deux chemins différents, le programme interpole la forme du chemin du premier vers le second. En résultat, vous obtenez une séquence fondue entre les chemins, toujours avec la régularité définie par le paramètre Étapes d&apos;interpolation.</flowDiv>
</flowRoot>
- <rect id="d0e95" display="none" height="1000px" width="288" y="625.76" x="10"/>
+ <rect id="d0e95" display="none" height="1000px" width="288" y="625.67" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e95"/>
</flowRegion>
<flowDiv xml:space="preserve">Prenons par exemple les deux chemins suivants :</flowDiv>
</flowRoot>
- <g id="interpolate-f03-fr.svgg15756" transform="translate(10, 651.5021706) translate(-17.882737,-67.121272)">
+ <g id="interpolate-f03-fr.svgg15756" transform="translate(10, 651.4085996000001) translate(-17.882737,-67.121272)">
<path id="interpolate-f03-fr.svgpath4455" stroke-linejoin="round" d="M38.172,69.145c10.119,0,18.266,8.147,18.266,18.266s-8.147,18.269-18.266,18.269-18.265-8.15-18.265-18.269,8.146-18.266,18.265-18.266z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f03-fr.svgpath4457" stroke-linejoin="round" d="M281.59,76.452l-18.27,29.228-18.26-29.228h36.53z" inkscape:export-ydpi="88.379997" sodipodi:nodetypes="cccc" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
</g>
- <rect id="d0e108" display="none" height="1000px" width="288" y="704.08" x="10"/>
+ <rect id="d0e108" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e108"/>
</flowRegion>
- <flowDiv xml:space="preserve">Sélectionnez maintenant les deux chemins, et lancez l'extension Interpoler. Le résultat devrait ressembler à ceci :</flowDiv>
+ <flowDiv xml:space="preserve">Sélectionnez maintenant les deux chemins et lancez l&apos;extension Interpoler. Le résultat devrait ressembler à ceci :</flowDiv>
</flowRoot>
- <g id="interpolate-f04-fr.svgg2967" transform="translate(10, 740.7838276) translate(2.8125e-6,-0.4247481)">
+ <g id="interpolate-f04-fr.svgg2967" transform="translate(10, NaN) translate(2.8125e-6,-0.4247481)">
<path id="interpolate-f04-fr.svgpath2532" stroke-linejoin="round" d="M263.71,9.755s-8.58,13.718-13.98,22.357c-2.48,3.97-4.29,6.868-4.29,6.868s-4.94-7.903-9.68-15.49c-4.38-7.002-8.59-13.735-8.59-13.735h10.17,26.37" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<g id="interpolate-f04-fr.svgg2606" transform="matrix(0.5218716,0,0,0.5218716,-7.8861822,-205.17)">
<path id="interpolate-f04-fr.svgpath2534" stroke-linejoin="round" d="M453.79,409.84c2.77,0-9.09,24.76-17.95,41.71-4.08,7.37-7.26,12.91-7.62,13.61-0.84,1.59-10.62-10.31-20.33-22.77-8.9-11.5-17.32-23.4-18.22-24.71-0.56-0.8,6.36-1.78,15.81-2.84,17.76-2.77,45.54-5,48.31-5" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
@@ -171,30 +172,30 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f04-fr.svgpath2544" stroke-linejoin="round" d="M120.62,399.84c16.62,0,27.66,17.13,26.18,36.11-0.68,6.13-2.41,11.66-4.58,15.82-5,9.57-16.37,13.9-29.25,11.82-11.45-1.91-21.626-8.85-27.032-16.66-3.354-4.84-4.108-10.73-2.532-17.09,2.959-16.62,20.594-30,37.214-30" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
</g>
<path id="interpolate-f04-fr.svgpath2546" stroke-linejoin="round" d="M20.29,2.4488c10.119,0,18.265,8.1462,18.265,18.265,0,3.067-0.748,5.952-2.072,8.485-3.046,5.824-9.141,9.781-16.193,9.781-6.245,0-11.738-3.102-15.029-7.856-2.0422-2.95-3.2366-6.535-3.2366-10.41,0-10.119,8.1459-18.265,18.266-18.265" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
- <flowRoot id="interpolate-f04-fr.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,26.53513)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f04-fr.svgflowRegion2611"><rect id="interpolate-f04-fr.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f04-fr.svgflowPara2615">Exposant : 0.0</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2617">Étapes d'interpolation : 6</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2619">Méthode d'interpolation : 2</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2621">Dupliquer les extrémités : décoché</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2623">Interpoler le style : décoché</flowPara></flowRoot>
+ <flowRoot id="interpolate-f04-fr.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,26.53513)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f04-fr.svgflowRegion2611"><rect id="interpolate-f04-fr.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f04-fr.svgflowPara2615">Exposant : 0.0</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2617">Étapes d&apos;interpolation : 6</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2619">Méthode d&apos;interpolation : 2</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2621">Dupliquer les extrémités : décoché</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2623">Interpoler le style : décoché</flowPara></flowRoot>
</g>
- <rect id="d0e121" display="none" height="1000px" width="288" y="832.06" x="10"/>
+ <rect id="d0e121" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e121"/>
</flowRegion>
- <flowDiv xml:space="preserve">Comme vous pouvez le constater avec le résultat précédent, l'espace entre le chemin en forme de cercle et celui en forme de triangle a été rempli par six chemins qui passent progressivement de la forme du premier chemin à celle du second.</flowDiv>
+ <flowDiv xml:space="preserve">Comme vous pouvez le constater avec le résultat précédent, l&apos;espace entre le chemin en forme de cercle et celui en forme de triangle a été rempli par six chemins qui passent progressivement de la forme du premier chemin à celle du second.</flowDiv>
</flowRoot>
- <rect id="d0e124" display="none" height="1000px" width="288" y="882.04" x="10"/>
+ <rect id="d0e124" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e124"/>
</flowRegion>
- <flowDiv xml:space="preserve">Lorsque vous utilisez l'extension Interpoler entre deux chemins différents, la <flowSpan font-style="italic">position</flowSpan> du nœud de départ de chaque chemin est importante. Pour trouver ce nœud particulier, sélectionnez le chemin, puis l'outil Nœud pour faire apparaitre les nœuds, et appuyez sur la touche <flowSpan font-weight="bold">Tab</flowSpan>. Le premier nœud apparaissant sélectionné est le nœud de départ.</flowDiv>
+ <flowDiv xml:space="preserve">Lorsque vous utilisez l&apos;extension Interpoler entre deux chemins différents, la <flowSpan font-style="italic">position</flowSpan> du nœud de départ de chaque chemin est importante. Pour trouver ce nœud particulier, sélectionnez le chemin, puis l&apos;outil Nœud pour faire apparaitre les nœuds, et appuyez sur la touche <flowSpan font-weight="bold">Tab</flowSpan>. Le premier nœud apparaissant sélectionné est le nœud de départ.</flowDiv>
</flowRoot>
- <rect id="d0e133" display="none" height="1000px" width="288" y="953" x="10"/>
+ <rect id="d0e133" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e133"/>
</flowRegion>
- <flowDiv xml:space="preserve">Examinez l'image ci-dessous, identique à l'exemple précédent, à l'exception des nœuds ici affichés. Le nœud vert, sur chaque chemin, est le nœud de départ.</flowDiv>
+ <flowDiv xml:space="preserve">Examinez l&apos;image ci-dessous, identique à l&apos;exemple précédent, à l&apos;exception des nœuds ici affichés. Le nœud vert, sur chaque chemin, est le nœud de départ.</flowDiv>
</flowRoot>
- <g id="interpolate-f05-fr.svgg2898" transform="translate(10, 1000.3471536) translate(9.4344012e-2,0)">
+ <g id="interpolate-f05-fr.svgg2898" transform="translate(10, NaN) translate(9.4344012e-2,0)">
<path id="interpolate-f05-fr.svgpath4455" stroke-linejoin="round" d="M20.262,2.0739c10.119,0,18.265,8.1461,18.265,18.265,0,10.12-8.146,18.266-18.265,18.266s-18.266-8.146-18.266-18.266c0-10.119,8.1469-18.265,18.266-18.265z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f05-fr.svgpath4457" stroke-linejoin="round" d="M263.68,9.3801l-18.27,29.225-18.26-29.225h36.53z" inkscape:export-ydpi="88.379997" sodipodi:nodetypes="cccc" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<rect id="interpolate-f05-fr.svgrect2473" transform="matrix(-0.7129787,0.7011857,-0.7011857,-0.7129787,0,0)" height="2.9821" width="2.9821" y="-16.968" x="-14.604" fill="#0F0"/>
@@ -205,14 +206,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<rect id="interpolate-f05-fr.svgrect2483" transform="matrix(-0.7129787,0.7011857,-0.7011857,-0.7129787,0,0)" height="2.9821" width="2.9821" y="-192.64" x="-181.96" fill="#0F0"/>
<rect id="interpolate-f05-fr.svgrect2485" transform="matrix(-0.7129787,0.7011857,-0.7011857,-0.7129787,0,0)" height="2.9821" width="2.9821" y="-200.55" x="-150.15" fill="#CCC"/>
</g>
- <rect id="d0e146" display="none" height="1000px" width="288" y="1053.5" x="10"/>
+ <rect id="d0e146" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e146"/>
</flowRegion>
- <flowDiv xml:space="preserve">L'exemple précédent (affiché à nouveau ci-dessous) a été réalisé avec ces nœuds de départ.</flowDiv>
+ <flowDiv xml:space="preserve">L&apos;exemple précédent (affiché à nouveau ci-dessous) a été réalisé avec ces nœuds de départ.</flowDiv>
</flowRoot>
- <g id="interpolate-f04-fr.svgg2967" transform="translate(10, 1090.1687316) translate(2.8125e-6,-0.4247481)">
+ <g id="interpolate-f04-fr.svgg2967" transform="translate(10, NaN) translate(2.8125e-6,-0.4247481)">
<path id="interpolate-f04-fr.svgpath2532" stroke-linejoin="round" d="M263.71,9.755s-8.58,13.718-13.98,22.357c-2.48,3.97-4.29,6.868-4.29,6.868s-4.94-7.903-9.68-15.49c-4.38-7.002-8.59-13.735-8.59-13.735h10.17,26.37" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<g id="interpolate-f04-fr.svgg2606" transform="matrix(0.5218716,0,0,0.5218716,-7.8861822,-205.17)">
<path id="interpolate-f04-fr.svgpath2534" stroke-linejoin="round" d="M453.79,409.84c2.77,0-9.09,24.76-17.95,41.71-4.08,7.37-7.26,12.91-7.62,13.61-0.84,1.59-10.62-10.31-20.33-22.77-8.9-11.5-17.32-23.4-18.22-24.71-0.56-0.8,6.36-1.78,15.81-2.84,17.76-2.77,45.54-5,48.31-5" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
@@ -223,16 +224,16 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f04-fr.svgpath2544" stroke-linejoin="round" d="M120.62,399.84c16.62,0,27.66,17.13,26.18,36.11-0.68,6.13-2.41,11.66-4.58,15.82-5,9.57-16.37,13.9-29.25,11.82-11.45-1.91-21.626-8.85-27.032-16.66-3.354-4.84-4.108-10.73-2.532-17.09,2.959-16.62,20.594-30,37.214-30" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
</g>
<path id="interpolate-f04-fr.svgpath2546" stroke-linejoin="round" d="M20.29,2.4488c10.119,0,18.265,8.1462,18.265,18.265,0,3.067-0.748,5.952-2.072,8.485-3.046,5.824-9.141,9.781-16.193,9.781-6.245,0-11.738-3.102-15.029-7.856-2.0422-2.95-3.2366-6.535-3.2366-10.41,0-10.119,8.1459-18.265,18.266-18.265" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
- <flowRoot id="interpolate-f04-fr.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,26.53513)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f04-fr.svgflowRegion2611"><rect id="interpolate-f04-fr.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f04-fr.svgflowPara2615">Exposant : 0.0</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2617">Étapes d'interpolation : 6</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2619">Méthode d'interpolation : 2</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2621">Dupliquer les extrémités : décoché</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2623">Interpoler le style : décoché</flowPara></flowRoot>
+ <flowRoot id="interpolate-f04-fr.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,26.53513)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f04-fr.svgflowRegion2611"><rect id="interpolate-f04-fr.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f04-fr.svgflowPara2615">Exposant : 0.0</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2617">Étapes d&apos;interpolation : 6</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2619">Méthode d&apos;interpolation : 2</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2621">Dupliquer les extrémités : décoché</flowPara><flowPara id="interpolate-f04-fr.svgflowPara2623">Interpoler le style : décoché</flowPara></flowRoot>
</g>
- <rect id="d0e159" display="none" height="1000px" width="288" y="1181.4" x="10"/>
+ <rect id="d0e159" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e159"/>
</flowRegion>
- <flowDiv xml:space="preserve">Notez maintenant les changements, dans le résultat de l'interpolation, lorsque le chemin triangle a été inversé (par miroir) de façon à ce que le nœud de départ soit dans un position différente :</flowDiv>
+ <flowDiv xml:space="preserve">Notez maintenant les changements, dans le résultat de l&apos;interpolation, lorsque le chemin triangle a été inversé (par miroir) de façon à ce que le nœud de départ soit dans un position différente :</flowDiv>
</flowRoot>
- <g id="interpolate-f07-fr.svgg2958" transform="translate(10, 1228.7876566) translate(-2.3727341e-7,0.318569)">
+ <g id="interpolate-f07-fr.svgg2958" transform="translate(10, NaN) translate(-2.3727341e-7,0.318569)">
<g id="interpolate-f07-fr.svgg2900">
<path id="interpolate-f07-fr.svgpath2614" stroke-linejoin="round" d="M20.356,2.0242c10.119,0,18.265,8.1468,18.265,18.266s-8.146,18.265-18.265,18.265-18.266-8.146-18.266-18.265,8.1465-18.266,18.266-18.266z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f07-fr.svgpath2616" stroke-linejoin="round" d="M227.24,9.3304l18.27,29.225,18.26-29.225h-36.53z" inkscape:export-ydpi="88.379997" sodipodi:nodetypes="cccc" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
@@ -245,7 +246,7 @@ Ryan Lerch, ryanlerch at gmail dot com
<rect id="interpolate-f07-fr.svgrect2630" transform="matrix(0.7129787,0.7011857,0.7011857,-0.7129787,0,0)" height="2.9821" width="2.9821" y="143.71" x="199.83" fill="#CCC"/>
</g>
</g>
- <g id="interpolate-f08-fr.svgg2947" transform="translate(10, 1289.9067816) translate(-4.5008329e-8,1.1377795e-2)">
+ <g id="interpolate-f08-fr.svgg2947" transform="translate(10, NaN) translate(-4.5008329e-8,1.1377795e-2)">
<g id="interpolate-f08-fr.svgg2693" transform="matrix(0.5218716,0,0,0.5218716,-7.8861828,-265.1763)">
<path id="interpolate-f08-fr.svgpath2695" stroke-linejoin="round" d="M53.99,511.98c19.39,0,35,15.61,35,35,0,5.88-1.434,11.41-3.971,16.26-5.837,11.16-17.515,18.74-31.029,18.74-11.966,0-22.492-5.94-28.798-15.05-3.913-5.65-6.202-12.52-6.202-19.95,0-19.39,15.61-35,35-35" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
<path id="interpolate-f08-fr.svgpath2697" stroke-linejoin="round" d="M110.62,513.98c16.62,0,32.35,17.14,33.83,36.12,0.68,6.13-0.06,11.66-2.23,15.82-5,9.56-13.66,13.9-23.95,11.82-9.06-1.91-16.93-8.85-22.332-16.66-3.354-4.85-6.523-10.73-8.099-17.1-2.959-16.62,6.164-30,22.781-30" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
@@ -257,24 +258,24 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f08-fr.svgpath2709" stroke-linejoin="round" d="M450.42,525.98s16.43,26.29,26.77,42.84c4.76,7.61,8.23,13.16,8.23,13.16s9.46-15.14,18.55-29.68c8.39-13.42,16.45-26.32,16.45-26.32h-19.48-50.52" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
</g>
</g>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1355.2859566" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1355.2859566" x="10">Méthode d'interpolation</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="NaN" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="NaN" x="10">Méthode d&apos;interpolation</tspan>
</text>
- <rect id="d0e188" display="none" height="1000px" width="288" y="1360.5" x="10"/>
+ <rect id="d0e188" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e188"/>
</flowRegion>
- <flowDiv xml:space="preserve">Un des paramètres de l'extension Interpolation est la méthode d'interpolation. Deux méthodes ont été implémentées ; elles différent dans la façon dont sont calculées les courbes des nouvelles formes. Ces choix prennent la valeur 1 ou 2.</flowDiv>
+ <flowDiv xml:space="preserve">Un des paramètres de l&apos;extension Interpolation est la méthode d&apos;interpolation. Deux méthodes ont été implémentées ; elles se différencient dans la façon dont sont calculées les courbes des nouvelles formes. Ces choix prennent la valeur 1 ou 2.</flowDiv>
</flowRoot>
- <rect id="d0e191" display="none" height="1000px" width="288" y="1410.5" x="10"/>
+ <rect id="d0e191" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e191"/>
</flowRegion>
- <flowDiv xml:space="preserve">Dans l'exemple ci-dessus, nous avons utilisé la méthode d'interpolation 2, et le résultat était :</flowDiv>
+ <flowDiv xml:space="preserve">Dans l&apos;exemple ci-dessus, nous avons utilisé la méthode d&apos;interpolation 2, et le résultat était :</flowDiv>
</flowRoot>
- <g id="interpolate-f09-fr.svgg2939" transform="translate(10, 1447.1709586000002) translate(4.5977783e-8,-4.346754e-3)">
+ <g id="interpolate-f09-fr.svgg2939" transform="translate(10, NaN) translate(4.5977783e-8,-4.346754e-3)">
<path id="interpolate-f09-fr.svgpath2532" stroke-linejoin="round" d="M263.71,9.3346s-8.58,13.717-13.98,22.356c-2.48,3.971-4.29,6.868-4.29,6.868s-4.94-7.903-9.68-15.489c-4.38-7.003-8.59-13.735-8.59-13.735h10.17,26.37" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<g id="interpolate-f09-fr.svgg2606" transform="matrix(0.5218716,0,0,0.5218716,-7.8861822,-205.5904)">
<path id="interpolate-f09-fr.svgpath2534" stroke-linejoin="round" d="M453.79,409.84c2.77,0-9.09,24.76-17.95,41.71-4.08,7.37-7.26,12.91-7.62,13.61-0.84,1.59-10.62-10.31-20.33-22.77-8.9-11.5-17.32-23.4-18.22-24.71-0.56-0.8,6.36-1.78,15.81-2.84,17.76-2.77,45.54-5,48.31-5" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
@@ -286,14 +287,14 @@ Ryan Lerch, ryanlerch at gmail dot com
</g>
<path id="interpolate-f09-fr.svgpath2546" stroke-linejoin="round" d="M20.29,2.0284c10.119,0,18.265,8.1466,18.265,18.266,0,3.066-0.748,5.952-2.072,8.484-3.046,5.824-9.141,9.781-16.193,9.781-6.245,0-11.738-3.102-15.029-7.855-2.0422-2.95-3.2366-6.535-3.2366-10.41,0-10.119,8.1459-18.266,18.266-18.266" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
</g>
- <rect id="d0e204" display="none" height="1000px" width="288" y="1499.8" x="10"/>
+ <rect id="d0e204" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e204"/>
</flowRegion>
- <flowDiv xml:space="preserve">Comparez maintenant avec la méthode d'interpolation 1 :</flowDiv>
+ <flowDiv xml:space="preserve">Comparez maintenant avec la méthode d&apos;interpolation 1 :</flowDiv>
</flowRoot>
- <g id="interpolate-f10-fr.svgg2607" transform="translate(10, 1525.8126166000002) translate(-19.278123,-16.358316)">
+ <g id="interpolate-f10-fr.svgg2607" transform="translate(10, NaN) translate(-19.278123,-16.358316)">
<path id="interpolate-f10-fr.svgpath4460" stroke-linejoin="round" d="M39.568,18.382c10.119,0,18.265,8.147,18.265,18.266s-8.146,18.265-18.265,18.265-18.266-8.146-18.266-18.265,8.147-18.266,18.266-18.266z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f10-fr.svgpath4462" stroke-linejoin="round" d="M282.98,25.689l-18.26,29.224-18.27-29.224h36.53z" inkscape:export-ydpi="88.379997" sodipodi:nodetypes="cccc" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<g id="interpolate-f10-fr.svgg4484" transform="matrix(0.5218716,0,0,0.5218716,10.864771,-181.23611)">
@@ -305,31 +306,31 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f10-fr.svgpath4496" stroke-linejoin="round" d="M454.8,394.51c2.77,0-25,50.23-25,53s-32.23-43-35-43,10-2.23,25-5,32.23-5,35-5" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
</g>
</g>
- <rect id="d0e217" display="none" height="1000px" width="288" y="1578.4" x="10"/>
+ <rect id="d0e217" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e217"/>
</flowRegion>
<flowDiv xml:space="preserve">Expliquer exactement comment ces deux méthodes travaillent dépasse le cadre de ce document. Essayez simplement les deux méthodes, et utilisez celle qui donne le résultat le plus proche de ce que vous souhaitez.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1641.1742766000002" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1641.1742766000002" x="10">Exposant</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="NaN" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="NaN" x="10">Exposant</tspan>
</text>
- <rect id="d0e226" display="none" height="1000px" width="288" y="1646.4" x="10"/>
+ <rect id="d0e226" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e226"/>
</flowRegion>
- <flowDiv xml:space="preserve">Le paramètre <flowSpan font-style="italic">Exposant</flowSpan> contrôle l'espacement entre les étapes de l'extrapolation. Avec un exposant à 0, l'espacement entre les copies est partout identique.</flowDiv>
+ <flowDiv xml:space="preserve">Le paramètre <flowSpan font-style="italic">Exposant</flowSpan> contrôle l&apos;espacement entre les étapes de l&apos;extrapolation. Avec un exposant à 0, l&apos;espacement entre les copies est partout identique.</flowDiv>
</flowRoot>
- <rect id="d0e232" display="none" height="1000px" width="288" y="1685.7" x="10"/>
+ <rect id="d0e232" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e232"/>
</flowRegion>
- <flowDiv xml:space="preserve">Voici le résultat d'un autre exemple élémentaire avec un exposant de 0.</flowDiv>
+ <flowDiv xml:space="preserve">Voici le résultat d&apos;un autre exemple élémentaire avec un exposant de 0.</flowDiv>
</flowRoot>
- <g id="interpolate-f11-fr.svgg2920" transform="translate(10, 1720.8684966000003) translate(2.8125e-6,-2.3064422e-7)">
+ <g id="interpolate-f11-fr.svgg2920" transform="translate(10, NaN) translate(2.8125e-6,-2.3064422e-7)">
<path id="interpolate-f11-fr.svgpath5198" stroke-linejoin="round" d="M247.6,27.441h-10.65l-5.33-9.226,5.33-9.226h10.65l5.33,9.226-5.33,9.226z" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.86884195" fill="#0F0"/>
<path id="interpolate-f11-fr.svgpath5921" stroke-linejoin="round" d="M22.999,28.619s-3.491-3.274-3.621-3.274c-0.066,0-0.79,4.829-0.872,4.829s-2.393-4.166-2.481-4.166c-0.087,0-2.283,4.393-2.365,4.393-0.081,0-0.986-4.649-1.051-4.649-0.131,0-3.5815,3.526-3.5815,3.526s0.6054-4.753,0.5399-4.866c-0.0327-0.057-4.3588,2.191-4.3997,2.121-0.0409-0.071,1.9781-4.395,1.9345-4.471-0.0436-0.075-4.8806,0.725-4.9215,0.655-0.0408-0.071,3.1955-3.54,3.1628-3.597-0.0654-0.113-4.9385-0.837-4.9385-0.837s4.2094-2.3,4.2748-2.413c0.0327-0.057-4.322-2.231-4.2811-2.302,0.02044-0.036,4.6908-0.901,4.7123-0.938s-3.483-3.4376-3.4612-3.4754,4.7214,0.5734,4.7428,0.5362c0.0215-0.0372-2.2719-4.3618-2.2514-4.3972,0.0409-0.0708,4.3273,1.9258,4.36,1.8691,0.0654-0.1133-0.7671-4.9822-0.7671-4.9822s3.4899,3.2745,3.6209,3.2745c0.066,0,0.79-4.8295,0.872-4.8295,0.081,0,2.393,4.1658,2.48,4.1658,0.088,0,2.283-4.3929,2.365-4.3929s0.987,4.6493,1.052,4.6493c0.131,0,3.581-3.5263,3.581-3.5263s-0.605,4.7534-0.54,4.8667c0.033,0.0566,4.359-2.1918,4.4-2.121,0.041,0.0709-1.978,4.3946-1.935,4.4702,0.022,0.0377,4.837-0.8006,4.859-0.7634,0.021,0.0372-3.232,3.4771-3.212,3.5121,0.041,0.071,4.909,0.785,4.942,0.841,0.065,0.114-4.057,2.414-4.057,2.414s4.349,2.184,4.284,2.297c-0.033,0.057-4.72,0.951-4.761,1.022-0.021,0.036,3.484,3.435,3.463,3.472-0.022,0.038-4.721-0.574-4.743-0.536-0.044,0.076,2.227,4.439,2.186,4.51-0.04,0.071-4.327-1.926-4.36-1.869-0.065,0.113,0.768,4.982,0.768,4.982" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.79674554" fill="#0F0"/>
<g id="interpolate-f11-fr.svgg6545" transform="matrix(0.5218716,0,0,0.5218716,-9.217538,-573.46675)">
@@ -340,16 +341,16 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f11-fr.svgpath6555" stroke-linejoin="round" d="M184.7,1153.1s-5.13-4.5-5.83-4.5c-0.35,0-1.64,6.6-2.08,6.6-0.38,0-3.84-5.7-4.26-5.7s-3.72,6-4.13,6-1.94-6.4-2.29-6.4c-0.53,0-5.56,4.9-5.8,4.9-0.35,0-0.27-2.4-0.05-4.3,0.15-1.3,0.2-2.4,0.07-2.7-0.15-0.2-6.23,2.6-6.46,2.2-0.19-0.3,2.42-6.5,2.21-6.9-0.21-0.3-6.98,0.5-7.18,0.1-0.2-0.3,4.08-5.3,3.9-5.6-0.25-0.5-7.07-1.7-7.21-2-0.19-0.3,5.42-3.7,5.41-4-0.06-0.2-0.86-0.7-1.83-1.2-1.74-0.9-4.07-2.3-3.85-2.7,0.15-0.3,6.69-1.7,6.88-2.1,0.17-0.2-4.48-5.2-4.3-5.5,0.17-0.3,6.75,0.3,6.92,0,0.18-0.3-2.81-6.5-2.64-6.8,0.21-0.3,6.23,2.2,6.4,1.9,0.35-0.6-0.47-6.8-0.6-7.5,0-0.1-0.01-0.1,0-0.1,0.06,0,5.17,4.5,5.83,4.5,0.35,0,1.64-6.7,2.07-6.7,0.39,0,3.85,5.7,4.27,5.7,0.41,0,3.72-6,4.13-6s1.93,6.4,2.29,6.4c0.53,0,5.56-4.8,5.8-4.8,0.34,0,0.26,2.3,0.04,4.2-0.15,1.3-0.2,2.5-0.06,2.7,0.15,0.3,6.22-2.5,6.46-2.1,0.19,0.3-2.43,6.5-2.22,6.8,0.18,0.3,6.92-0.6,7.09-0.2,0.18,0.3-4.13,5.2-3.97,5.5,0.22,0.4,7.04,1.6,7.22,1.9,0.26,0.5-5.23,3.9-5.13,4.1,0.09,0.1,1.03,0.7,2.12,1.2,1.73,0.9,3.83,2.3,3.6,2.7-0.17,0.2-6.73,1.7-6.96,2.1-0.16,0.3,4.49,5.2,4.3,5.5-0.17,0.3-6.74-0.3-6.91,0-0.22,0.4,2.74,6.6,2.54,7-0.21,0.3-6.22-2.1-6.39-1.8-0.36,0.6,0.6,7.6,0.6,7.6" stroke="#17a500" stroke-miterlimit="4" stroke-width="1.66485786" fill="#0F0"/>
<path id="interpolate-f11-fr.svgpath6557" stroke-linejoin="round" d="M123.21,1153.4s-5.9-5.4-6.38-5.4c-0.24,0-1.58,7.9-1.87,7.9-0.27,0-4.22-6.8-4.51-6.8s-4.05,7.2-4.33,7.2-1.91-7.6-2.15-7.6c-0.39,0-6.214,5.8-6.336,5.8-0.175,0,0.081-2.9,0.345-5.2,0.172-1.5,0.273-2.8,0.181-3-0.106-0.1-7.288,3.4-7.445,3.1-0.133-0.2,3.109-7.4,2.96-7.7-0.144-0.2-8.163,1-8.306,0.7-0.139-0.2,5.104-6.1,4.981-6.3-0.188-0.3-8.268-1.6-8.336-1.7-0.092-0.2,6.744-4.1,6.802-4.4-0.022-0.1-0.946-0.6-2.109-1.2-2.092-1.1-4.97-2.7-4.832-2.9,0.093-0.2,7.838-1.7,7.954-1.9,0.104-0.2-5.577-5.9-5.465-6.1,0.106-0.2,7.897,0.7,8.003,0.5,0.111-0.2-3.58-7.4-3.477-7.6,0.145-0.3,7.258,2.9,7.374,2.7,0.234-0.4-0.866-7.6-1.021-8.5-0.01-0.1-0.014-0.1-0.011-0.1,0.031,0,5.928,5.4,6.388,5.4,0.23,0,1.57-7.9,1.87-7.9,0.27,0,4.21,6.8,4.51,6.8,0.29,0,4.05-7.2,4.33-7.2s1.91,7.6,2.15,7.6c0.39,0,6.21-5.8,6.33-5.8,0.17,0-0.07,2.8-0.34,5.1-0.17,1.5-0.28,2.9-0.19,3.1,0.11,0.1,7.29-3.4,7.45-3.1,0.13,0.2-3.11,7.4-2.96,7.7,0.11,0.2,8.09-1.1,8.2-0.9s-5.17,6-5.06,6.1c0.14,0.3,8.22,1.6,8.34,1.8,0.19,0.3-6.51,4.2-6.45,4.3,0.04,0.1,1.14,0.7,2.45,1.4,2.06,1,4.66,2.5,4.51,2.8-0.11,0.2-7.89,1.8-8.04,2-0.1,0.2,5.58,5.9,5.47,6.1s-7.9-0.7-8-0.5c-0.15,0.3,3.5,7.6,3.36,7.8-0.14,0.3-7.25-2.9-7.37-2.7-0.24,0.4,1.03,8.6,1.03,8.6" stroke="#17a500" stroke-miterlimit="4" stroke-width="1.66485786" fill="#0F0"/>
</g>
- <flowRoot id="interpolate-f11-fr.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,14.934984)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f11-fr.svgflowRegion2611"><rect id="interpolate-f11-fr.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f11-fr.svgflowPara2615">Exposant : 0.0</flowPara><flowPara id="interpolate-f11-fr.svgflowPara2617">Étapes d'interpolation : 6</flowPara><flowPara id="interpolate-f11-fr.svgflowPara2619">Méthode d'interpolation : 2</flowPara><flowPara id="interpolate-f11-fr.svgflowPara2621">Dupliquer les extrémités : décoché</flowPara><flowPara id="interpolate-f11-fr.svgflowPara2623">Interpoler le style : décoché</flowPara></flowRoot>
+ <flowRoot id="interpolate-f11-fr.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,14.934984)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f11-fr.svgflowRegion2611"><rect id="interpolate-f11-fr.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f11-fr.svgflowPara2615">Exposant : 0.0</flowPara><flowPara id="interpolate-f11-fr.svgflowPara2617">Étapes d&apos;interpolation : 6</flowPara><flowPara id="interpolate-f11-fr.svgflowPara2619">Méthode d&apos;interpolation : 2</flowPara><flowPara id="interpolate-f11-fr.svgflowPara2621">Dupliquer les extrémités : décoché</flowPara><flowPara id="interpolate-f11-fr.svgflowPara2623">Interpoler le style : décoché</flowPara></flowRoot>
</g>
- <rect id="d0e245" display="none" height="1000px" width="288" y="1801" x="10"/>
+ <rect id="d0e245" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e245"/>
</flowRegion>
<flowDiv xml:space="preserve">Même exemple avec un exposant de 1 :</flowDiv>
</flowRoot>
- <g id="interpolate-f12-fr.svgg2771" transform="translate(10, 1827.0320226000003) translate(-24.034172,-18.39093)">
+ <g id="interpolate-f12-fr.svgg2771" transform="translate(10, NaN) translate(-24.034172,-18.39093)">
<path id="interpolate-f12-fr.svgpath6640" stroke-linejoin="round" d="M271.63,45.832h-10.65l-5.33-9.226,5.33-9.226h10.65l5.33,9.226-5.33,9.226z" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.86884195" fill="#0F0"/>
<path id="interpolate-f12-fr.svgpath6642" stroke-linejoin="round" d="M47.033,47.01s-3.49-3.274-3.621-3.274c-0.066,0-0.79,4.829-0.872,4.829s-2.393-4.166-2.481-4.166c-0.087,0-2.283,4.393-2.364,4.393-0.082,0-0.987-4.649-1.052-4.649-0.131,0-3.581,3.526-3.581,3.526s0.605-4.753,0.54-4.866c-0.033-0.057-4.359,2.191-4.4,2.121-0.041-0.071,1.978-4.395,1.934-4.471-0.043-0.075-4.88,0.725-4.921,0.655-0.041-0.071,3.195-3.54,3.163-3.597-0.066-0.113-4.939-0.837-4.939-0.837s4.21-2.3,4.275-2.413c0.033-0.057-4.322-2.232-4.281-2.302,0.02-0.036,4.691-0.901,4.712-0.938,0.022-0.037-3.483-3.438-3.461-3.475,0.022-0.038,4.721,0.573,4.743,0.536,0.021-0.037-2.272-4.362-2.252-4.397,0.041-0.071,4.328,1.925,4.36,1.869,0.066-0.114-0.767-4.983-0.767-4.983s3.49,3.275,3.621,3.275c0.066,0,0.79-4.83,0.872-4.83s2.393,4.166,2.48,4.166c0.088,0,2.284-4.393,2.365-4.393,0.082,0,0.987,4.65,1.052,4.65,0.131,0,3.581-3.527,3.581-3.527s-0.605,4.754-0.54,4.867c0.033,0.057,4.359-2.192,4.4-2.121s-1.978,4.395-1.934,4.47c0.021,0.038,4.837-0.8,4.858-0.763s-3.232,3.476-3.211,3.512c0.04,0.071,4.908,0.785,4.941,0.841,0.065,0.114-4.057,2.414-4.057,2.414s4.349,2.184,4.284,2.297c-0.033,0.057-4.72,0.951-4.761,1.022-0.021,0.036,3.484,3.435,3.463,3.472-0.021,0.038-4.721-0.574-4.743-0.536-0.043,0.076,2.227,4.439,2.187,4.51-0.041,0.071-4.328-1.926-4.36-1.869-0.066,0.113,0.767,4.982,0.767,4.982" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.79674554" fill="#0F0"/>
<g id="interpolate-f12-fr.svgg6743" transform="matrix(0.5218716,0,0,0.5218716,14.289464,-599.88532)">
@@ -361,14 +362,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f12-fr.svgpath6755" stroke-linejoin="round" d="M176.92,1239s-5.23-4.6-5.91-4.6c-0.33,0-1.62,6.8-2.04,6.8-0.37,0-3.9-5.9-4.3-5.9s-3.77,6.2-4.16,6.2-1.93-6.6-2.27-6.6c-0.5,0-5.65,5-5.88,5-0.32,0-0.21-2.5,0.02-4.4,0.14-1.3,0.2-2.5,0.07-2.7-0.14-0.3-6.37,2.7-6.6,2.3-0.18-0.3,2.53-6.7,2.32-7-0.19-0.4-7.14,0.5-7.34,0.2-0.19-0.3,4.23-5.5,4.06-5.8-0.24-0.4-7.25-1.6-7.37-1.9-0.17-0.3,5.61-3.7,5.61-4.1-0.06-0.1-0.88-0.6-1.87-1.1-1.8-1-4.2-2.4-3.99-2.8,0.14-0.2,6.85-1.7,7.03-2,0.16-0.3-4.64-5.3-4.46-5.6,0.16-0.3,6.91,0.3,7.07,0.1,0.17-0.3-2.92-6.7-2.76-6.9,0.2-0.4,6.37,2.2,6.53,1.9,0.34-0.6-0.52-6.9-0.65-7.6-0.01-0.1-0.01-0.1,0-0.1,0.06,0,5.28,4.6,5.91,4.6,0.33,0,1.63-6.8,2.04-6.8,0.37,0,3.9,5.8,4.3,5.8s3.77-6.1,4.16-6.1,1.93,6.5,2.27,6.5c0.51,0,5.65-5,5.88-5,0.32,0,0.21,2.4-0.02,4.4-0.15,1.3-0.21,2.5-0.08,2.8,0.15,0.2,6.38-2.7,6.6-2.3,0.18,0.3-2.52,6.6-2.32,7,0.17,0.2,7.08-0.7,7.25-0.4,0.16,0.3-4.28,5.4-4.12,5.6,0.2,0.4,7.2,1.6,7.37,1.9,0.25,0.5-5.41,3.9-5.32,4.1,0.08,0.2,1.05,0.7,2.17,1.3,1.77,0.9,3.95,2.3,3.73,2.6-0.16,0.3-6.9,1.8-7.11,2.2-0.16,0.3,4.64,5.3,4.47,5.6-0.16,0.3-6.91-0.4-7.08-0.1-0.2,0.4,2.85,6.7,2.66,7.1-0.2,0.3-6.37-2.3-6.53-2-0.34,0.6,0.66,7.8,0.66,7.8" stroke="#17a500" stroke-miterlimit="4" stroke-width="1.66485786" fill="#0F0"/>
</g>
</g>
- <rect id="d0e258" display="none" height="1000px" width="288" y="1869.8" x="10"/>
+ <rect id="d0e258" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e258"/>
</flowRegion>
<flowDiv xml:space="preserve">avec un exposant de 2 :</flowDiv>
</flowRoot>
- <g id="interpolate-f13-fr.svgg2760" transform="translate(10, 1895.5738561000003) translate(-24.034172,-18.39093)">
+ <g id="interpolate-f13-fr.svgg2760" transform="translate(10, NaN) translate(-24.034172,-18.39093)">
<path id="interpolate-f13-fr.svgpath6644" stroke-linejoin="round" d="M271.63,45.832h-10.65l-5.33-9.226,5.33-9.226h10.65l5.33,9.226-5.33,9.226z" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.86884195" fill="#0F0"/>
<path id="interpolate-f13-fr.svgpath6646" stroke-linejoin="round" d="M47.033,47.01s-3.49-3.274-3.621-3.274c-0.066,0-0.79,4.829-0.872,4.829s-2.393-4.166-2.481-4.166c-0.087,0-2.283,4.393-2.364,4.393-0.082,0-0.987-4.649-1.052-4.649-0.131,0-3.581,3.526-3.581,3.526s0.605-4.753,0.54-4.866c-0.033-0.057-4.359,2.191-4.4,2.121-0.041-0.071,1.978-4.395,1.934-4.471-0.043-0.075-4.88,0.725-4.921,0.655-0.041-0.071,3.195-3.54,3.163-3.597-0.066-0.113-4.939-0.837-4.939-0.837s4.21-2.3,4.275-2.413c0.033-0.057-4.322-2.231-4.281-2.302,0.02-0.036,4.691-0.901,4.712-0.938,0.022-0.037-3.483-3.438-3.461-3.475,0.022-0.038,4.721,0.573,4.743,0.536,0.021-0.037-2.272-4.362-2.252-4.397,0.041-0.071,4.328,1.925,4.36,1.869,0.066-0.114-0.767-4.983-0.767-4.983s3.49,3.275,3.621,3.275c0.066,0,0.79-4.83,0.872-4.83s2.393,4.166,2.48,4.166c0.088,0,2.284-4.393,2.365-4.393,0.082,0,0.987,4.65,1.052,4.65,0.131,0,3.581-3.527,3.581-3.527s-0.605,4.754-0.54,4.867c0.033,0.057,4.359-2.192,4.4-2.121s-1.978,4.395-1.934,4.47c0.021,0.038,4.837-0.8,4.858-0.763s-3.232,3.477-3.211,3.512c0.04,0.071,4.908,0.785,4.941,0.841,0.065,0.114-4.057,2.414-4.057,2.414s4.349,2.184,4.284,2.297c-0.033,0.057-4.72,0.951-4.761,1.022-0.021,0.036,3.484,3.435,3.463,3.472-0.021,0.038-4.721-0.574-4.743-0.536-0.043,0.076,2.227,4.439,2.187,4.51-0.041,0.071-4.328-1.926-4.36-1.869-0.066,0.113,0.767,4.982,0.767,4.982" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.79674554" fill="#0F0"/>
<g id="interpolate-f13-fr.svgg6943" transform="matrix(0.5218716,0,0,0.5218716,14.289464,-641.00452)">
@@ -380,14 +381,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f13-fr.svgpath6955" stroke-linejoin="round" d="M222.09,1317.5s-4.66-3.9-5.5-3.9c-0.41,0-1.67,5.8-2.19,5.8-0.46,0-3.63-5-4.12-5s-3.53,5.3-4.01,5.3-1.95-5.6-2.37-5.6c-0.61,0-5.17,4.2-5.49,4.2-0.45,0-0.47-2.1-0.27-3.8,0.12-1.1,0.15-2.1-0.01-2.4-0.18-0.3-5.6,2.1-5.88,1.6-0.22-0.4,2.02-6,1.77-6.4-0.24-0.4-6.27,0.2-6.51-0.2s3.48-4.9,3.26-5.3c-0.29-0.5-6.37-1.7-6.54-2-0.24-0.4,4.64-3.6,4.59-3.9-0.1-0.2-0.82-0.7-1.67-1.1-1.54-0.8-3.54-2.2-3.27-2.7,0.18-0.3,6.01-1.7,6.25-2.1,0.2-0.3-3.83-4.8-3.61-5.2,0.21-0.3,6.07,0.1,6.28-0.3,0.22-0.3-2.35-5.9-2.15-6.3,0.25-0.4,5.61,1.7,5.81,1.3,0.42-0.7-0.22-6.2-0.33-6.9-0.01,0-0.01-0.1,0-0.1,0.08,0,4.72,4,5.5,4,0.41,0,1.68-5.8,2.19-5.8,0.46,0,3.63,5,4.12,5s3.53-5.3,4.01-5.3c0.49,0,1.95,5.6,2.38,5.6,0.6,0,5.17-4.3,5.48-4.3,0.45,0,0.46,2.1,0.27,3.8-0.13,1.1-0.15,2.2,0.01,2.5,0.18,0.3,5.59-2.1,5.88-1.6,0.22,0.4-2.03,5.9-1.77,6.4,0.21,0.3,6.21-0.3,6.43,0,0.21,0.4-3.53,4.9-3.32,5.2,0.25,0.5,6.32,1.7,6.54,2,0.3,0.6-4.48,3.7-4.35,3.9,0.12,0.2,0.98,0.7,1.94,1.2,1.52,0.8,3.32,2.1,3.04,2.6-0.19,0.3-6.04,1.7-6.31,2.2-0.2,0.3,3.84,4.8,3.61,5.1-0.2,0.4-6.06,0-6.27,0.4-0.25,0.4,2.29,6,2.05,6.4-0.25,0.4-5.61-1.6-5.81-1.3-0.43,0.7,0.34,7,0.34,7" stroke="#17a500" stroke-miterlimit="4" stroke-width="1.66485786" fill="#0F0"/>
</g>
</g>
- <rect id="d0e271" display="none" height="1000px" width="288" y="1938.4" x="10"/>
+ <rect id="d0e271" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e271"/>
</flowRegion>
<flowDiv xml:space="preserve">et avec un exposant de -1 :</flowDiv>
</flowRoot>
- <g id="interpolate-f14-fr.svgg2749" transform="translate(10, 1964.1156896000002) translate(-24.748457,-18.39098)">
+ <g id="interpolate-f14-fr.svgg2749" transform="translate(10, NaN) translate(-24.748457,-18.39098)">
<path id="interpolate-f14-fr.svgpath6648" stroke-linejoin="round" d="M272.35,45.832h-10.66l-5.32-9.226,5.32-9.226h10.66l5.32,9.226-5.32,9.226z" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.86884195" fill="#0F0"/>
<path id="interpolate-f14-fr.svgpath6650" stroke-linejoin="round" d="M47.747,47.01s-3.49-3.274-3.621-3.274c-0.065,0-0.79,4.829-0.872,4.829-0.081,0-2.393-4.166-2.48-4.166s-2.283,4.393-2.365,4.393-0.987-4.649-1.052-4.649c-0.131,0-3.581,3.526-3.581,3.526s0.605-4.753,0.54-4.866c-0.033-0.057-4.359,2.191-4.4,2.121-0.041-0.071,1.978-4.395,1.935-4.471-0.044-0.075-4.881,0.725-4.922,0.655-0.041-0.071,3.196-3.54,3.163-3.597-0.065-0.113-4.939-0.837-4.939-0.837s4.21-2.3,4.275-2.413c0.033-0.057-4.322-2.232-4.281-2.302,0.021-0.036,4.691-0.901,4.712-0.938,0.022-0.037-3.483-3.438-3.461-3.476,0.022-0.037,4.722,0.574,4.743,0.537,0.022-0.037-2.272-4.362-2.251-4.397,0.041-0.071,4.327,1.925,4.36,1.869,0.065-0.114-0.767-4.983-0.767-4.983s3.49,3.275,3.621,3.275c0.065,0,0.789-4.83,0.871-4.83s2.394,4.166,2.481,4.166,2.283-4.393,2.365-4.393c0.081,0,0.986,4.65,1.052,4.65,0.13,0,3.581-3.527,3.581-3.527s-0.606,4.754-0.54,4.867c0.032,0.057,4.358-2.192,4.399-2.121s-1.978,4.395-1.934,4.47c0.022,0.038,4.837-0.8,4.858-0.763,0.022,0.037-3.232,3.476-3.211,3.512,0.041,0.071,4.908,0.785,4.941,0.841,0.065,0.114-4.057,2.414-4.057,2.414s4.35,2.184,4.284,2.297c-0.033,0.057-4.72,0.951-4.761,1.022-0.02,0.036,3.485,3.435,3.463,3.472-0.021,0.038-4.721-0.574-4.743-0.536-0.043,0.076,2.228,4.439,2.187,4.51s-4.327-1.926-4.36-1.869c-0.066,0.113,0.767,4.982,0.767,4.982" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.79674554" fill="#0F0"/>
<g id="interpolate-f14-fr.svgg7477" transform="matrix(0.5218716,0,0,0.5218716,15.003749,-683.70527)">
@@ -399,21 +400,21 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f14-fr.svgpath7489" stroke-linejoin="round" d="M94.667,1400s-6.282-5.8-6.651-5.8c-0.182,0-1.545,8.6-1.774,8.6-0.217,0-4.394-7.4-4.626-7.4s-4.206,7.8-4.427,7.8c-0.223,0-1.903-8.3-2.088-8.3-0.322,0-6.523,6.3-6.586,6.3-0.091,0,0.246-3.1,0.531-5.6,0.186-1.6,0.311-3,0.239-3.1-0.085-0.2-7.799,3.8-7.919,3.5-0.107-0.1,3.437-7.9,3.319-8.1-0.115-0.2-8.735,1.2-8.846,1-0.11-0.2,5.594-6.4,5.499-6.6-0.157-0.3-8.842-1.6-8.877-1.7-0.048-0.1,7.38-4.2,7.47-4.5-0.001,0-0.986-0.6-2.243-1.2-2.259-1.2-5.401-2.9-5.305-3,0.067-0.2,8.391-1.8,8.471-1.9,0.074-0.1-6.105-6.2-6.026-6.4,0.075-0.1,8.45,0.9,8.525,0.8,0.077-0.1-3.953-7.9-3.88-8,0.113-0.2,7.755,3.3,7.845,3.1,0.178-0.3-1.06-7.9-1.227-8.9-0.012-0.1-0.017-0.1-0.015-0.1,0.016,0,6.294,5.8,6.651,5.8,0.182,0,1.545-8.6,1.774-8.6,0.217,0,4.394,7.4,4.626,7.4s4.206-7.8,4.427-7.8c0.223,0,1.903,8.3,2.088,8.3,0.322,0,6.523-6.3,6.586-6.3,0.089,0-0.238,3-0.521,5.5-0.192,1.7-0.324,3.1-0.251,3.2,0.086,0.2,7.8-3.7,7.919-3.5,0.107,0.1-3.436,7.9-3.319,8.1,0.076,0.1,8.654-1.3,8.734-1.2,0.08,0.2-5.659,6.3-5.587,6.5,0.114,0.1,8.787,1.5,8.887,1.6,0.16,0.3-7.12,4.5-7.09,4.5,0.02,0.1,1.19,0.7,2.6,1.4,2.24,1.1,5.08,2.7,4.96,2.9-0.09,0.1-8.44,1.8-8.56,2-0.071,0.1,6.11,6.2,6.03,6.4-0.07,0.1-8.448-0.9-8.524-0.8-0.117,0.2,3.874,8,3.764,8.2s-7.756-3.3-7.847-3.1c-0.186,0.3,1.244,9,1.244,9" stroke="#17a500" stroke-miterlimit="4" stroke-width="1.66485786" fill="#0F0"/>
</g>
</g>
- <rect id="d0e284" display="none" height="1000px" width="288" y="2006.9" x="10"/>
+ <rect id="d0e284" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e284"/>
</flowRegion>
- <flowDiv xml:space="preserve">Lorsque vous utilisez l'exposant, l'<flowSpan font-style="italic">ordre</flowSpan> de sélection des objets est important. Dans l'exemple précédent, le chemin en forme d'étoile sur la gauche a été sélectionné en premier, et le chemin en forme d'hexagone sur la droite sélectionné en second.</flowDiv>
+ <flowDiv xml:space="preserve">Lorsque vous utilisez l&apos;exposant, l&apos;<flowSpan font-style="italic">ordre</flowSpan> de sélection des objets est important. Dans l&apos;exemple précédent, le chemin en forme d&apos;étoile sur la gauche a été sélectionné en premier, et le chemin en forme d&apos;hexagone sur la droite sélectionné en second.</flowDiv>
</flowRoot>
- <rect id="d0e290" display="none" height="1000px" width="288" y="2057" x="10"/>
+ <rect id="d0e290" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e290"/>
</flowRegion>
- <flowDiv xml:space="preserve">Voici le résultat d'une interpolation avec le chemin de droite sélectionné en premier. L'exposant, dans cet exemple, a été positionné à 1 :</flowDiv>
+ <flowDiv xml:space="preserve">Voici le résultat d&apos;une interpolation avec le chemin de droite sélectionné en premier. L&apos;exposant, dans cet exemple, a été positionné à 1 :</flowDiv>
</flowRoot>
- <g id="interpolate-f15-fr.svgg2738" transform="translate(10, 2102.8027376) translate(-24.748458,-19.105216)">
+ <g id="interpolate-f15-fr.svgg2738" transform="translate(10, NaN) translate(-24.748458,-19.105216)">
<path id="interpolate-f15-fr.svgpath6652" stroke-linejoin="round" d="M272.35,46.546h-10.66l-5.32-9.226,5.32-9.226h10.66l5.32,9.226-5.32,9.226z" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.86884195" fill="#0F0"/>
<path id="interpolate-f15-fr.svgpath6654" stroke-linejoin="round" d="M47.747,47.724s-3.49-3.274-3.621-3.274c-0.065,0-0.79,4.829-0.872,4.829-0.081,0-2.393-4.165-2.48-4.165s-2.283,4.392-2.365,4.392-0.987-4.649-1.052-4.649c-0.131,0-3.581,3.526-3.581,3.526s0.605-4.753,0.54-4.866c-0.033-0.057-4.359,2.192-4.4,2.121s1.978-4.395,1.935-4.47c-0.044-0.076-4.881,0.725-4.922,0.654s3.196-3.54,3.163-3.597c-0.065-0.113-4.939-0.836-4.939-0.836s4.21-2.301,4.275-2.414c0.033-0.057-4.322-2.231-4.281-2.302,0.021-0.036,4.691-0.9,4.712-0.938,0.022-0.037-3.483-3.437-3.461-3.475s4.722,0.573,4.743,0.536c0.022-0.037-2.272-4.362-2.251-4.397,0.041-0.071,4.327,1.926,4.36,1.869,0.065-0.113-0.767-4.982-0.767-4.982s3.49,3.274,3.621,3.274c0.065,0,0.789-4.829,0.871-4.829s2.394,4.165,2.481,4.165,2.283-4.392,2.365-4.392c0.081,0,0.986,4.649,1.052,4.649,0.13,0,3.581-3.526,3.581-3.526s-0.606,4.753-0.54,4.866c0.032,0.057,4.358-2.192,4.399-2.121s-1.978,4.395-1.934,4.47c0.022,0.038,4.837-0.8,4.858-0.763,0.022,0.037-3.232,3.477-3.211,3.512,0.041,0.071,4.908,0.785,4.941,0.842,0.065,0.113-4.057,2.413-4.057,2.413s4.35,2.184,4.284,2.298c-0.033,0.056-4.72,0.951-4.761,1.021-0.02,0.036,3.485,3.435,3.463,3.473-0.021,0.037-4.721-0.574-4.742-0.537-0.044,0.076,2.227,4.439,2.186,4.51s-4.327-1.925-4.36-1.869c-0.066,0.113,0.767,4.982,0.767,4.982" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.79674554" fill="#0F0"/>
<g id="interpolate-f15-fr.svgg7705" transform="matrix(0.5218716,0,0,0.5218716,15.53092,-723.58311)">
@@ -425,34 +426,34 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f15-fr.svgpath7717" stroke-linejoin="round" d="M377.93,1476.3s-2.67-1.7-4.09-1.7c-0.7,0-1.84,2.5-2.71,2.5-0.75,0-2.68-2.1-3.49-2.1s-2.7,2.2-3.5,2.2-2.01-2.4-2.73-2.4c-0.95,0-3.5,1.8-4.13,1.8-0.9,0-1.34-0.8-1.26-1.6,0.05-0.4-0.05-1.1-0.32-1.5-0.29-0.5-2.88-0.1-3.36-0.9-0.36-0.6,0.28-3.5-0.14-4.2-0.39-0.7-3.24-1-3.64-1.7-0.4-0.6,0.88-3,0.5-3.7-0.44-0.8-3.31-1.8-3.66-2.4-0.48-0.8,1.27-2.7,1.04-3.2-0.2-0.4-0.6-0.7-0.96-0.9-0.64-0.3-1.25-1.3-0.75-2.2,0.32-0.6,3.07-1.7,3.5-2.4,0.37-0.6-1.03-3-0.63-3.7,0.38-0.7,3.13-1,3.51-1.6,0.4-0.7-0.38-3.6-0.01-4.3,0.42-0.7,2.97-0.3,3.31-0.9,0.72-1.2,0.81-4.2,0.76-4.5h0.03c0.16,0,2.79,1.7,4.08,1.7,0.7,0,1.84-2.5,2.71-2.5,0.75,0,2.68,2.1,3.49,2.1s2.7-2.2,3.5-2.2c0.81,0,2.01,2.3,2.73,2.3,0.96,0,3.5-1.7,4.13-1.7,0.88,0,1.32,0.8,1.24,1.5-0.06,0.5,0.05,1.2,0.33,1.6,0.29,0.5,2.88,0.1,3.36,0.9,0.36,0.6-0.29,3.5,0.14,4.2,0.37,0.7,3.2,0.9,3.6,1.6,0.38,0.7-0.91,3-0.54,3.7,0.43,0.7,3.3,1.8,3.66,2.4,0.49,0.8-1.23,2.7-0.97,3.1,0.24,0.4,0.7,0.8,1.11,1,0.64,0.4,1.18,1.3,0.69,2.1-0.32,0.6-3.09,1.7-3.54,2.5-0.36,0.6,1.04,3,0.64,3.7-0.38,0.6-3.14,1-3.51,1.6-0.42,0.8,0.34,3.6-0.05,4.3-0.41,0.7-2.97,0.4-3.3,1-0.73,1.2-0.77,4.5-0.77,4.5" stroke="#17a500" stroke-miterlimit="4" stroke-width="1.52670813" fill="#0F0"/>
</g>
</g>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2158.4023836" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2158.4023836" x="10">Dupliquer les extrémités</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="NaN" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="NaN" x="10">Dupliquer les extrémités</tspan>
</text>
- <rect id="d0e309" display="none" height="1000px" width="288" y="2163.6" x="10"/>
+ <rect id="d0e309" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e309"/>
</flowRegion>
- <flowDiv xml:space="preserve">Ce paramètre détermine si le groupe de chemins généré par l'extension <flowSpan font-style="italic">inclut une copie</flowSpan> des chemins originaux sur lesquels l'interpolation est appliquée.</flowDiv>
+ <flowDiv xml:space="preserve">Ce paramètre détermine si le groupe de chemins généré par l&apos;extension <flowSpan font-style="italic">inclut une copie</flowSpan> des chemins originaux sur lesquels l&apos;interpolation est appliquée.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2215.7448846" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2215.7448846" x="10">Interpoler le style</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="NaN" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="NaN" x="10">Interpoler le style</tspan>
</text>
- <rect id="d0e321" display="none" height="1000px" width="288" y="2220.9" x="10"/>
+ <rect id="d0e321" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e321"/>
</flowRegion>
- <flowDiv xml:space="preserve">Ce paramètre est un des plus habile de l'extension. Il fait en sorte que l'extension essaie de changer le style des chemins à chaque étape. Ainsi, si le chemin original et le chemin final ont une couleur différente, les chemins générés changeront de couleur progressivement à chaque étape.</flowDiv>
+ <flowDiv xml:space="preserve">Ce paramètre est un des plus astucieux de l&apos;extension. Il fait en sorte que l&apos;extension essaie de changer le style des chemins à chaque étape. Ainsi, si le chemin original et le chemin final ont une couleur différente, les chemins générés changeront de couleur progressivement à chaque étape.</flowDiv>
</flowRoot>
- <rect id="d0e324" display="none" height="1000px" width="288" y="2281.7" x="10"/>
+ <rect id="d0e324" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e324"/>
</flowRegion>
<flowDiv xml:space="preserve">Voici un exemple ou la fonction Interpoler le style est utilisée sur le remplissage du chemin :</flowDiv>
</flowRoot>
- <g id="interpolate-f16-fr.svgg2861" transform="translate(10, 2318.4886366) translate(-21.811549,-16.97341)">
+ <g id="interpolate-f16-fr.svgg2861" transform="translate(10, NaN) translate(-21.811549,-16.97341)">
<path id="interpolate-f16-fr.svgpath13980" fill="#FC0" d="M52.663,48.163c-2.997,2.904-3.507-5.427-7.12-3.193-3.685,2.279,1.132,7.941-3.228,8.47-4.276,0.518,1.544-6.96-2.678-7.53-4.305-0.581-3.831,7.272-7.908,5.69-3.998-1.551,4.538-5.716,1.63-8.871-2.966-3.217-6.213,5.723-8.463,1.962-2.206-3.688,5.568-2.554,4.959-6.686-0.622-4.213-8.403-0.204-8.03-4.444,0.365-4.158,8.015,2.747,9.9-1.062,1.923-3.885-6.953-4.673-4.277-7.898,2.625-3.162,4.671,4.579,8.371,2.365,3.773-2.258-2.707-7.438,1.458-8.427,4.085-0.969,0.184,7.803,4.35,8.286,4.249,0.493,2.825-8.477,6.66-6.673,3.761,1.769-3.613,6.481-0.834,9.63,2.834,3.212,5.587-5.828,7.763-2.1,2.132,3.655-5.516,3.234-4.864,7.501,0.665,4.351,8.878,0.224,8.029,4.487-0.834,4.18-8.373-3.756-9.995,0.204-1.653,4.037,7.334,5.326,4.277,8.289z"/>
<path id="interpolate-f16-fr.svgpath13984" fill="#d40000" d="M276.7,46.671c-3,2.905-3.51-5.426-7.13-3.192-3.68,2.279,1.14,7.941-3.22,8.47-4.28,0.518,1.54-6.96-2.68-7.53-4.31-0.581-3.83,7.272-7.91,5.69-4-1.551,4.54-5.716,1.63-8.871-2.96-3.217-6.21,5.723-8.46,1.962-2.21-3.688,5.57-2.554,4.96-6.686-0.62-4.213-8.41-0.204-8.03-4.444,0.36-4.158,8.01,2.747,9.9-1.062,1.92-3.885-6.96-4.673-4.28-7.898,2.63-3.162,4.67,4.579,8.37,2.365,3.77-2.258-2.71-7.438,1.46-8.427,4.08-0.969,0.18,7.803,4.35,8.286,4.25,0.493,2.82-8.477,6.66-6.673,3.76,1.769-3.61,6.481-0.83,9.63,2.83,3.212,5.58-5.828,7.76-2.101,2.13,3.656-5.52,3.235-4.87,7.502,0.67,4.351,8.88,0.224,8.03,4.487-0.83,4.18-8.37-3.756-9.99,0.204-1.66,4.037,7.33,5.326,4.28,8.288z"/>
<g id="interpolate-f16-fr.svgg14129" transform="matrix(0.5218716,0,0,0.5218716,16.740257,-799.45519)">
@@ -464,14 +465,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f16-fr.svgpath14141" fill="#f8ae00" d="M130.16,1623.8c-5.74,5.5-6.72-10.4-13.64-6.1-7.06,4.3,2.17,15.2-6.19,16.2-8.19,1,2.96-13.3-5.13-14.4-8.248-1.1-7.34,13.9-15.152,10.9-7.66-3,8.696-11,3.123-17h-0.001c-5.683-6.2-11.905,10.9-16.215,3.7h-0.001c-4.226-7,10.67-4.9,9.502-12.8-1.191-8.1-16.101-0.4-15.387-8.5,0.701-8,15.359,5.3,18.971-2h0.001c3.682-7.5-13.324-9-8.196-15.2h0.001c5.029-6,8.95,8.8,16.039,4.6h0.001c7.224-4.4-5.187-14.3,2.794-16.2,7.83-1.8,0.35,15,8.33,15.9h0.01c8.14,0.9,5.41-16.2,12.76-12.8,7.2,3.4-6.93,12.4-1.6,18.5,5.43,6.1,10.7-11.2,14.87-4.1,4.09,7-10.57,6.2-9.32,14.4,1.28,8.3,17.02,0.4,15.39,8.6-1.6,8-16.05-7.2-19.15,0.4-3.17,7.7,14.05,10.2,8.19,15.9"/>
</g>
</g>
- <rect id="d0e337" display="none" height="1000px" width="288" y="2367" x="10"/>
+ <rect id="d0e337" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e337"/>
</flowRegion>
<flowDiv xml:space="preserve">Interpoler le style affecte également le contour du chemin :</flowDiv>
</flowRoot>
- <g id="interpolate-f17-fr.svgg2850" transform="translate(10, 2393.1562458000003) translate(-20.688595,-14.421848)">
+ <g id="interpolate-f17-fr.svgg2850" transform="translate(10, NaN) translate(-20.688595,-14.421848)">
<path id="interpolate-f17-fr.svgpath14293" stroke-linejoin="round" style="stroke-dasharray:none;" d="M52.29,44.87c-2.997,2.905-3.507-5.427-7.12-3.192-3.685,2.278,1.132,7.941-3.228,8.469-4.276,0.518,1.544-6.96-2.678-7.53-4.305-0.58-3.831,7.273-7.907,5.691-3.998-1.552,4.538-5.716,1.629-8.871-2.966-3.218-6.213,5.722-8.463,1.961-2.206-3.687,5.568-2.554,4.959-6.685-0.621-4.213-8.403-0.204-8.03-4.444,0.365-4.158,8.015,2.747,9.9-1.063,1.923-3.885-6.953-4.672-4.276-7.897,2.624-3.163,4.67,4.578,8.37,2.364,3.773-2.258-2.706-7.438,1.459-8.426,4.084-0.97,0.183,7.802,4.35,8.285,4.248,0.493,2.824-8.476,6.659-6.672,3.761,1.769-3.613,6.48-0.834,9.63,2.834,3.211,5.588-5.829,7.763-2.101,2.133,3.656-5.515,3.235-4.864,7.502,0.665,4.351,8.879,0.224,8.029,4.487-0.834,4.18-8.372-3.756-9.994,0.203-1.654,4.038,7.333,5.327,4.276,8.289z" stroke="#000" stroke-miterlimit="4" stroke-width="1.50038075" fill="#FC0"/>
<path id="interpolate-f17-fr.svgpath14295" stroke-linejoin="round" style="stroke-dasharray:none;" d="M277.07,47.107c-3,2.904-3.51-5.427-7.12-3.193-3.69,2.279,1.13,7.942-3.23,8.47-4.28,0.518,1.54-6.96-2.68-7.53-4.3-0.581-3.83,7.272-7.91,5.69-3.99-1.551,4.54-5.716,1.63-8.871-2.96-3.217-6.21,5.723-8.46,1.962-2.21-3.688,5.57-2.554,4.96-6.686-0.62-4.213-8.4-0.204-8.03-4.444,0.36-4.158,8.01,2.748,9.9-1.062,1.92-3.885-6.95-4.673-4.28-7.898,2.63-3.162,4.67,4.579,8.37,2.365,3.78-2.258-2.7-7.438,1.46-8.427,4.09-0.969,0.19,7.803,4.35,8.286,4.25,0.493,2.83-8.477,6.66-6.673,3.76,1.769-3.61,6.481-0.83,9.63,2.83,3.212,5.59-5.828,7.76-2.1,2.13,3.655-5.51,3.234-4.86,7.501,0.66,4.351,8.88,0.225,8.03,4.487-0.84,4.181-8.38-3.756-10,0.204-1.65,4.038,7.33,5.327,4.28,8.289z" stroke="#ededed" stroke-miterlimit="4" stroke-width="1.50038075" fill="#d40000"/>
<g id="interpolate-f17-fr.svgg14449" transform="matrix(0.5218716,0,0,0.5218716,16.367493,-843.97546)">
@@ -483,14 +484,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f17-fr.svgpath14461" stroke-linejoin="round" style="stroke-dasharray:none;" d="M438.02,1706.9c-5.75,5.5-6.72-10.4-13.65-6.2-7.06,4.4,2.17,15.3-6.18,16.3-8.19,1,2.96-13.4-5.13-14.5-8.25-1.1-7.34,14-15.15,10.9h-0.01c-7.65-2.9,8.7-10.9,3.13-16.9-5.69-6.2-11.91,10.9-16.22,3.7-4.23-7.1,10.67-4.9,9.5-12.8-1.19-8.1-16.1-0.4-15.38-8.5,0.7-8,15.35,5.2,18.97-2.1,3.68-7.4-13.33-8.9-8.2-15.1,5.03-6,8.95,8.8,16.04,4.5,7.23-4.3-5.18-14.2,2.8-16.1,7.82-1.9,0.35,14.9,8.33,15.9,8.14,0.9,5.41-16.3,12.76-12.8,7.21,3.4-6.92,12.4-1.59,18.4,5.43,6.2,10.7-11.1,14.87-4,4.09,7-10.57,6.2-9.32,14.4,1.27,8.3,17.01,0.4,15.38,8.6-1.59,8-16.04-7.2-19.15,0.4-3.17,7.7,14.06,10.2,8.2,15.9" stroke="#cbcbcb" stroke-miterlimit="4" stroke-width="2.875" fill="#da1d00"/>
</g>
</g>
- <rect id="d0e350" display="none" height="1000px" width="288" y="2443.9" x="10"/>
+ <rect id="d0e350" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e350"/>
</flowRegion>
- <flowDiv xml:space="preserve">Bien sûr, le chemin de départ et le chemin final n'ont pas besoin d'être identiques :</flowDiv>
+ <flowDiv xml:space="preserve">Bien sûr, le chemin de départ et le chemin final n&apos;ont pas besoin d&apos;être identiques :</flowDiv>
</flowRoot>
- <g id="interpolate-f18-fr.svgg2826" transform="translate(10, 2480.5965548000004) translate(-20.83931,-14.710899)">
+ <g id="interpolate-f18-fr.svgg2826" transform="translate(10, NaN) translate(-20.83931,-14.710899)">
<path id="interpolate-f18-fr.svgpath7836" fill="#FC0" d="M52.441,44.409c-2.997,2.905-3.507-5.427-7.12-3.192-3.685,2.278,1.132,7.941-3.228,8.469-4.276,0.518,1.544-6.96-2.678-7.53-4.305-0.581-3.831,7.273-7.908,5.691-3.998-1.552,4.538-5.716,1.63-8.871-2.966-3.218-6.213,5.722-8.463,1.961-2.206-3.687,5.568-2.554,4.959-6.685-0.622-4.213-8.403-0.204-8.031-4.444,0.366-4.158,8.016,2.747,9.901-1.063,1.923-3.885-6.953-4.672-4.277-7.897,2.625-3.163,4.671,4.578,8.371,2.364,3.773-2.258-2.707-7.438,1.458-8.426,4.085-0.97,0.184,7.802,4.35,8.285,4.249,0.493,2.825-8.476,6.66-6.672,3.761,1.769-3.613,6.48-0.834,9.63,2.834,3.211,5.587-5.829,7.762-2.101,2.133,3.656-5.515,3.235-4.863,7.502,0.665,4.351,8.878,0.224,8.029,4.487-0.834,4.18-8.373-3.756-9.995,0.203-1.654,4.038,7.334,5.327,4.277,8.289z"/>
<path id="interpolate-f18-fr.svgrect7838" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" fill="#d40000" d="M255.17,22.167h1.52,1.51,1.52,1.51,1.52,1.52,1.51,1.52,1.51,1.52,1.51,1.52,1.51,1.52,1.52,1.51v1.515,1.516,1.516,1.515,1.516,1.516,1.515,1.516,1.515,1.516,1.516,1.515,1.516,1.515,1.516,1.516h-1.51-1.52-1.52-1.51-1.52-1.51-1.52-1.51-1.52-1.51-1.52-1.52-1.51-1.52-1.51-1.52v-1.516-1.516-1.515-1.516-1.515-1.516-1.516-1.515-1.516-1.515-1.516-1.516-1.515-1.516-1.516-1.515z"/>
<g id="interpolate-f18-fr.svgg8948" transform="matrix(0.5218716,0,0,0.5218716,16.890973,-819.61038)">
@@ -512,28 +513,28 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f18-fr.svgpath10446" stroke-linejoin="round" d="M123.62,1733.5c-1.89,1.9-2.77,1-3.97-0.6-1.01-1.3-1.55-3.2-2.75-4.3-1.1-1-2.16-1.4-3.79-0.3-0.19,0.1-0.38,0.3-0.56,0.4-1.54,1.3-1.47,3-1.44,4.8s0.86,3.7,0.81,5.3c-0.06,1.8-0.35,3.1-2.82,3.4h-0.04c-2.62,0.3-2.48-1.3-2.18-3.4,0.24-1.6,1.22-3.5,1.32-5.2,0.12-1.9,0-3.5-2.25-3.8h-0.06c-2.09-0.2-3.07,0.7-4.18,2.1-1.06,1.4-1.44,3.1-2.321,4.6-1.033,1.7-1.77,3.1-3.594,3-0.478,0-0.946-0.1-1.456-0.3-1.602-0.7-1.741-1.7-1.34-2.8,0.445-1.3,2.172-2.8,3.382-4.4,1.16-1.5,2.64-3.1,2.756-4.7,0.069-0.9-0.082-1.8-0.771-2.7-0.555-0.7-1.126-1.1-1.787-1.1-1.535-0.3-3.087,1.3-4.594,2.7-1.429,1.3-2.818,3.2-4.114,3.7-1.162,0.6-2.249,0.6-3.223-0.9-0.286-0.5-0.47-0.8-0.566-1.2-0.471-1.9,1.137-2.4,3.099-3.3,1.607-0.7,3.451-1,4.588-2.2,0.795-0.8,1.245-1.7,1.024-3.1-0.089-0.5-0.267-1-0.517-1.4-0.891-1.5-2.701-1.5-4.68-1.6-1.813-0.1-3.769,0.4-5.294,0.1-1.721-0.4-2.894-0.9-2.699-3.1,0.013-0.1,0.031-0.2,0.053-0.3,0.371-2.1,2.085-1.7,4.289-1.2,1.545,0.4,3.332,1.5,5.065,2,1.938,0.6,3.809,1.3,5.203,0.7,0.68-0.3,1.247-0.7,1.652-1.4,0.533-1,0.56-1.8,0.259-2.6-0.532-1.5-2.087-2.2-3.696-3.3-1.653-1.1-3.363-1.7-4.076-2.9-0.53-0.9-0.51-1.8,0.488-2.9,0.518-0.5,1.021-0.8,1.518-1,1.505-0.5,2.527,0.8,4.074,2.3,1.293,1.3,2.248,2.7,3.798,3.2,1.078,0.4,2.08,0.3,3.24-0.4,0.46-0.4,0.81-0.7,1.11-1.1,1.15-1.4,0.45-3.2-0.14-5.1-0.58-1.8-1.87-3.6-1.92-5-0.05-1.3,0.33-2.2,2.08-2.7,0.47-0.1,0.87-0.1,1.24-0.1,1.66,0.3,1.59,2.1,1.71,4.4,0.08,1.7-0.38,3.7-0.11,5.3,0.32,2,0.66,3.6,2.57,4h0.35c1.85,0.2,2.78-0.7,3.67-2.2,0.85-1.4,0.97-3.3,1.55-4.9,0.71-2.1,1.06-3.9,2.51-4.2,0.56-0.1,1.13,0,1.84,0.4,1.21,0.6,1.55,1.4,1.54,2.4-0.02,1.4-1.42,3.1-2.44,4.9-0.91,1.6-2.25,3.2-2.53,4.8-0.22,1.3-0.2,2.6,0.67,3.7,0.29,0.4,0.6,0.7,0.95,0.9,1.57,0.8,3.12-0.8,4.61-2.2,1.33-1.3,2.62-3.4,3.84-4.1,1.14-0.7,2.23-0.8,3.24,0.8,0.26,0.4,0.43,0.7,0.53,1.1,0.46,1.9-0.95,2.6-2.75,3.7-1.48,0.8-3.22,1.3-4.41,2.5-1.02,1-1.63,2-1.36,3.7,0.04,0.3,0.11,0.5,0.19,0.7,0.61,1.9,2.25,2.1,4.17,2.4,1.72,0.2,3.66-0.3,5.3-0.1,2.15,0.1,3.77,0.3,3.62,2.4-0.02,0.2-0.05,0.4-0.09,0.6-0.4,1.9-1.75,2-3.52,1.6-1.46-0.4-3.2-1.6-4.94-2.4-1.79-0.7-3.59-1.9-5.05-1.9-1.29,0-2.33,0.3-2.91,1.6-0.22,0.5-0.33,0.9-0.33,1.4-0.03,1.7,1.17,2.7,2.67,4,1.39,1.1,3.04,1.7,4.22,2.8,1.54,1.3,2.25,2.3,0.47,4" stroke="#212121" stroke-miterlimit="4" stroke-width="3.10357141" fill="#f8ae00"/>
</g>
</g>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2584.9848308000005" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2584.9848308000005" x="10">Utiliser l'interpolation pour imiter des gradients de forme irrégulière</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="NaN" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="NaN" x="10">Utiliser l&apos;interpolation pour imiter des gradients de forme irrégulière</tspan>
</text>
- <rect id="d0e369" display="none" height="1000px" width="288" y="2590.2" x="10"/>
+ <rect id="d0e369" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e369"/>
</flowRegion>
- <flowDiv xml:space="preserve">Il n'est pas (encore) possible avec Inkscape de créer un gradient d'un forme autre que linéaire (en ligne droite) ou radiale (circulaire). Toutefois, l'interpolation du style, dans cette extension, permet d'imiter un gradient irrégulier. Voici un exemple simple — dessinez deux lignes de contours différents :</flowDiv>
+ <flowDiv xml:space="preserve">Il n&apos;est pas (encore) possible avec Inkscape de créer un gradient d&apos;un forme autre que linéaire (en ligne droite) ou radiale (circulaire). Toutefois, l&apos;interpolation du style, dans cette extension, permet d&apos;imiter un gradient irrégulier. Voici un exemple simple — dessinez deux lignes de contours différents :</flowDiv>
</flowRoot>
- <g id="interpolate-f19-fr.svgg2846" transform="translate(10, 2658.9206138000004) translate(-17.25,-19.612183)">
+ <g id="interpolate-f19-fr.svgg2846" transform="translate(10, NaN) translate(-17.25,-19.612183)">
<path id="interpolate-f19-fr.svgpath2180" stroke-linejoin="miter" style="stroke-dasharray:none;" d="M20,132.36l75-32.855,85.71,33.575,77.15-32.86" stroke="#35b8ff" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="5.5" fill="none"/>
<path id="interpolate-f19-fr.svgpath3007" stroke-linejoin="miter" style="stroke-dasharray:none;" d="M20,55.219l75-32.857,85.71,33.572,77.15-32.858" stroke="#ffed35" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="5.5" fill="none"/>
</g>
- <rect id="d0e382" display="none" height="1000px" width="288" y="2787.1" x="10"/>
+ <rect id="d0e382" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e382"/>
</flowRegion>
<flowDiv xml:space="preserve">Et lancez une interpolation entre les deux lignes pour créer le gradient :</flowDiv>
</flowRoot>
- <g id="interpolate-f20-fr.svgg2805" transform="translate(10, 2823.9506858000004) translate(-17.25,-19.612183)">
+ <g id="interpolate-f20-fr.svgg2805" transform="translate(10, NaN) translate(-17.25,-19.612183)">
<path id="interpolate-f20-fr.svgpath2180" stroke-linejoin="miter" style="stroke-dasharray:none;" d="M20,132.36l75-32.855,85.71,33.575,77.15-32.86" stroke="#35b8ff" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="5.5" fill="none"/>
<path id="interpolate-f20-fr.svgpath3007" stroke-linejoin="miter" style="stroke-dasharray:none;" d="M20,55.219l75-32.857,85.71,33.572,77.15-32.858" stroke="#ffed35" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="5.5" fill="none"/>
<g id="interpolate-f20-fr.svgg2785">
@@ -555,17 +556,17 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f20-fr.svgpath4962" stroke-linejoin="miter" style="stroke-dasharray:none;" d="M20,127.82s75-32.853,75-32.853,85.71,33.573,85.71,33.573,77.15-32.858,77.15-32.858" stroke="#40bbf3" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="5.5" fill="none"/>
</g>
</g>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2964.9649758000005" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2964.9649758000005" x="10">Conclusion</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="NaN" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="NaN" x="10">Conclusion</tspan>
</text>
- <rect id="d0e401" display="none" height="1000px" width="288" y="2970.2" x="10"/>
+ <rect id="d0e401" display="none" height="1000px" width="288" y="0INVALID" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e401"/>
</flowRegion>
- <flowDiv xml:space="preserve">Comme démontré ci-dessus, l'extension Interpoler est un outil puissant. Ce tutoriel en couvre les bases, mais l'expérimentation est la clé pour explorer plus en avant l'interpolation.</flowDiv>
+ <flowDiv xml:space="preserve">Comme démontré ci-dessus, l&apos;extension Interpoler est un outil puissant. Ce tutoriel en couvre les bases, mais l&apos;expérimentation est la clé pour explorer plus en avant l&apos;interpolation.</flowDiv>
</flowRoot>
- <g transform="translate(0, 3009.5074768000004)">
+ <g transform="translate(0, NaN)">
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
<linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.149642,0.000000,0.000000,0.465194,-0.130153,3495.428)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
<radialGradient id="radialGradient2456" xlink:href="#linearGradient666" gradientUnits="userSpaceOnUse" cy="1036.5" cx="233.92" gradientTransform="scale(1.825742,0.547723)" r="98.26" inkscape:collect="always"/>
diff --git a/share/tutorials/tutorial-interpolate.ja.svg b/share/tutorials/tutorial-interpolate.ja.svg
index 85d12521b..98d5df968 100644
--- a/share/tutorials/tutorial-interpolate.ja.svg
+++ b/share/tutorials/tutorial-interpolate.ja.svg
@@ -71,49 +71,49 @@ Ryan Lerch, ryanlerch at gmail dot com
</flowRegion>
<flowDiv xml:space="preserve">補間エクステンションは、2 つ以上の選択パスの間に対して<flowSpan font-style="italic">線形補間</flowSpan>を行います。これはすなわち、パスとパスの間の「隙間を埋める」、および指定されたステップ数に従ってそれらを変形することを意味します。</flowDiv>
</flowRoot>
- <rect id="d0e30" display="none" height="1000px" width="288" y="123.7" x="10"/>
+ <rect id="d0e30" display="none" height="1000px" width="288" y="123.81" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e30"/>
</flowRegion>
- <flowDiv xml:space="preserve">補間エフェクトを使用するには、変形したいパスを選択し、メニューから <flowSpan font-family="sans serif">エクステンション &gt; パスから生成 &gt; 補間</flowSpan> を選択します。</flowDiv>
+ <flowDiv xml:space="preserve">補間エクステンションを使用するには、変形したいパスを選択し、メニューから <flowSpan font-family="sans serif">エクステンション &gt; パスから生成 &gt; 補間</flowSpan> を選択します。</flowDiv>
</flowRoot>
- <rect id="d0e36" display="none" height="1000px" width="288" y="153.1" x="10"/>
+ <rect id="d0e36" display="none" height="1000px" width="288" y="153.21" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e36"/>
</flowRegion>
- <flowDiv xml:space="preserve">このエフェクトを呼び出す前に、変形したいオブジェクトを <flowSpan font-style="italic">パス</flowSpan> に変換しておく必要があります。パスへの変換は、オブジェクトを選択し、<flowSpan font-family="sans serif">パス &gt; オブジェクトをパスへ</flowSpan> を選ぶ、または <flowSpan font-weight="bold">Shift+Ctrl+C</flowSpan> を押します。選択オブジェクトがパスではなかった場合はこのエフェクトは何もしません。</flowDiv>
+ <flowDiv xml:space="preserve">このエクステンションを呼び出す前に、変形したいオブジェクトを <flowSpan font-style="italic">パス</flowSpan> に変換しておく必要があります。パスへの変換は、オブジェクトを選択し、<flowSpan font-family="sans serif">パス &gt; オブジェクトをパスへ</flowSpan> を選ぶ、または <flowSpan font-weight="bold">Shift+Ctrl+C</flowSpan> を押します。選択オブジェクトがパスではなかった場合はこのエクステンションは何もしません。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="217.53389800000002" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="217.53389800000002" x="10">2 つの同じパス間の補間</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="217.76152000000002" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="217.76152000000002" x="10">2 つの同じ形状のパス間の補間</tspan>
</text>
- <rect id="d0e54" display="none" height="1000px" width="288" y="222.73" x="10"/>
+ <rect id="d0e54" display="none" height="1000px" width="288" y="222.96" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e54"/>
</flowRegion>
- <flowDiv xml:space="preserve">補間エフェクトの最も簡単な使い方は、同じ形状の 2 つのパスの間を補間することです。このエフェクトが呼び出されると、2 つのパスの間のスペースがオリジナルのパスの複製で埋められます。何個の複製を配置するかをステップ数で指定します。</flowDiv>
+ <flowDiv xml:space="preserve">補間エクステンションの最も簡単な使い方は、同じ形状の 2 つのパスの間を補間することです。このエクステンションが実行されると、2 つのパスの間のスペースがオリジナルのパスの複製で埋められます。何個の複製を配置するかはステップ数で指定します。</flowDiv>
</flowRoot>
- <rect id="d0e57" display="none" height="1000px" width="288" y="272.82" x="10"/>
+ <rect id="d0e57" display="none" height="1000px" width="288" y="273.89" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e57"/>
</flowRegion>
<flowDiv xml:space="preserve">例えば、以下のパスに注目してください:</flowDiv>
</flowRoot>
- <g id="interpolate-f01-ja.svgg2896" transform="translate(10, 298.833587) translate(4.5977783e-8,7.758846e-3)">
+ <g id="interpolate-f01-ja.svgg2896" transform="translate(10, 299.908815) translate(4.5977783e-8,7.758846e-3)">
<path id="interpolate-f01-ja.svgrect4368" stroke-linejoin="round" d="M20.29,2.0163c10.119,0,18.265,8.1467,18.265,18.266s-8.146,18.265-18.265,18.265c-10.12,0-18.266-8.146-18.266-18.265s8.1459-18.266,18.266-18.266z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f01-ja.svgrect4370" stroke-linejoin="round" d="M245.44,2.0163c10.12,0,18.27,8.1467,18.27,18.266s-8.15,18.265-18.27,18.265-18.27-8.146-18.27-18.265,8.15-18.266,18.27-18.266z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
</g>
- <rect id="d0e70" display="none" height="1000px" width="288" y="351.41" x="10"/>
+ <rect id="d0e70" display="none" height="1000px" width="288" y="352.49" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e70"/>
</flowRegion>
- <flowDiv xml:space="preserve">この 2 つのパスを選択し、イメージの下に表示されている設定で補間エフェクトを実行してみましょう。</flowDiv>
+ <flowDiv xml:space="preserve">この 2 つのパスを選択し、イメージの下に表示されている設定で補間エクステンションを実行してみましょう。</flowDiv>
</flowRoot>
- <g id="interpolate-f02-ja.svgg3003" transform="translate(10, 388.240255) translate(2.8125e-6,2.0373646e-2)">
+ <g id="interpolate-f02-ja.svgg3003" transform="translate(10, 389.42929599999997) translate(2.8125e-6,2.0373646e-2)">
<path id="interpolate-f02-ja.svgpath4419" stroke-linejoin="round" d="M20.29,2.0037c10.119,0,18.265,8.1463,18.265,18.265s-8.146,18.266-18.265,18.266c-10.12,0-18.266-8.147-18.266-18.266s8.1459-18.265,18.266-18.265z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate2.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f02-ja.svgpath4421" stroke-linejoin="round" d="M245.44,2.0037c10.12,0,18.27,8.1463,18.27,18.265s-8.15,18.266-18.27,18.266-18.27-8.147-18.27-18.266,8.15-18.265,18.27-18.265z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate2.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<g id="interpolate-f02-ja.svgg4423" inkscape:export-ydpi="88.379997" inkscape:export-xdpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate2.png" transform="matrix(0.5218716,0,0,0.5218716,-12.141006,-26.068155)">
@@ -126,42 +126,42 @@ Ryan Lerch, ryanlerch at gmail dot com
</g>
<flowRoot id="interpolate-f02-ja.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,26.335616)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f02-ja.svgflowRegion2611"><rect id="interpolate-f02-ja.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f02-ja.svgflowPara2615">指数: 0.0</flowPara><flowPara id="interpolate-f02-ja.svgflowPara2617">補間のステップ数: 6</flowPara><flowPara id="interpolate-f02-ja.svgflowPara2619">補間の方法: 2</flowPara><flowPara id="interpolate-f02-ja.svgflowPara2621">補間終端パスを複製する: チェックマークなし</flowPara><flowPara id="interpolate-f02-ja.svgflowPara2623">スタイルを補間する: チェックマークなし</flowPara></flowRoot>
</g>
- <rect id="d0e83" display="none" height="1000px" width="288" y="483.13" x="10"/>
+ <rect id="d0e83" display="none" height="1000px" width="288" y="482.44" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e83"/>
</flowRegion>
<flowDiv xml:space="preserve">上図のように、2 つの円形のパスの間のスペースが 6 (補間のステップ数) 個の複製された円形のパスで埋められます。これらの図形はグループ化されることも覚えておいてください。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="535.289907" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="535.289907" x="10">2 つの異なるパス間の補間</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="534.7132929999999" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="534.7132929999999" x="10">2 つの異なるパス間の補間</tspan>
</text>
- <rect id="d0e92" display="none" height="1000px" width="288" y="540.49" x="10"/>
+ <rect id="d0e92" display="none" height="1000px" width="288" y="539.91" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e92"/>
</flowRegion>
<flowDiv xml:space="preserve">補間が 2 つの異なる形状のパスに対して実行されたとき、プログラムはそれぞれのパスの形状も補間します。その結果はパスとパスの間を指定された補間のステップ数の規則性でモーフィングしたものになります。</flowDiv>
</flowRoot>
- <rect id="d0e95" display="none" height="1000px" width="288" y="579.98" x="10"/>
+ <rect id="d0e95" display="none" height="1000px" width="288" y="579.52" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e95"/>
</flowRegion>
<flowDiv xml:space="preserve">例えば、以下のパスに注目してください:</flowDiv>
</flowRoot>
- <g id="interpolate-f03-ja.svgg15756" transform="translate(10, 605.99647) translate(-17.882737,-67.121272)">
+ <g id="interpolate-f03-ja.svgg15756" transform="translate(10, 605.5336679999999) translate(-17.882737,-67.121272)">
<path id="interpolate-f03-ja.svgpath4455" stroke-linejoin="round" d="M38.172,69.145c10.119,0,18.266,8.147,18.266,18.266s-8.147,18.269-18.266,18.269-18.265-8.15-18.265-18.269,8.146-18.266,18.265-18.266z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f03-ja.svgpath4457" stroke-linejoin="round" d="M281.59,76.452l-18.27,29.228-18.26-29.228h36.53z" inkscape:export-ydpi="88.379997" sodipodi:nodetypes="cccc" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
</g>
- <rect id="d0e108" display="none" height="1000px" width="288" y="658.58" x="10"/>
+ <rect id="d0e108" display="none" height="1000px" width="288" y="658.11" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e108"/>
</flowRegion>
- <flowDiv xml:space="preserve">2 つのパスを選択し、補間エフェクトを実行してみましょう。以下のような結果になるはずです:</flowDiv>
+ <flowDiv xml:space="preserve">2 つのパスを選択し、補間エクステンションを実行してみましょう。以下のような結果になるはずです:</flowDiv>
</flowRoot>
- <g id="interpolate-f04-ja.svgg2967" transform="translate(10, 695.5359400000001) translate(2.8125e-6,-0.4247481)">
+ <g id="interpolate-f04-ja.svgg2967" transform="translate(10, 695.806931) translate(2.8125e-6,-0.4247481)">
<path id="interpolate-f04-ja.svgpath2532" stroke-linejoin="round" d="M263.71,9.755s-8.58,13.718-13.98,22.357c-2.48,3.97-4.29,6.868-4.29,6.868s-4.94-7.903-9.68-15.49c-4.38-7.002-8.59-13.735-8.59-13.735h10.17,26.37" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<g id="interpolate-f04-ja.svgg2606" transform="matrix(0.5218716,0,0,0.5218716,-7.8861822,-205.17)">
<path id="interpolate-f04-ja.svgpath2534" stroke-linejoin="round" d="M453.79,409.84c2.77,0-9.09,24.76-17.95,41.71-4.08,7.37-7.26,12.91-7.62,13.61-0.84,1.59-10.62-10.31-20.33-22.77-8.9-11.5-17.32-23.4-18.22-24.71-0.56-0.8,6.36-1.78,15.81-2.84,17.76-2.77,45.54-5,48.31-5" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
@@ -174,28 +174,28 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f04-ja.svgpath2546" stroke-linejoin="round" d="M20.29,2.4488c10.119,0,18.265,8.1462,18.265,18.265,0,3.067-0.748,5.952-2.072,8.485-3.046,5.824-9.141,9.781-16.193,9.781-6.245,0-11.738-3.102-15.029-7.856-2.0422-2.95-3.2366-6.535-3.2366-10.41,0-10.119,8.1459-18.265,18.266-18.265" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<flowRoot id="interpolate-f04-ja.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,26.53513)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f04-ja.svgflowRegion2611"><rect id="interpolate-f04-ja.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f04-ja.svgflowPara2615">指数: 0.0</flowPara><flowPara id="interpolate-f04-ja.svgflowPara2617">補間のステップ数: 6</flowPara><flowPara id="interpolate-f04-ja.svgflowPara2619">補間の方法: 2</flowPara><flowPara id="interpolate-f04-ja.svgflowPara2621">補間終端パスを複製する: チェックマークなし</flowPara><flowPara id="interpolate-f04-ja.svgflowPara2623">スタイルを補間する: チェックマークなし</flowPara></flowRoot>
</g>
- <rect id="d0e121" display="none" height="1000px" width="288" y="790.18" x="10"/>
+ <rect id="d0e121" display="none" height="1000px" width="288" y="788.57" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e121"/>
</flowRegion>
<flowDiv xml:space="preserve">上図のように、円形のパスと三角形のパスの間のスペースが、6 個の、一方から他方への形状が変化するパスで埋められます。</flowDiv>
</flowRoot>
- <rect id="d0e124" display="none" height="1000px" width="288" y="818.99" x="10"/>
+ <rect id="d0e124" display="none" height="1000px" width="288" y="817.49" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e124"/>
</flowRegion>
- <flowDiv xml:space="preserve">2 つの異なる形状のパスに対して補間エフェクトを使用するとき、各パスの始点ノードの<flowSpan font-style="italic">位置</flowSpan>が重要です。パスの始点ノードを確認するには、パスを選択し、ノードツールを選択します。ノードが表示されますので、<flowSpan font-weight="bold">TAB</flowSpan> を押してください。最初に選択されたノードがパスの始点ノードです。</flowDiv>
+ <flowDiv xml:space="preserve">2 つの異なる形状のパスに対して補間エクステンションを使用するとき、各パスの始点ノードの<flowSpan font-style="italic">位置</flowSpan>が重要です。パスの始点ノードを確認するには、パスを選択し、ノードツールを選択します。ノードが表示されますので、<flowSpan font-weight="bold">TAB</flowSpan> を押してください。最初に選択されたノードがパスの始点ノードです。</flowDiv>
</flowRoot>
- <rect id="d0e133" display="none" height="1000px" width="288" y="869.82" x="10"/>
+ <rect id="d0e133" display="none" height="1000px" width="288" y="868.43" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e133"/>
</flowRegion>
<flowDiv xml:space="preserve">以下のイメージを見てください。上の例と同じパスでノードが表示されています。緑色のノードがそれぞれの始点ノードです。</flowDiv>
</flowRoot>
- <g id="interpolate-f05-ja.svgg2898" transform="translate(10, 906.5650500000002) translate(9.4344012e-2,0)">
+ <g id="interpolate-f05-ja.svgg2898" transform="translate(10, 905.1841999999999) translate(9.4344012e-2,0)">
<path id="interpolate-f05-ja.svgpath4455" stroke-linejoin="round" d="M20.262,2.0739c10.119,0,18.265,8.1461,18.265,18.265,0,10.12-8.146,18.266-18.265,18.266s-18.266-8.146-18.266-18.266c0-10.119,8.1469-18.265,18.266-18.265z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f05-ja.svgpath4457" stroke-linejoin="round" d="M263.68,9.3801l-18.27,29.225-18.26-29.225h36.53z" inkscape:export-ydpi="88.379997" sodipodi:nodetypes="cccc" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<rect id="interpolate-f05-ja.svgrect2473" transform="matrix(-0.7129787,0.7011857,-0.7011857,-0.7129787,0,0)" height="2.9821" width="2.9821" y="-16.968" x="-14.604" fill="#0F0"/>
@@ -206,14 +206,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<rect id="interpolate-f05-ja.svgrect2483" transform="matrix(-0.7129787,0.7011857,-0.7011857,-0.7129787,0,0)" height="2.9821" width="2.9821" y="-192.64" x="-181.96" fill="#0F0"/>
<rect id="interpolate-f05-ja.svgrect2485" transform="matrix(-0.7129787,0.7011857,-0.7011857,-0.7129787,0,0)" height="2.9821" width="2.9821" y="-200.55" x="-150.15" fill="#CCC"/>
</g>
- <rect id="d0e146" display="none" height="1000px" width="288" y="959.68" x="10"/>
+ <rect id="d0e146" display="none" height="1000px" width="288" y="958.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e146"/>
</flowRegion>
<flowDiv xml:space="preserve">上の例 (以下にもう一度示します) はそれらが始点ノードであることによる結果です。</flowDiv>
</flowRoot>
- <g id="interpolate-f04-ja.svgg2967" transform="translate(10, 996.5629410000001) translate(2.8125e-6,-0.4247481)">
+ <g id="interpolate-f04-ja.svgg2967" transform="translate(10, 995.1820909999999) translate(2.8125e-6,-0.4247481)">
<path id="interpolate-f04-ja.svgpath2532" stroke-linejoin="round" d="M263.71,9.755s-8.58,13.718-13.98,22.357c-2.48,3.97-4.29,6.868-4.29,6.868s-4.94-7.903-9.68-15.49c-4.38-7.002-8.59-13.735-8.59-13.735h10.17,26.37" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<g id="interpolate-f04-ja.svgg2606" transform="matrix(0.5218716,0,0,0.5218716,-7.8861822,-205.17)">
<path id="interpolate-f04-ja.svgpath2534" stroke-linejoin="round" d="M453.79,409.84c2.77,0-9.09,24.76-17.95,41.71-4.08,7.37-7.26,12.91-7.62,13.61-0.84,1.59-10.62-10.31-20.33-22.77-8.9-11.5-17.32-23.4-18.22-24.71-0.56-0.8,6.36-1.78,15.81-2.84,17.76-2.77,45.54-5,48.31-5" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
@@ -226,14 +226,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f04-ja.svgpath2546" stroke-linejoin="round" d="M20.29,2.4488c10.119,0,18.265,8.1462,18.265,18.265,0,3.067-0.748,5.952-2.072,8.485-3.046,5.824-9.141,9.781-16.193,9.781-6.245,0-11.738-3.102-15.029-7.856-2.0422-2.95-3.2366-6.535-3.2366-10.41,0-10.119,8.1459-18.265,18.266-18.265" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<flowRoot id="interpolate-f04-ja.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,26.53513)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f04-ja.svgflowRegion2611"><rect id="interpolate-f04-ja.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f04-ja.svgflowPara2615">指数: 0.0</flowPara><flowPara id="interpolate-f04-ja.svgflowPara2617">補間のステップ数: 6</flowPara><flowPara id="interpolate-f04-ja.svgflowPara2619">補間の方法: 2</flowPara><flowPara id="interpolate-f04-ja.svgflowPara2621">補間終端パスを複製する: チェックマークなし</flowPara><flowPara id="interpolate-f04-ja.svgflowPara2623">スタイルを補間する: チェックマークなし</flowPara></flowRoot>
</g>
- <rect id="d0e159" display="none" height="1000px" width="288" y="1091.2" x="10"/>
+ <rect id="d0e159" display="none" height="1000px" width="288" y="1087.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e159"/>
</flowRegion>
<flowDiv xml:space="preserve">三角形のパスを水平に反転させ、始点ノードの位置を変えると、補間の結果は以下のように変化します:</flowDiv>
</flowRoot>
- <g id="interpolate-f07-ja.svgg2958" transform="translate(10, 1128.1769840000002) translate(-2.3727341e-7,0.318569)">
+ <g id="interpolate-f07-ja.svgg2958" transform="translate(10, 1125.5366479999998) translate(-2.3727341e-7,0.318569)">
<g id="interpolate-f07-ja.svgg2900">
<path id="interpolate-f07-ja.svgpath2614" stroke-linejoin="round" d="M20.356,2.0242c10.119,0,18.265,8.1468,18.265,18.266s-8.146,18.265-18.265,18.265-18.266-8.146-18.266-18.265,8.1465-18.266,18.266-18.266z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f07-ja.svgpath2616" stroke-linejoin="round" d="M227.24,9.3304l18.27,29.225,18.26-29.225h-36.53z" inkscape:export-ydpi="88.379997" sodipodi:nodetypes="cccc" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
@@ -246,7 +246,7 @@ Ryan Lerch, ryanlerch at gmail dot com
<rect id="interpolate-f07-ja.svgrect2630" transform="matrix(0.7129787,0.7011857,0.7011857,-0.7129787,0,0)" height="2.9821" width="2.9821" y="143.71" x="199.83" fill="#CCC"/>
</g>
</g>
- <g id="interpolate-f08-ja.svgg2947" transform="translate(10, 1189.2961090000001) translate(-4.5008329e-8,1.1377795e-2)">
+ <g id="interpolate-f08-ja.svgg2947" transform="translate(10, 1186.6557729999997) translate(-4.5008329e-8,1.1377795e-2)">
<g id="interpolate-f08-ja.svgg2693" transform="matrix(0.5218716,0,0,0.5218716,-7.8861828,-265.1763)">
<path id="interpolate-f08-ja.svgpath2695" stroke-linejoin="round" d="M53.99,511.98c19.39,0,35,15.61,35,35,0,5.88-1.434,11.41-3.971,16.26-5.837,11.16-17.515,18.74-31.029,18.74-11.966,0-22.492-5.94-28.798-15.05-3.913-5.65-6.202-12.52-6.202-19.95,0-19.39,15.61-35,35-35" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
<path id="interpolate-f08-ja.svgpath2697" stroke-linejoin="round" d="M110.62,513.98c16.62,0,32.35,17.14,33.83,36.12,0.68,6.13-0.06,11.66-2.23,15.82-5,9.56-13.66,13.9-23.95,11.82-9.06-1.91-16.93-8.85-22.332-16.66-3.354-4.85-6.523-10.73-8.099-17.1-2.959-16.62,6.164-30,22.781-30" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
@@ -258,24 +258,24 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f08-ja.svgpath2709" stroke-linejoin="round" d="M450.42,525.98s16.43,26.29,26.77,42.84c4.76,7.61,8.23,13.16,8.23,13.16s9.46-15.14,18.55-29.68c8.39-13.42,16.45-26.32,16.45-26.32h-19.48-50.52" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
</g>
</g>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1254.6752840000001" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1254.6752840000001" x="10">補間方式</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1252.0349479999998" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1252.0349479999998" x="10">補間方式</tspan>
</text>
- <rect id="d0e188" display="none" height="1000px" width="288" y="1259.9" x="10"/>
+ <rect id="d0e188" display="none" height="1000px" width="288" y="1257.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e188"/>
</flowRegion>
- <flowDiv xml:space="preserve">補間エフェクトのパラメータの一つに補間方式があります。2 種類の補間方式が実装されており、新しい形状の曲線の計算方法が異なります。補間方式は 1 か 2 のどちらかが選べます。</flowDiv>
+ <flowDiv xml:space="preserve">補間エクステンションのパラメータの一つに補間方式があります。2 種類の補間方式が実装されており、新しい形状の曲線の計算方法が異なります。補間方式は 1 か 2 のどちらかが選べます。</flowDiv>
</flowRoot>
- <rect id="d0e191" display="none" height="1000px" width="288" y="1299.3" x="10"/>
+ <rect id="d0e191" display="none" height="1000px" width="288" y="1297.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e191"/>
</flowRegion>
<flowDiv xml:space="preserve">上の例では、補間方式 2 を使用し、以下の結果になりました:</flowDiv>
</flowRoot>
- <g id="interpolate-f09-ja.svgg2939" transform="translate(10, 1325.4521595) translate(4.5977783e-8,-4.346754e-3)">
+ <g id="interpolate-f09-ja.svgg2939" transform="translate(10, 1323.5456164999998) translate(4.5977783e-8,-4.346754e-3)">
<path id="interpolate-f09-ja.svgpath2532" stroke-linejoin="round" d="M263.71,9.3346s-8.58,13.717-13.98,22.356c-2.48,3.971-4.29,6.868-4.29,6.868s-4.94-7.903-9.68-15.489c-4.38-7.003-8.59-13.735-8.59-13.735h10.17,26.37" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<g id="interpolate-f09-ja.svgg2606" transform="matrix(0.5218716,0,0,0.5218716,-7.8861822,-205.5904)">
<path id="interpolate-f09-ja.svgpath2534" stroke-linejoin="round" d="M453.79,409.84c2.77,0-9.09,24.76-17.95,41.71-4.08,7.37-7.26,12.91-7.62,13.61-0.84,1.59-10.62-10.31-20.33-22.77-8.9-11.5-17.32-23.4-18.22-24.71-0.56-0.8,6.36-1.78,15.81-2.84,17.76-2.77,45.54-5,48.31-5" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
@@ -287,14 +287,14 @@ Ryan Lerch, ryanlerch at gmail dot com
</g>
<path id="interpolate-f09-ja.svgpath2546" stroke-linejoin="round" d="M20.29,2.0284c10.119,0,18.265,8.1466,18.265,18.266,0,3.066-0.748,5.952-2.072,8.484-3.046,5.824-9.141,9.781-16.193,9.781-6.245,0-11.738-3.102-15.029-7.855-2.0422-2.95-3.2366-6.535-3.2366-10.41,0-10.119,8.1459-18.266,18.266-18.266" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
</g>
- <rect id="d0e204" display="none" height="1000px" width="288" y="1378" x="10"/>
+ <rect id="d0e204" display="none" height="1000px" width="288" y="1376.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e204"/>
</flowRegion>
<flowDiv xml:space="preserve">補間方式 1 と比べてみてください:</flowDiv>
</flowRoot>
- <g id="interpolate-f10-ja.svgg2607" transform="translate(10, 1404.0625675000001) translate(-19.278123,-16.358316)">
+ <g id="interpolate-f10-ja.svgg2607" transform="translate(10, 1402.1560244999998) translate(-19.278123,-16.358316)">
<path id="interpolate-f10-ja.svgpath4460" stroke-linejoin="round" d="M39.568,18.382c10.119,0,18.265,8.147,18.265,18.266s-8.146,18.265-18.265,18.265-18.266-8.146-18.266-18.265,8.147-18.266,18.266-18.266z" inkscape:export-ydpi="88.379997" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<path id="interpolate-f10-ja.svgpath4462" stroke-linejoin="round" d="M282.98,25.689l-18.26,29.224-18.27-29.224h36.53z" inkscape:export-ydpi="88.379997" sodipodi:nodetypes="cccc" inkscape:export-filename="C:\Documents and Settings\ryan\Desktop\interpolate1.png" stroke="#2e75ac" inkscape:export-xdpi="88.379997" stroke-miterlimit="4" stroke-width="4.04815769" fill="#0CF"/>
<g id="interpolate-f10-ja.svgg4484" transform="matrix(0.5218716,0,0,0.5218716,10.864771,-181.23611)">
@@ -306,31 +306,31 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f10-ja.svgpath4496" stroke-linejoin="round" d="M454.8,394.51c2.77,0-25,50.23-25,53s-32.23-43-35-43,10-2.23,25-5,32.23-5,35-5" stroke="#2e75ac" stroke-miterlimit="4" stroke-width="7.75699997" fill="#0CF"/>
</g>
</g>
- <rect id="d0e217" display="none" height="1000px" width="288" y="1456.6" x="10"/>
+ <rect id="d0e217" display="none" height="1000px" width="288" y="1454.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e217"/>
</flowRegion>
<flowDiv xml:space="preserve">これら補間方式の計算方法の違いについての説明は、このドキュメントでは割愛します。各方式を試し、あなたが期待した結果に最も近いものを使用してください。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1508.5264135" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1508.5264135" x="10">指数</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1506.6198704999997" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1506.6198704999997" x="10">指数</tspan>
</text>
- <rect id="d0e226" display="none" height="1000px" width="288" y="1513.7" x="10"/>
+ <rect id="d0e226" display="none" height="1000px" width="288" y="1511.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e226"/>
</flowRegion>
<flowDiv xml:space="preserve"><flowSpan font-style="italic">指数</flowSpan> パラメータは、補間の各ステップ間の間隔を制御します。指数 0 はすべての複製を等間隔に配置します。</flowDiv>
</flowRoot>
- <rect id="d0e231" display="none" height="1000px" width="288" y="1542.7" x="10"/>
+ <rect id="d0e231" display="none" height="1000px" width="288" y="1540.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e231"/>
</flowRegion>
<flowDiv xml:space="preserve">指数 0 の基本的な例では以下のような結果になります:</flowDiv>
</flowRoot>
- <g id="interpolate-f11-ja.svgg2920" transform="translate(10, 1568.8474135000001) translate(2.8125e-6,-2.3064422e-7)">
+ <g id="interpolate-f11-ja.svgg2920" transform="translate(10, 1566.9408704999998) translate(2.8125e-6,-2.3064422e-7)">
<path id="interpolate-f11-ja.svgpath5198" stroke-linejoin="round" d="M247.6,27.441h-10.65l-5.33-9.226,5.33-9.226h10.65l5.33,9.226-5.33,9.226z" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.86884195" fill="#0F0"/>
<path id="interpolate-f11-ja.svgpath5921" stroke-linejoin="round" d="M22.999,28.619s-3.491-3.274-3.621-3.274c-0.066,0-0.79,4.829-0.872,4.829s-2.393-4.166-2.481-4.166c-0.087,0-2.283,4.393-2.365,4.393-0.081,0-0.986-4.649-1.051-4.649-0.131,0-3.5815,3.526-3.5815,3.526s0.6054-4.753,0.5399-4.866c-0.0327-0.057-4.3588,2.191-4.3997,2.121-0.0409-0.071,1.9781-4.395,1.9345-4.471-0.0436-0.075-4.8806,0.725-4.9215,0.655-0.0408-0.071,3.1955-3.54,3.1628-3.597-0.0654-0.113-4.9385-0.837-4.9385-0.837s4.2094-2.3,4.2748-2.413c0.0327-0.057-4.322-2.231-4.2811-2.302,0.02044-0.036,4.6908-0.901,4.7123-0.938s-3.483-3.4376-3.4612-3.4754,4.7214,0.5734,4.7428,0.5362c0.0215-0.0372-2.2719-4.3618-2.2514-4.3972,0.0409-0.0708,4.3273,1.9258,4.36,1.8691,0.0654-0.1133-0.7671-4.9822-0.7671-4.9822s3.4899,3.2745,3.6209,3.2745c0.066,0,0.79-4.8295,0.872-4.8295,0.081,0,2.393,4.1658,2.48,4.1658,0.088,0,2.283-4.3929,2.365-4.3929s0.987,4.6493,1.052,4.6493c0.131,0,3.581-3.5263,3.581-3.5263s-0.605,4.7534-0.54,4.8667c0.033,0.0566,4.359-2.1918,4.4-2.121,0.041,0.0709-1.978,4.3946-1.935,4.4702,0.022,0.0377,4.837-0.8006,4.859-0.7634,0.021,0.0372-3.232,3.4771-3.212,3.5121,0.041,0.071,4.909,0.785,4.942,0.841,0.065,0.114-4.057,2.414-4.057,2.414s4.349,2.184,4.284,2.297c-0.033,0.057-4.72,0.951-4.761,1.022-0.021,0.036,3.484,3.435,3.463,3.472-0.022,0.038-4.721-0.574-4.743-0.536-0.044,0.076,2.227,4.439,2.186,4.51-0.04,0.071-4.327-1.926-4.36-1.869-0.065,0.113,0.768,4.982,0.768,4.982" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.79674554" fill="#0F0"/>
<g id="interpolate-f11-ja.svgg6545" transform="matrix(0.5218716,0,0,0.5218716,-9.217538,-573.46675)">
@@ -343,14 +343,14 @@ Ryan Lerch, ryanlerch at gmail dot com
</g>
<flowRoot id="interpolate-f11-ja.svgflowRoot2609" font-weight="normal" xml:space="preserve" transform="translate(-291.30762,14.934984)" font-style="normal" font-size="6px" font-family="Bitstream Vera Sans" fill="#000000"><flowRegion id="interpolate-f11-ja.svgflowRegion2611"><rect id="interpolate-f11-ja.svgrect2613" height="133.57" width="127.14" y="15.934" x="290.71"/></flowRegion><flowPara id="interpolate-f11-ja.svgflowPara2615">指数: 0.0</flowPara><flowPara id="interpolate-f11-ja.svgflowPara2617">補間のステップ数: 6</flowPara><flowPara id="interpolate-f11-ja.svgflowPara2619">補間の方法: 2</flowPara><flowPara id="interpolate-f11-ja.svgflowPara2621">補間終端パスを複製する: チェックマークなし</flowPara><flowPara id="interpolate-f11-ja.svgflowPara2623">スタイルを補間する: チェックマークなし</flowPara></flowRoot>
</g>
- <rect id="d0e244" display="none" height="1000px" width="288" y="1652.3" x="10"/>
+ <rect id="d0e244" display="none" height="1000px" width="288" y="1648.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e244"/>
</flowRegion>
<flowDiv xml:space="preserve">同じ例で指数を 1 にしてみます:</flowDiv>
</flowRoot>
- <g id="interpolate-f12-ja.svgg2771" transform="translate(10, 1678.4273085000002) translate(-24.034172,-18.39093)">
+ <g id="interpolate-f12-ja.svgg2771" transform="translate(10, 1674.6412985) translate(-24.034172,-18.39093)">
<path id="interpolate-f12-ja.svgpath6640" stroke-linejoin="round" d="M271.63,45.832h-10.65l-5.33-9.226,5.33-9.226h10.65l5.33,9.226-5.33,9.226z" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.86884195" fill="#0F0"/>
<path id="interpolate-f12-ja.svgpath6642" stroke-linejoin="round" d="M47.033,47.01s-3.49-3.274-3.621-3.274c-0.066,0-0.79,4.829-0.872,4.829s-2.393-4.166-2.481-4.166c-0.087,0-2.283,4.393-2.364,4.393-0.082,0-0.987-4.649-1.052-4.649-0.131,0-3.581,3.526-3.581,3.526s0.605-4.753,0.54-4.866c-0.033-0.057-4.359,2.191-4.4,2.121-0.041-0.071,1.978-4.395,1.934-4.471-0.043-0.075-4.88,0.725-4.921,0.655-0.041-0.071,3.195-3.54,3.163-3.597-0.066-0.113-4.939-0.837-4.939-0.837s4.21-2.3,4.275-2.413c0.033-0.057-4.322-2.232-4.281-2.302,0.02-0.036,4.691-0.901,4.712-0.938,0.022-0.037-3.483-3.438-3.461-3.475,0.022-0.038,4.721,0.573,4.743,0.536,0.021-0.037-2.272-4.362-2.252-4.397,0.041-0.071,4.328,1.925,4.36,1.869,0.066-0.114-0.767-4.983-0.767-4.983s3.49,3.275,3.621,3.275c0.066,0,0.79-4.83,0.872-4.83s2.393,4.166,2.48,4.166c0.088,0,2.284-4.393,2.365-4.393,0.082,0,0.987,4.65,1.052,4.65,0.131,0,3.581-3.527,3.581-3.527s-0.605,4.754-0.54,4.867c0.033,0.057,4.359-2.192,4.4-2.121s-1.978,4.395-1.934,4.47c0.021,0.038,4.837-0.8,4.858-0.763s-3.232,3.476-3.211,3.512c0.04,0.071,4.908,0.785,4.941,0.841,0.065,0.114-4.057,2.414-4.057,2.414s4.349,2.184,4.284,2.297c-0.033,0.057-4.72,0.951-4.761,1.022-0.021,0.036,3.484,3.435,3.463,3.472-0.021,0.038-4.721-0.574-4.743-0.536-0.043,0.076,2.227,4.439,2.187,4.51-0.041,0.071-4.328-1.926-4.36-1.869-0.066,0.113,0.767,4.982,0.767,4.982" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.79674554" fill="#0F0"/>
<g id="interpolate-f12-ja.svgg6743" transform="matrix(0.5218716,0,0,0.5218716,14.289464,-599.88532)">
@@ -362,14 +362,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f12-ja.svgpath6755" stroke-linejoin="round" d="M176.92,1239s-5.23-4.6-5.91-4.6c-0.33,0-1.62,6.8-2.04,6.8-0.37,0-3.9-5.9-4.3-5.9s-3.77,6.2-4.16,6.2-1.93-6.6-2.27-6.6c-0.5,0-5.65,5-5.88,5-0.32,0-0.21-2.5,0.02-4.4,0.14-1.3,0.2-2.5,0.07-2.7-0.14-0.3-6.37,2.7-6.6,2.3-0.18-0.3,2.53-6.7,2.32-7-0.19-0.4-7.14,0.5-7.34,0.2-0.19-0.3,4.23-5.5,4.06-5.8-0.24-0.4-7.25-1.6-7.37-1.9-0.17-0.3,5.61-3.7,5.61-4.1-0.06-0.1-0.88-0.6-1.87-1.1-1.8-1-4.2-2.4-3.99-2.8,0.14-0.2,6.85-1.7,7.03-2,0.16-0.3-4.64-5.3-4.46-5.6,0.16-0.3,6.91,0.3,7.07,0.1,0.17-0.3-2.92-6.7-2.76-6.9,0.2-0.4,6.37,2.2,6.53,1.9,0.34-0.6-0.52-6.9-0.65-7.6-0.01-0.1-0.01-0.1,0-0.1,0.06,0,5.28,4.6,5.91,4.6,0.33,0,1.63-6.8,2.04-6.8,0.37,0,3.9,5.8,4.3,5.8s3.77-6.1,4.16-6.1,1.93,6.5,2.27,6.5c0.51,0,5.65-5,5.88-5,0.32,0,0.21,2.4-0.02,4.4-0.15,1.3-0.21,2.5-0.08,2.8,0.15,0.2,6.38-2.7,6.6-2.3,0.18,0.3-2.52,6.6-2.32,7,0.17,0.2,7.08-0.7,7.25-0.4,0.16,0.3-4.28,5.4-4.12,5.6,0.2,0.4,7.2,1.6,7.37,1.9,0.25,0.5-5.41,3.9-5.32,4.1,0.08,0.2,1.05,0.7,2.17,1.3,1.77,0.9,3.95,2.3,3.73,2.6-0.16,0.3-6.9,1.8-7.11,2.2-0.16,0.3,4.64,5.3,4.47,5.6-0.16,0.3-6.91-0.4-7.08-0.1-0.2,0.4,2.85,6.7,2.66,7.1-0.2,0.3-6.37-2.3-6.53-2-0.34,0.6,0.66,7.8,0.66,7.8" stroke="#17a500" stroke-miterlimit="4" stroke-width="1.66485786" fill="#0F0"/>
</g>
</g>
- <rect id="d0e257" display="none" height="1000px" width="288" y="1721.2" x="10"/>
+ <rect id="d0e257" display="none" height="1000px" width="288" y="1717.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e257"/>
</flowRegion>
<flowDiv xml:space="preserve">指数を 2 にしてみます:</flowDiv>
</flowRoot>
- <g id="interpolate-f13-ja.svgg2760" transform="translate(10, 1747.3363295000001) translate(-24.034172,-18.39093)">
+ <g id="interpolate-f13-ja.svgg2760" transform="translate(10, 1743.5503195) translate(-24.034172,-18.39093)">
<path id="interpolate-f13-ja.svgpath6644" stroke-linejoin="round" d="M271.63,45.832h-10.65l-5.33-9.226,5.33-9.226h10.65l5.33,9.226-5.33,9.226z" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.86884195" fill="#0F0"/>
<path id="interpolate-f13-ja.svgpath6646" stroke-linejoin="round" d="M47.033,47.01s-3.49-3.274-3.621-3.274c-0.066,0-0.79,4.829-0.872,4.829s-2.393-4.166-2.481-4.166c-0.087,0-2.283,4.393-2.364,4.393-0.082,0-0.987-4.649-1.052-4.649-0.131,0-3.581,3.526-3.581,3.526s0.605-4.753,0.54-4.866c-0.033-0.057-4.359,2.191-4.4,2.121-0.041-0.071,1.978-4.395,1.934-4.471-0.043-0.075-4.88,0.725-4.921,0.655-0.041-0.071,3.195-3.54,3.163-3.597-0.066-0.113-4.939-0.837-4.939-0.837s4.21-2.3,4.275-2.413c0.033-0.057-4.322-2.231-4.281-2.302,0.02-0.036,4.691-0.901,4.712-0.938,0.022-0.037-3.483-3.438-3.461-3.475,0.022-0.038,4.721,0.573,4.743,0.536,0.021-0.037-2.272-4.362-2.252-4.397,0.041-0.071,4.328,1.925,4.36,1.869,0.066-0.114-0.767-4.983-0.767-4.983s3.49,3.275,3.621,3.275c0.066,0,0.79-4.83,0.872-4.83s2.393,4.166,2.48,4.166c0.088,0,2.284-4.393,2.365-4.393,0.082,0,0.987,4.65,1.052,4.65,0.131,0,3.581-3.527,3.581-3.527s-0.605,4.754-0.54,4.867c0.033,0.057,4.359-2.192,4.4-2.121s-1.978,4.395-1.934,4.47c0.021,0.038,4.837-0.8,4.858-0.763s-3.232,3.477-3.211,3.512c0.04,0.071,4.908,0.785,4.941,0.841,0.065,0.114-4.057,2.414-4.057,2.414s4.349,2.184,4.284,2.297c-0.033,0.057-4.72,0.951-4.761,1.022-0.021,0.036,3.484,3.435,3.463,3.472-0.021,0.038-4.721-0.574-4.743-0.536-0.043,0.076,2.227,4.439,2.187,4.51-0.041,0.071-4.328-1.926-4.36-1.869-0.066,0.113,0.767,4.982,0.767,4.982" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.79674554" fill="#0F0"/>
<g id="interpolate-f13-ja.svgg6943" transform="matrix(0.5218716,0,0,0.5218716,14.289464,-641.00452)">
@@ -381,14 +381,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f13-ja.svgpath6955" stroke-linejoin="round" d="M222.09,1317.5s-4.66-3.9-5.5-3.9c-0.41,0-1.67,5.8-2.19,5.8-0.46,0-3.63-5-4.12-5s-3.53,5.3-4.01,5.3-1.95-5.6-2.37-5.6c-0.61,0-5.17,4.2-5.49,4.2-0.45,0-0.47-2.1-0.27-3.8,0.12-1.1,0.15-2.1-0.01-2.4-0.18-0.3-5.6,2.1-5.88,1.6-0.22-0.4,2.02-6,1.77-6.4-0.24-0.4-6.27,0.2-6.51-0.2s3.48-4.9,3.26-5.3c-0.29-0.5-6.37-1.7-6.54-2-0.24-0.4,4.64-3.6,4.59-3.9-0.1-0.2-0.82-0.7-1.67-1.1-1.54-0.8-3.54-2.2-3.27-2.7,0.18-0.3,6.01-1.7,6.25-2.1,0.2-0.3-3.83-4.8-3.61-5.2,0.21-0.3,6.07,0.1,6.28-0.3,0.22-0.3-2.35-5.9-2.15-6.3,0.25-0.4,5.61,1.7,5.81,1.3,0.42-0.7-0.22-6.2-0.33-6.9-0.01,0-0.01-0.1,0-0.1,0.08,0,4.72,4,5.5,4,0.41,0,1.68-5.8,2.19-5.8,0.46,0,3.63,5,4.12,5s3.53-5.3,4.01-5.3c0.49,0,1.95,5.6,2.38,5.6,0.6,0,5.17-4.3,5.48-4.3,0.45,0,0.46,2.1,0.27,3.8-0.13,1.1-0.15,2.2,0.01,2.5,0.18,0.3,5.59-2.1,5.88-1.6,0.22,0.4-2.03,5.9-1.77,6.4,0.21,0.3,6.21-0.3,6.43,0,0.21,0.4-3.53,4.9-3.32,5.2,0.25,0.5,6.32,1.7,6.54,2,0.3,0.6-4.48,3.7-4.35,3.9,0.12,0.2,0.98,0.7,1.94,1.2,1.52,0.8,3.32,2.1,3.04,2.6-0.19,0.3-6.04,1.7-6.31,2.2-0.2,0.3,3.84,4.8,3.61,5.1-0.2,0.4-6.06,0-6.27,0.4-0.25,0.4,2.29,6,2.05,6.4-0.25,0.4-5.61-1.6-5.81-1.3-0.43,0.7,0.34,7,0.34,7" stroke="#17a500" stroke-miterlimit="4" stroke-width="1.66485786" fill="#0F0"/>
</g>
</g>
- <rect id="d0e270" display="none" height="1000px" width="288" y="1790.1" x="10"/>
+ <rect id="d0e270" display="none" height="1000px" width="288" y="1786.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e270"/>
</flowRegion>
<flowDiv xml:space="preserve">そして指数が -1 の場合は以下のようになります:</flowDiv>
</flowRoot>
- <g id="interpolate-f14-ja.svgg2749" transform="translate(10, 1816.2922255) translate(-24.748457,-18.39098)">
+ <g id="interpolate-f14-ja.svgg2749" transform="translate(10, 1812.5062154999998) translate(-24.748457,-18.39098)">
<path id="interpolate-f14-ja.svgpath6648" stroke-linejoin="round" d="M272.35,45.832h-10.66l-5.32-9.226,5.32-9.226h10.66l5.32,9.226-5.32,9.226z" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.86884195" fill="#0F0"/>
<path id="interpolate-f14-ja.svgpath6650" stroke-linejoin="round" d="M47.747,47.01s-3.49-3.274-3.621-3.274c-0.065,0-0.79,4.829-0.872,4.829-0.081,0-2.393-4.166-2.48-4.166s-2.283,4.393-2.365,4.393-0.987-4.649-1.052-4.649c-0.131,0-3.581,3.526-3.581,3.526s0.605-4.753,0.54-4.866c-0.033-0.057-4.359,2.191-4.4,2.121-0.041-0.071,1.978-4.395,1.935-4.471-0.044-0.075-4.881,0.725-4.922,0.655-0.041-0.071,3.196-3.54,3.163-3.597-0.065-0.113-4.939-0.837-4.939-0.837s4.21-2.3,4.275-2.413c0.033-0.057-4.322-2.232-4.281-2.302,0.021-0.036,4.691-0.901,4.712-0.938,0.022-0.037-3.483-3.438-3.461-3.476,0.022-0.037,4.722,0.574,4.743,0.537,0.022-0.037-2.272-4.362-2.251-4.397,0.041-0.071,4.327,1.925,4.36,1.869,0.065-0.114-0.767-4.983-0.767-4.983s3.49,3.275,3.621,3.275c0.065,0,0.789-4.83,0.871-4.83s2.394,4.166,2.481,4.166,2.283-4.393,2.365-4.393c0.081,0,0.986,4.65,1.052,4.65,0.13,0,3.581-3.527,3.581-3.527s-0.606,4.754-0.54,4.867c0.032,0.057,4.358-2.192,4.399-2.121s-1.978,4.395-1.934,4.47c0.022,0.038,4.837-0.8,4.858-0.763,0.022,0.037-3.232,3.476-3.211,3.512,0.041,0.071,4.908,0.785,4.941,0.841,0.065,0.114-4.057,2.414-4.057,2.414s4.35,2.184,4.284,2.297c-0.033,0.057-4.72,0.951-4.761,1.022-0.02,0.036,3.485,3.435,3.463,3.472-0.021,0.038-4.721-0.574-4.743-0.536-0.043,0.076,2.228,4.439,2.187,4.51s-4.327-1.926-4.36-1.869c-0.066,0.113,0.767,4.982,0.767,4.982" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.79674554" fill="#0F0"/>
<g id="interpolate-f14-ja.svgg7477" transform="matrix(0.5218716,0,0,0.5218716,15.003749,-683.70527)">
@@ -400,21 +400,21 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f14-ja.svgpath7489" stroke-linejoin="round" d="M94.667,1400s-6.282-5.8-6.651-5.8c-0.182,0-1.545,8.6-1.774,8.6-0.217,0-4.394-7.4-4.626-7.4s-4.206,7.8-4.427,7.8c-0.223,0-1.903-8.3-2.088-8.3-0.322,0-6.523,6.3-6.586,6.3-0.091,0,0.246-3.1,0.531-5.6,0.186-1.6,0.311-3,0.239-3.1-0.085-0.2-7.799,3.8-7.919,3.5-0.107-0.1,3.437-7.9,3.319-8.1-0.115-0.2-8.735,1.2-8.846,1-0.11-0.2,5.594-6.4,5.499-6.6-0.157-0.3-8.842-1.6-8.877-1.7-0.048-0.1,7.38-4.2,7.47-4.5-0.001,0-0.986-0.6-2.243-1.2-2.259-1.2-5.401-2.9-5.305-3,0.067-0.2,8.391-1.8,8.471-1.9,0.074-0.1-6.105-6.2-6.026-6.4,0.075-0.1,8.45,0.9,8.525,0.8,0.077-0.1-3.953-7.9-3.88-8,0.113-0.2,7.755,3.3,7.845,3.1,0.178-0.3-1.06-7.9-1.227-8.9-0.012-0.1-0.017-0.1-0.015-0.1,0.016,0,6.294,5.8,6.651,5.8,0.182,0,1.545-8.6,1.774-8.6,0.217,0,4.394,7.4,4.626,7.4s4.206-7.8,4.427-7.8c0.223,0,1.903,8.3,2.088,8.3,0.322,0,6.523-6.3,6.586-6.3,0.089,0-0.238,3-0.521,5.5-0.192,1.7-0.324,3.1-0.251,3.2,0.086,0.2,7.8-3.7,7.919-3.5,0.107,0.1-3.436,7.9-3.319,8.1,0.076,0.1,8.654-1.3,8.734-1.2,0.08,0.2-5.659,6.3-5.587,6.5,0.114,0.1,8.787,1.5,8.887,1.6,0.16,0.3-7.12,4.5-7.09,4.5,0.02,0.1,1.19,0.7,2.6,1.4,2.24,1.1,5.08,2.7,4.96,2.9-0.09,0.1-8.44,1.8-8.56,2-0.071,0.1,6.11,6.2,6.03,6.4-0.07,0.1-8.448-0.9-8.524-0.8-0.117,0.2,3.874,8,3.764,8.2s-7.756-3.3-7.847-3.1c-0.186,0.3,1.244,9,1.244,9" stroke="#17a500" stroke-miterlimit="4" stroke-width="1.66485786" fill="#0F0"/>
</g>
</g>
- <rect id="d0e283" display="none" height="1000px" width="288" y="1859.1" x="10"/>
+ <rect id="d0e283" display="none" height="1000px" width="288" y="1855.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e283"/>
</flowRegion>
- <flowDiv xml:space="preserve">補間エフェクトで指数を使用する場合、オブジェクトを選択した<flowSpan font-style="italic">順番</flowSpan>が重要になります。上の例では、左の星形のパスが最初に選択され、右の六角形のパスが次に選択されています。</flowDiv>
+ <flowDiv xml:space="preserve">補間エクステンションで指数を使用する場合、オブジェクトを選択した<flowSpan font-style="italic">順番</flowSpan>が重要になります。上の例では、左の星形のパスが最初に選択され、右の六角形のパスが次に選択されています。</flowDiv>
</flowRoot>
- <rect id="d0e289" display="none" height="1000px" width="288" y="1898.6" x="10"/>
+ <rect id="d0e289" display="none" height="1000px" width="288" y="1894.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e289"/>
</flowRegion>
<flowDiv xml:space="preserve">右のパスを最初に選択した場合の結果を確認してください。指数に 1 を設定した場合は以下のようになります:</flowDiv>
</flowRoot>
- <g id="interpolate-f15-ja.svgg2738" transform="translate(10, 1935.4648975000002) translate(-24.748458,-19.105216)">
+ <g id="interpolate-f15-ja.svgg2738" transform="translate(10, 1932.3736184999998) translate(-24.748458,-19.105216)">
<path id="interpolate-f15-ja.svgpath6652" stroke-linejoin="round" d="M272.35,46.546h-10.66l-5.32-9.226,5.32-9.226h10.66l5.32,9.226-5.32,9.226z" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.86884195" fill="#0F0"/>
<path id="interpolate-f15-ja.svgpath6654" stroke-linejoin="round" d="M47.747,47.724s-3.49-3.274-3.621-3.274c-0.065,0-0.79,4.829-0.872,4.829-0.081,0-2.393-4.165-2.48-4.165s-2.283,4.392-2.365,4.392-0.987-4.649-1.052-4.649c-0.131,0-3.581,3.526-3.581,3.526s0.605-4.753,0.54-4.866c-0.033-0.057-4.359,2.192-4.4,2.121s1.978-4.395,1.935-4.47c-0.044-0.076-4.881,0.725-4.922,0.654s3.196-3.54,3.163-3.597c-0.065-0.113-4.939-0.836-4.939-0.836s4.21-2.301,4.275-2.414c0.033-0.057-4.322-2.231-4.281-2.302,0.021-0.036,4.691-0.9,4.712-0.938,0.022-0.037-3.483-3.437-3.461-3.475s4.722,0.573,4.743,0.536c0.022-0.037-2.272-4.362-2.251-4.397,0.041-0.071,4.327,1.926,4.36,1.869,0.065-0.113-0.767-4.982-0.767-4.982s3.49,3.274,3.621,3.274c0.065,0,0.789-4.829,0.871-4.829s2.394,4.165,2.481,4.165,2.283-4.392,2.365-4.392c0.081,0,0.986,4.649,1.052,4.649,0.13,0,3.581-3.526,3.581-3.526s-0.606,4.753-0.54,4.866c0.032,0.057,4.358-2.192,4.399-2.121s-1.978,4.395-1.934,4.47c0.022,0.038,4.837-0.8,4.858-0.763,0.022,0.037-3.232,3.477-3.211,3.512,0.041,0.071,4.908,0.785,4.941,0.842,0.065,0.113-4.057,2.413-4.057,2.413s4.35,2.184,4.284,2.298c-0.033,0.056-4.72,0.951-4.761,1.021-0.02,0.036,3.485,3.435,3.463,3.473-0.021,0.037-4.721-0.574-4.742-0.537-0.044,0.076,2.227,4.439,2.186,4.51s-4.327-1.925-4.36-1.869c-0.066,0.113,0.767,4.982,0.767,4.982" stroke="#17a500" stroke-miterlimit="4" stroke-width="0.79674554" fill="#0F0"/>
<g id="interpolate-f15-ja.svgg7705" transform="matrix(0.5218716,0,0,0.5218716,15.53092,-723.58311)">
@@ -426,34 +426,34 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f15-ja.svgpath7717" stroke-linejoin="round" d="M377.93,1476.3s-2.67-1.7-4.09-1.7c-0.7,0-1.84,2.5-2.71,2.5-0.75,0-2.68-2.1-3.49-2.1s-2.7,2.2-3.5,2.2-2.01-2.4-2.73-2.4c-0.95,0-3.5,1.8-4.13,1.8-0.9,0-1.34-0.8-1.26-1.6,0.05-0.4-0.05-1.1-0.32-1.5-0.29-0.5-2.88-0.1-3.36-0.9-0.36-0.6,0.28-3.5-0.14-4.2-0.39-0.7-3.24-1-3.64-1.7-0.4-0.6,0.88-3,0.5-3.7-0.44-0.8-3.31-1.8-3.66-2.4-0.48-0.8,1.27-2.7,1.04-3.2-0.2-0.4-0.6-0.7-0.96-0.9-0.64-0.3-1.25-1.3-0.75-2.2,0.32-0.6,3.07-1.7,3.5-2.4,0.37-0.6-1.03-3-0.63-3.7,0.38-0.7,3.13-1,3.51-1.6,0.4-0.7-0.38-3.6-0.01-4.3,0.42-0.7,2.97-0.3,3.31-0.9,0.72-1.2,0.81-4.2,0.76-4.5h0.03c0.16,0,2.79,1.7,4.08,1.7,0.7,0,1.84-2.5,2.71-2.5,0.75,0,2.68,2.1,3.49,2.1s2.7-2.2,3.5-2.2c0.81,0,2.01,2.3,2.73,2.3,0.96,0,3.5-1.7,4.13-1.7,0.88,0,1.32,0.8,1.24,1.5-0.06,0.5,0.05,1.2,0.33,1.6,0.29,0.5,2.88,0.1,3.36,0.9,0.36,0.6-0.29,3.5,0.14,4.2,0.37,0.7,3.2,0.9,3.6,1.6,0.38,0.7-0.91,3-0.54,3.7,0.43,0.7,3.3,1.8,3.66,2.4,0.49,0.8-1.23,2.7-0.97,3.1,0.24,0.4,0.7,0.8,1.11,1,0.64,0.4,1.18,1.3,0.69,2.1-0.32,0.6-3.09,1.7-3.54,2.5-0.36,0.6,1.04,3,0.64,3.7-0.38,0.6-3.14,1-3.51,1.6-0.42,0.8,0.34,3.6-0.05,4.3-0.41,0.7-2.97,0.4-3.3,1-0.73,1.2-0.77,4.5-0.77,4.5" stroke="#17a500" stroke-miterlimit="4" stroke-width="1.52670813" fill="#0F0"/>
</g>
</g>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1991.0645435000001" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1991.0645435000001" x="10">終端パスを複製する</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1987.9732644999997" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1987.9732644999997" x="10">終端パスを複製する</tspan>
</text>
- <rect id="d0e308" display="none" height="1000px" width="288" y="1996.3" x="10"/>
+ <rect id="d0e308" display="none" height="1000px" width="288" y="1993.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e308"/>
</flowRegion>
- <flowDiv xml:space="preserve">このパラメータは、エフェクトでパスのグループを生成する際に、補間が適用されるオリジナルのパスの<flowSpan font-style="italic">複製も生成するかどうか</flowSpan>を指定します。</flowDiv>
+ <flowDiv xml:space="preserve">このパラメータは、エクステンションでパスのグループを生成する際に、補間が適用されるオリジナルのパスの<flowSpan font-style="italic">複製も生成するかどうか</flowSpan>を指定します。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2037.9623565000002" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2037.9623565000002" x="10">スタイルを補間する</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2034.8710774999997" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2034.8710774999997" x="10">スタイルを補間する</tspan>
</text>
- <rect id="d0e320" display="none" height="1000px" width="288" y="2043.2" x="10"/>
+ <rect id="d0e320" display="none" height="1000px" width="288" y="2040.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e320"/>
</flowRegion>
- <flowDiv xml:space="preserve">このパラメータは補間エフェクトの賢い機能の一つです。この機能は各ステップのスタイルの変更を試みます。最初のパスと最後のパスの色が異なる場合、生成されるパスの色も徐々に変化します。</flowDiv>
+ <flowDiv xml:space="preserve">このパラメータは補間エクステンションの賢い機能の一つです。この機能は各ステップごとにスタイルの変更を試みます。最初のパスと最後のパスの色が異なる場合、生成されるパスの色も徐々に変化します。</flowDiv>
</flowRoot>
- <rect id="d0e323" display="none" height="1000px" width="288" y="2082.6" x="10"/>
+ <rect id="d0e323" display="none" height="1000px" width="288" y="2079.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e323"/>
</flowRegion>
<flowDiv xml:space="preserve">以下はパスのフィルにスタイルの補間機能が適用された例です:</flowDiv>
</flowRoot>
- <g id="interpolate-f16-ja.svgg2861" transform="translate(10, 2108.7236075) translate(-21.811549,-16.97341)">
+ <g id="interpolate-f16-ja.svgg2861" transform="translate(10, 2105.6323285) translate(-21.811549,-16.97341)">
<path id="interpolate-f16-ja.svgpath13980" fill="#FC0" d="M52.663,48.163c-2.997,2.904-3.507-5.427-7.12-3.193-3.685,2.279,1.132,7.941-3.228,8.47-4.276,0.518,1.544-6.96-2.678-7.53-4.305-0.581-3.831,7.272-7.908,5.69-3.998-1.551,4.538-5.716,1.63-8.871-2.966-3.217-6.213,5.723-8.463,1.962-2.206-3.688,5.568-2.554,4.959-6.686-0.622-4.213-8.403-0.204-8.03-4.444,0.365-4.158,8.015,2.747,9.9-1.062,1.923-3.885-6.953-4.673-4.277-7.898,2.625-3.162,4.671,4.579,8.371,2.365,3.773-2.258-2.707-7.438,1.458-8.427,4.085-0.969,0.184,7.803,4.35,8.286,4.249,0.493,2.825-8.477,6.66-6.673,3.761,1.769-3.613,6.481-0.834,9.63,2.834,3.212,5.587-5.828,7.763-2.1,2.132,3.655-5.516,3.234-4.864,7.501,0.665,4.351,8.878,0.224,8.029,4.487-0.834,4.18-8.373-3.756-9.995,0.204-1.653,4.037,7.334,5.326,4.277,8.289z"/>
<path id="interpolate-f16-ja.svgpath13984" fill="#d40000" d="M276.7,46.671c-3,2.905-3.51-5.426-7.13-3.192-3.68,2.279,1.14,7.941-3.22,8.47-4.28,0.518,1.54-6.96-2.68-7.53-4.31-0.581-3.83,7.272-7.91,5.69-4-1.551,4.54-5.716,1.63-8.871-2.96-3.217-6.21,5.723-8.46,1.962-2.21-3.688,5.57-2.554,4.96-6.686-0.62-4.213-8.41-0.204-8.03-4.444,0.36-4.158,8.01,2.747,9.9-1.062,1.92-3.885-6.96-4.673-4.28-7.898,2.63-3.162,4.67,4.579,8.37,2.365,3.77-2.258-2.71-7.438,1.46-8.427,4.08-0.969,0.18,7.803,4.35,8.286,4.25,0.493,2.82-8.477,6.66-6.673,3.76,1.769-3.61,6.481-0.83,9.63,2.83,3.212,5.58-5.828,7.76-2.101,2.13,3.656-5.52,3.235-4.87,7.502,0.67,4.351,8.88,0.224,8.03,4.487-0.83,4.18-8.37-3.756-9.99,0.204-1.66,4.037,7.33,5.326,4.28,8.288z"/>
<g id="interpolate-f16-ja.svgg14129" transform="matrix(0.5218716,0,0,0.5218716,16.740257,-799.45519)">
@@ -465,14 +465,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f16-ja.svgpath14141" fill="#f8ae00" d="M130.16,1623.8c-5.74,5.5-6.72-10.4-13.64-6.1-7.06,4.3,2.17,15.2-6.19,16.2-8.19,1,2.96-13.3-5.13-14.4-8.248-1.1-7.34,13.9-15.152,10.9-7.66-3,8.696-11,3.123-17h-0.001c-5.683-6.2-11.905,10.9-16.215,3.7h-0.001c-4.226-7,10.67-4.9,9.502-12.8-1.191-8.1-16.101-0.4-15.387-8.5,0.701-8,15.359,5.3,18.971-2h0.001c3.682-7.5-13.324-9-8.196-15.2h0.001c5.029-6,8.95,8.8,16.039,4.6h0.001c7.224-4.4-5.187-14.3,2.794-16.2,7.83-1.8,0.35,15,8.33,15.9h0.01c8.14,0.9,5.41-16.2,12.76-12.8,7.2,3.4-6.93,12.4-1.6,18.5,5.43,6.1,10.7-11.2,14.87-4.1,4.09,7-10.57,6.2-9.32,14.4,1.28,8.3,17.02,0.4,15.39,8.6-1.6,8-16.05-7.2-19.15,0.4-3.17,7.7,14.05,10.2,8.19,15.9"/>
</g>
</g>
- <rect id="d0e336" display="none" height="1000px" width="288" y="2157.2" x="10"/>
+ <rect id="d0e336" display="none" height="1000px" width="288" y="2154.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e336"/>
</flowRegion>
<flowDiv xml:space="preserve">スタイルの補間はパスのストロークに対しても作用します。</flowDiv>
</flowRoot>
- <g id="interpolate-f17-ja.svgg2850" transform="translate(10, 2183.3716855000002) translate(-20.688595,-14.421848)">
+ <g id="interpolate-f17-ja.svgg2850" transform="translate(10, 2180.2804065) translate(-20.688595,-14.421848)">
<path id="interpolate-f17-ja.svgpath14293" stroke-linejoin="round" style="stroke-dasharray:none;" d="M52.29,44.87c-2.997,2.905-3.507-5.427-7.12-3.192-3.685,2.278,1.132,7.941-3.228,8.469-4.276,0.518,1.544-6.96-2.678-7.53-4.305-0.58-3.831,7.273-7.907,5.691-3.998-1.552,4.538-5.716,1.629-8.871-2.966-3.218-6.213,5.722-8.463,1.961-2.206-3.687,5.568-2.554,4.959-6.685-0.621-4.213-8.403-0.204-8.03-4.444,0.365-4.158,8.015,2.747,9.9-1.063,1.923-3.885-6.953-4.672-4.276-7.897,2.624-3.163,4.67,4.578,8.37,2.364,3.773-2.258-2.706-7.438,1.459-8.426,4.084-0.97,0.183,7.802,4.35,8.285,4.248,0.493,2.824-8.476,6.659-6.672,3.761,1.769-3.613,6.48-0.834,9.63,2.834,3.211,5.588-5.829,7.763-2.101,2.133,3.656-5.515,3.235-4.864,7.502,0.665,4.351,8.879,0.224,8.029,4.487-0.834,4.18-8.372-3.756-9.994,0.203-1.654,4.038,7.333,5.327,4.276,8.289z" stroke="#000" stroke-miterlimit="4" stroke-width="1.50038075" fill="#FC0"/>
<path id="interpolate-f17-ja.svgpath14295" stroke-linejoin="round" style="stroke-dasharray:none;" d="M277.07,47.107c-3,2.904-3.51-5.427-7.12-3.193-3.69,2.279,1.13,7.942-3.23,8.47-4.28,0.518,1.54-6.96-2.68-7.53-4.3-0.581-3.83,7.272-7.91,5.69-3.99-1.551,4.54-5.716,1.63-8.871-2.96-3.217-6.21,5.723-8.46,1.962-2.21-3.688,5.57-2.554,4.96-6.686-0.62-4.213-8.4-0.204-8.03-4.444,0.36-4.158,8.01,2.748,9.9-1.062,1.92-3.885-6.95-4.673-4.28-7.898,2.63-3.162,4.67,4.579,8.37,2.365,3.78-2.258-2.7-7.438,1.46-8.427,4.09-0.969,0.19,7.803,4.35,8.286,4.25,0.493,2.83-8.477,6.66-6.673,3.76,1.769-3.61,6.481-0.83,9.63,2.83,3.212,5.59-5.828,7.76-2.1,2.13,3.655-5.51,3.234-4.86,7.501,0.66,4.351,8.88,0.225,8.03,4.487-0.84,4.181-8.38-3.756-10,0.204-1.65,4.038,7.33,5.327,4.28,8.289z" stroke="#ededed" stroke-miterlimit="4" stroke-width="1.50038075" fill="#d40000"/>
<g id="interpolate-f17-ja.svgg14449" transform="matrix(0.5218716,0,0,0.5218716,16.367493,-843.97546)">
@@ -484,14 +484,14 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f17-ja.svgpath14461" stroke-linejoin="round" style="stroke-dasharray:none;" d="M438.02,1706.9c-5.75,5.5-6.72-10.4-13.65-6.2-7.06,4.4,2.17,15.3-6.18,16.3-8.19,1,2.96-13.4-5.13-14.5-8.25-1.1-7.34,14-15.15,10.9h-0.01c-7.65-2.9,8.7-10.9,3.13-16.9-5.69-6.2-11.91,10.9-16.22,3.7-4.23-7.1,10.67-4.9,9.5-12.8-1.19-8.1-16.1-0.4-15.38-8.5,0.7-8,15.35,5.2,18.97-2.1,3.68-7.4-13.33-8.9-8.2-15.1,5.03-6,8.95,8.8,16.04,4.5,7.23-4.3-5.18-14.2,2.8-16.1,7.82-1.9,0.35,14.9,8.33,15.9,8.14,0.9,5.41-16.3,12.76-12.8,7.21,3.4-6.92,12.4-1.59,18.4,5.43,6.2,10.7-11.1,14.87-4,4.09,7-10.57,6.2-9.32,14.4,1.27,8.3,17.01,0.4,15.38,8.6-1.59,8-16.04-7.2-19.15,0.4-3.17,7.7,14.06,10.2,8.2,15.9" stroke="#cbcbcb" stroke-miterlimit="4" stroke-width="2.875" fill="#da1d00"/>
</g>
</g>
- <rect id="d0e349" display="none" height="1000px" width="288" y="2234.1" x="10"/>
+ <rect id="d0e349" display="none" height="1000px" width="288" y="2231" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e349"/>
</flowRegion>
<flowDiv xml:space="preserve">もちろん、始点および終点のパスは同じ形状でなくても構いません。</flowDiv>
</flowRoot>
- <g id="interpolate-f18-ja.svgg2826" transform="translate(10, 2260.1876195000004) translate(-20.83931,-14.710899)">
+ <g id="interpolate-f18-ja.svgg2826" transform="translate(10, 2257.0963405) translate(-20.83931,-14.710899)">
<path id="interpolate-f18-ja.svgpath7836" fill="#FC0" d="M52.441,44.409c-2.997,2.905-3.507-5.427-7.12-3.192-3.685,2.278,1.132,7.941-3.228,8.469-4.276,0.518,1.544-6.96-2.678-7.53-4.305-0.581-3.831,7.273-7.908,5.691-3.998-1.552,4.538-5.716,1.63-8.871-2.966-3.218-6.213,5.722-8.463,1.961-2.206-3.687,5.568-2.554,4.959-6.685-0.622-4.213-8.403-0.204-8.031-4.444,0.366-4.158,8.016,2.747,9.901-1.063,1.923-3.885-6.953-4.672-4.277-7.897,2.625-3.163,4.671,4.578,8.371,2.364,3.773-2.258-2.707-7.438,1.458-8.426,4.085-0.97,0.184,7.802,4.35,8.285,4.249,0.493,2.825-8.476,6.66-6.672,3.761,1.769-3.613,6.48-0.834,9.63,2.834,3.211,5.587-5.829,7.762-2.101,2.133,3.656-5.515,3.235-4.863,7.502,0.665,4.351,8.878,0.224,8.029,4.487-0.834,4.18-8.373-3.756-9.995,0.203-1.654,4.038,7.334,5.327,4.277,8.289z"/>
<path id="interpolate-f18-ja.svgrect7838" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" fill="#d40000" d="M255.17,22.167h1.52,1.51,1.52,1.51,1.52,1.52,1.51,1.52,1.51,1.52,1.51,1.52,1.51,1.52,1.52,1.51v1.515,1.516,1.516,1.515,1.516,1.516,1.515,1.516,1.515,1.516,1.516,1.515,1.516,1.515,1.516,1.516h-1.51-1.52-1.52-1.51-1.52-1.51-1.52-1.51-1.52-1.51-1.52-1.52-1.51-1.52-1.51-1.52v-1.516-1.516-1.515-1.516-1.515-1.516-1.516-1.515-1.516-1.515-1.516-1.516-1.515-1.516-1.516-1.515z"/>
<g id="interpolate-f18-ja.svgg8948" transform="matrix(0.5218716,0,0,0.5218716,16.890973,-819.61038)">
@@ -513,28 +513,28 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f18-ja.svgpath10446" stroke-linejoin="round" d="M123.62,1733.5c-1.89,1.9-2.77,1-3.97-0.6-1.01-1.3-1.55-3.2-2.75-4.3-1.1-1-2.16-1.4-3.79-0.3-0.19,0.1-0.38,0.3-0.56,0.4-1.54,1.3-1.47,3-1.44,4.8s0.86,3.7,0.81,5.3c-0.06,1.8-0.35,3.1-2.82,3.4h-0.04c-2.62,0.3-2.48-1.3-2.18-3.4,0.24-1.6,1.22-3.5,1.32-5.2,0.12-1.9,0-3.5-2.25-3.8h-0.06c-2.09-0.2-3.07,0.7-4.18,2.1-1.06,1.4-1.44,3.1-2.321,4.6-1.033,1.7-1.77,3.1-3.594,3-0.478,0-0.946-0.1-1.456-0.3-1.602-0.7-1.741-1.7-1.34-2.8,0.445-1.3,2.172-2.8,3.382-4.4,1.16-1.5,2.64-3.1,2.756-4.7,0.069-0.9-0.082-1.8-0.771-2.7-0.555-0.7-1.126-1.1-1.787-1.1-1.535-0.3-3.087,1.3-4.594,2.7-1.429,1.3-2.818,3.2-4.114,3.7-1.162,0.6-2.249,0.6-3.223-0.9-0.286-0.5-0.47-0.8-0.566-1.2-0.471-1.9,1.137-2.4,3.099-3.3,1.607-0.7,3.451-1,4.588-2.2,0.795-0.8,1.245-1.7,1.024-3.1-0.089-0.5-0.267-1-0.517-1.4-0.891-1.5-2.701-1.5-4.68-1.6-1.813-0.1-3.769,0.4-5.294,0.1-1.721-0.4-2.894-0.9-2.699-3.1,0.013-0.1,0.031-0.2,0.053-0.3,0.371-2.1,2.085-1.7,4.289-1.2,1.545,0.4,3.332,1.5,5.065,2,1.938,0.6,3.809,1.3,5.203,0.7,0.68-0.3,1.247-0.7,1.652-1.4,0.533-1,0.56-1.8,0.259-2.6-0.532-1.5-2.087-2.2-3.696-3.3-1.653-1.1-3.363-1.7-4.076-2.9-0.53-0.9-0.51-1.8,0.488-2.9,0.518-0.5,1.021-0.8,1.518-1,1.505-0.5,2.527,0.8,4.074,2.3,1.293,1.3,2.248,2.7,3.798,3.2,1.078,0.4,2.08,0.3,3.24-0.4,0.46-0.4,0.81-0.7,1.11-1.1,1.15-1.4,0.45-3.2-0.14-5.1-0.58-1.8-1.87-3.6-1.92-5-0.05-1.3,0.33-2.2,2.08-2.7,0.47-0.1,0.87-0.1,1.24-0.1,1.66,0.3,1.59,2.1,1.71,4.4,0.08,1.7-0.38,3.7-0.11,5.3,0.32,2,0.66,3.6,2.57,4h0.35c1.85,0.2,2.78-0.7,3.67-2.2,0.85-1.4,0.97-3.3,1.55-4.9,0.71-2.1,1.06-3.9,2.51-4.2,0.56-0.1,1.13,0,1.84,0.4,1.21,0.6,1.55,1.4,1.54,2.4-0.02,1.4-1.42,3.1-2.44,4.9-0.91,1.6-2.25,3.2-2.53,4.8-0.22,1.3-0.2,2.6,0.67,3.7,0.29,0.4,0.6,0.7,0.95,0.9,1.57,0.8,3.12-0.8,4.61-2.2,1.33-1.3,2.62-3.4,3.84-4.1,1.14-0.7,2.23-0.8,3.24,0.8,0.26,0.4,0.43,0.7,0.53,1.1,0.46,1.9-0.95,2.6-2.75,3.7-1.48,0.8-3.22,1.3-4.41,2.5-1.02,1-1.63,2-1.36,3.7,0.04,0.3,0.11,0.5,0.19,0.7,0.61,1.9,2.25,2.1,4.17,2.4,1.72,0.2,3.66-0.3,5.3-0.1,2.15,0.1,3.77,0.3,3.62,2.4-0.02,0.2-0.05,0.4-0.09,0.6-0.4,1.9-1.75,2-3.52,1.6-1.46-0.4-3.2-1.6-4.94-2.4-1.79-0.7-3.59-1.9-5.05-1.9-1.29,0-2.33,0.3-2.91,1.6-0.22,0.5-0.33,0.9-0.33,1.4-0.03,1.7,1.17,2.7,2.67,4,1.39,1.1,3.04,1.7,4.22,2.8,1.54,1.3,2.25,2.3,0.47,4" stroke="#212121" stroke-miterlimit="4" stroke-width="3.10357141" fill="#f8ae00"/>
</g>
</g>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2364.5758955000006" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2364.5758955000006" x="10">補間を利用して不規則な形状のグラデーションぽく見せる</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2361.4846165000004" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2361.4846165000004" x="10">補間を利用して不規則な形状のグラデーションぽく見せる</tspan>
</text>
- <rect id="d0e368" display="none" height="1000px" width="288" y="2369.8" x="10"/>
+ <rect id="d0e368" display="none" height="1000px" width="288" y="2366.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e368"/>
</flowRegion>
- <flowDiv xml:space="preserve">Inkscape では (まだ) 線形 (直線) および放射状 (円状) 以外のグラデーションを作成できません。しかし、補間エフェクトとスタイルの補間を利用してそれっぽく見せることができます。簡単な例を以下に示します — 異なるストロークの 2 つの線を描きます:</flowDiv>
+ <flowDiv xml:space="preserve">Inkscape では (まだ) 線形 (直線) および放射状 (円状) 以外のグラデーションを作成できません。しかし、補間エクステンションとスタイルの補間を利用してそれっぽく見せることができます。簡単な例を以下に示します — 異なるストロークの 2 つの線を描きます:</flowDiv>
</flowRoot>
- <g id="interpolate-f19-ja.svgg2846" transform="translate(10, 2427.9190825000005) translate(-17.25,-19.612183)">
+ <g id="interpolate-f19-ja.svgg2846" transform="translate(10, 2426.1815805) translate(-17.25,-19.612183)">
<path id="interpolate-f19-ja.svgpath2180" stroke-linejoin="miter" style="stroke-dasharray:none;" d="M20,132.36l75-32.855,85.71,33.575,77.15-32.86" stroke="#35b8ff" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="5.5" fill="none"/>
<path id="interpolate-f19-ja.svgpath3007" stroke-linejoin="miter" style="stroke-dasharray:none;" d="M20,55.219l75-32.857,85.71,33.572,77.15-32.858" stroke="#ffed35" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="5.5" fill="none"/>
</g>
- <rect id="d0e381" display="none" height="1000px" width="288" y="2556.1" x="10"/>
+ <rect id="d0e381" display="none" height="1000px" width="288" y="2554.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e381"/>
</flowRegion>
<flowDiv xml:space="preserve">そしてそれらの線の間を補間すると、グラデーションのようになります:</flowDiv>
</flowRoot>
- <g id="interpolate-f20-ja.svgg2805" transform="translate(10, 2582.3208725000004) translate(-17.25,-19.612183)">
+ <g id="interpolate-f20-ja.svgg2805" transform="translate(10, 2580.5833705) translate(-17.25,-19.612183)">
<path id="interpolate-f20-ja.svgpath2180" stroke-linejoin="miter" style="stroke-dasharray:none;" d="M20,132.36l75-32.855,85.71,33.575,77.15-32.86" stroke="#35b8ff" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="5.5" fill="none"/>
<path id="interpolate-f20-ja.svgpath3007" stroke-linejoin="miter" style="stroke-dasharray:none;" d="M20,55.219l75-32.857,85.71,33.572,77.15-32.858" stroke="#ffed35" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="5.5" fill="none"/>
<g id="interpolate-f20-ja.svgg2785">
@@ -556,17 +556,17 @@ Ryan Lerch, ryanlerch at gmail dot com
<path id="interpolate-f20-ja.svgpath4962" stroke-linejoin="miter" style="stroke-dasharray:none;" d="M20,127.82s75-32.853,75-32.853,85.71,33.573,85.71,33.573,77.15-32.858,77.15-32.858" stroke="#40bbf3" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="5.5" fill="none"/>
</g>
</g>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2723.3351625000005" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2723.3351625000005" x="10">最後に</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2721.5976605" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2721.5976605" x="10">最後に</tspan>
</text>
- <rect id="d0e400" display="none" height="1000px" width="288" y="2728.5" x="10"/>
+ <rect id="d0e400" display="none" height="1000px" width="288" y="2726.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e400"/>
</flowRegion>
- <flowDiv xml:space="preserve">ここまで紹介したように、Inkscape の補間エフェクトは強力なツールです。このチュートリアルでは本エフェクトの基本的な部分にしか触れていませんが、自分で触ってみることこそが補間についてより深く知る最も良い手段となるでしょう。</flowDiv>
+ <flowDiv xml:space="preserve">ここまで紹介したように、Inkscape の補間エクステンションは強力なツールです。このチュートリアルでは本エクステンションの基本的な部分にしか触れていませんが、自分で触ってみることこそが補間についてより深く知る最も良い手段となるでしょう。</flowDiv>
</flowRoot>
- <g transform="translate(0, 2778.7564745000004)">
+ <g transform="translate(0, 2777.0189725)">
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
<linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.149642,0.000000,0.000000,0.465194,-0.130153,3495.428)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
<radialGradient id="radialGradient2456" xlink:href="#linearGradient666" gradientUnits="userSpaceOnUse" cy="1036.5" cx="233.92" gradientTransform="scale(1.825742,0.547723)" r="98.26" inkscape:collect="always"/>
diff --git a/share/tutorials/tutorial-tips.fr.svg b/share/tutorials/tutorial-tips.fr.svg
index e914c554e..5b887d405 100644
--- a/share/tutorials/tutorial-tips.fr.svg
+++ b/share/tutorials/tutorial-tips.fr.svg
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- DO NOT EDIT THIS FILE. It is produced automatically from a DocBook source (*.xml) by tutorial-svg.xsl. -->
<svg id="svg1" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="tutorial-basic.svg" xmlns:string="http://www.jclark.com/xt/java/java.lang.String" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:version="0.32" height="3170pt" width="256pt" version="1.1" xmlns:cc="http://web.resource.org/cc/" xmlns:xlink="http://www.w3.org/1999/xlink" inkscape:version="0.48" xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview id="base" inkscape:window-x="0" inkscape:window-y="0" snaptoguides="true" inkscape:zoom="2.0000000" inkscape:cx="160.00000" inkscape:cy="3864.0000" inkscape:window-width="780" showborder="false" inkscape:window-height="580" showguides="true"/>
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
@@ -50,38 +51,38 @@
<use id="use1901" opacity="0.0786517" style="marker-end:none;color:black;marker-start:none;marker-mid:none;" fill-rule="nonzero" xlink:href="#text1896" transform="matrix(3.16792,0,0,3.16792,-274.0839,-31.03953)" height="1052.3622" width="320" y="0" x="0" fill="black"/>
</g>
<text id="text1920" style="writing-mode:lr-tb;text-anchor:start;" font-family="sans" font-size="7.0000000" font-style="normal" transform="scale(1.130730,1.130730)" font-stretch="normal" font-variant="normal" y="18.25828" x="176.24451" font-weight="normal" fill="#ffffff">
- <tspan id="tspan1668" style="letter-spacing:2.1813099;" dx="0 -0.57057059 0 0 0 0 0" fill="#ffffff">::TRUCS ET ASTUCES</tspan>
+ <tspan id="tspan1668" style="letter-spacing:2.1813099;" dx="0 -0.57057059 0 0 0 0 0" fill="#ffffff">::</tspan>
</text>
- <rect id="d0e10" display="none" height="1000px" width="264" y="36" x="35"/>
+ <rect id="d0e12" display="none" height="1000px" width="264" y="36" x="35"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;" font-family="sans" font-size="7.2" line-height="150%" font-weight="normal" font-style="italic" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e10"/>
+ <use y="0" x="0" xlink:href="#d0e12"/>
</flowRegion>
- <flowDiv xml:space="preserve">Ce didacticiel est là pour vous montrer divers trucs et astuces trouvés par des utilisateurs au cours de leur utilisation d'Inkscape, ainsi que quelques fonctionalités cachées qui peuvent vous aider à accélérer votre production.</flowDiv>
+ <flowDiv xml:space="preserve">Ce didacticiel est là pour vous montrer divers trucs et astuces trouvés par des utilisateurs au cours de leur utilisation d&apos;Inkscape, ainsi que quelques fonctionalités cachées qui peuvent vous aider à accélérer votre production.</flowDiv>
</flowRoot>
<text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="100.456248" x="10" font-family="sans" font-style="normal" fill="#000000">
<tspan y="100.456248" x="10">Disposition radiale grâce au pavage de clones</tspan>
</text>
- <rect id="d0e19" display="none" height="1000px" width="288" y="105.66" x="10"/>
+ <rect id="d0e21" display="none" height="1000px" width="288" y="105.66" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e19"/>
+ <use y="0" x="0" xlink:href="#d0e21"/>
</flowRegion>
- <flowDiv xml:space="preserve">Il est facile de comprendre comment se servir de la boîte de dialogue <flowSpan font-family="sans serif">Paver avec des clones</flowSpan> pour créer des motifs ou des grilles rectangulaires. Mais que faire si vous voulez un placement <flowSpan font-style="italic">radial</flowSpan>, où les objets partagent un même centre de rotation ? C'est possible aussi !</flowDiv>
+ <flowDiv xml:space="preserve">Il est facile de comprendre comment se servir de la boîte de dialogue <flowSpan font-family="sans serif">Paver avec des clones</flowSpan> pour créer des motifs ou des grilles rectangulaires. Mais que faire si vous voulez un placement <flowSpan font-style="italic">radial</flowSpan>, où les objets partagent un même centre de rotation ? C&apos;est possible aussi !</flowDiv>
</flowRoot>
- <rect id="d0e28" display="none" height="1000px" width="288" y="164.73" x="10"/>
+ <rect id="d0e30" display="none" height="1000px" width="288" y="164.73" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e28"/>
+ <use y="0" x="0" xlink:href="#d0e30"/>
</flowRegion>
<flowDiv xml:space="preserve">Si votre motif radial ne doit comporter que 3, 4, 6, 8, ou 12 éléments, vous pouvez alors essayer les symétries P3, P31M, P3M1, P4, P4M, P6, ou P6M. Celles-ci offrent de bons résultats pour obtenir des flocons ou des formes similaires. Voici une méthode plus générale :</flowDiv>
</flowRoot>
- <rect id="d0e31" display="none" height="1000px" width="288" y="214.82" x="10"/>
+ <rect id="d0e33" display="none" height="1000px" width="288" y="214.82" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e31"/>
+ <use y="0" x="0" xlink:href="#d0e33"/>
</flowRegion>
- <flowDiv xml:space="preserve">Choisissez la symétrie P1 (translation) puis <flowSpan font-style="italic">compensez</flowSpan> cette translation en allant dans l'onglet <flowSpan font-family="sans serif">Translation</flowSpan> et définissez <flowSpan font-family="sans serif">Par ligne/Translation Y</flowSpan> et <flowSpan font-family="sans serif">Parr colonne/Translation X</flowSpan> à -100%. Les clones seront alors empilés juste au-dessus de l'original. Tout ce qu'il reste à faire est d'aller dans l'onglet <flowSpan font-family="sans serif">Rotation</flowSpan> et définir un angle par colonne, puis créer le motif avec une ligne et plusieurs colonnes. Par exemple, voici un motif fait d'une ligne horizontale et de 30 colonnes, chacune de ces colonnes étant tournée de 6 degrés :</flowDiv>
+ <flowDiv xml:space="preserve">Choisissez la symétrie P1 (translation) puis <flowSpan font-style="italic">compensez</flowSpan> cette translation en allant dans l&apos;onglet <flowSpan font-family="sans serif">Translation</flowSpan> et définissez <flowSpan font-family="sans serif">Par ligne/Translation Y</flowSpan> et <flowSpan font-family="sans serif">Parr colonne/Translation X</flowSpan> à -100%. Les clones seront alors empilés juste au-dessus de l&apos;original. Tout ce qu&apos;il reste à faire est d&apos;aller dans l&apos;onglet <flowSpan font-family="sans serif">Rotation</flowSpan> et définir un angle par colonne, puis créer le motif avec une ligne et plusieurs colonnes. Par exemple, voici un motif fait d&apos;une ligne horizontale et de 30 colonnes, chacune de ces colonnes étant tournée de 6 degrés :</flowDiv>
</flowRoot>
<path id="tips-f01-fr.svgpath25" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" d="M81.5,58.9h117.5" inkscape:tile-w="117.80000" transform="translate(10, 315.479536) " stroke-dashoffset="0.0000000" stroke="#000" stroke-linecap="butt" inkscape:tile-h="0.30000001" stroke-miterlimit="4.0000000" inkscape:tile-cx="160.25000" inkscape:tile-cy="346.50000" stroke-width="0.30000001" fill="none"/>
<use id="tips-f01-fr.svguse55" xlink:href="#tips-f01-fr.svgpath25" transform="translate(10, 315.479536) matrix(0.994522,0.104528,-0.104528,0.994522,6.925170,-14.33743) translate(-10, -315.479536)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
@@ -113,19 +114,19 @@
<use id="tips-f01-fr.svguse81" xlink:href="#tips-f01-fr.svgpath25" transform="translate(10, 315.479536) matrix(-0.951057,0.309017,-0.309017,-0.951057,291.8368,71.57745) translate(-10, -315.479536)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
<use id="tips-f01-fr.svguse82" xlink:href="#tips-f01-fr.svgpath25" transform="translate(10, 315.479536) matrix(-0.978148,0.207912,-0.207912,-0.978148,289.6811,87.35318) translate(-10, -315.479536)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
<use id="tips-f01-fr.svguse83" xlink:href="#tips-f01-fr.svgpath25" transform="translate(10, 315.479536) matrix(-0.994522,0.104528,-0.104528,-0.994522,285.8885,102.8173) translate(-10, -315.479536)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <rect id="d0e59" display="none" height="1000px" width="288" y="445.28" x="10"/>
+ <rect id="d0e61" display="none" height="1000px" width="288" y="445.28" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e59"/>
+ <use y="0" x="0" xlink:href="#d0e61"/>
</flowRegion>
- <flowDiv xml:space="preserve">Pour en faire un cadran, il suffit de découper ce motif ou recouvrir sa partie par un disque blanc (pour effectuer des opérations booléennes sur des clones, déliez-les d'abord)</flowDiv>
+ <flowDiv xml:space="preserve">Pour en faire un cadran, il suffit de découper ce motif ou recouvrir sa partie par un disque blanc (pour effectuer des opérations booléennes sur des clones, déliez-les d&apos;abord)</flowDiv>
</flowRoot>
- <rect id="d0e62" display="none" height="1000px" width="288" y="484.2" x="10"/>
+ <rect id="d0e64" display="none" height="1000px" width="288" y="484.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e62"/>
+ <use y="0" x="0" xlink:href="#d0e64"/>
</flowRegion>
- <flowDiv xml:space="preserve">Des effets plus intéressants peuvent créés en utilisant à la fois les lignes et les colonnes. Voici un motif de 10 colonnes et 8 lignes, avec une rotation de 2 degrés par lignes et 18 par colonne. Chaque groupe de segments ici est "une colonne", donc les groupes sont séparés entre eux de 18 degrés; en sein de chaque "colonne", les segments sont séparés de 2 degrés :</flowDiv>
+ <flowDiv xml:space="preserve">Des effets plus intéressants peuvent créés en utilisant à la fois les lignes et les colonnes. Voici un motif de 10 colonnes et 8 lignes, avec une rotation de 2 degrés par lignes et 18 par colonne. Chaque groupe de segments ici est &quot;une colonne&quot;, donc les groupes sont séparés entre eux de 18 degrés; en sein de chaque &quot;colonne&quot;, les segments sont séparés de 2 degrés :</flowDiv>
</flowRoot>
<path id="tips-f02-fr.svgpath92" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" d="M72.5,71.65h143" inkscape:tile-w="143.30000" transform="translate(10, 563.57985) " stroke-dashoffset="0.0000000" stroke="#000" stroke-linecap="butt" inkscape:tile-h="0.30000001" stroke-miterlimit="4.0000000" inkscape:tile-cx="164.00000" inkscape:tile-cy="543.50000" stroke-width="0.30000001" fill="none"/>
<use id="tips-f02-fr.svguse1473" xlink:href="#tips-f02-fr.svgpath92" transform="translate(10, 563.57985) matrix(0.999657,2.617695e-2,-2.617695e-2,0.999657,1.924910,-3.745086) translate(-10, -563.57985)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
@@ -207,12 +208,12 @@
<use id="tips-f02-fr.svguse1549" xlink:href="#tips-f02-fr.svgpath92" transform="translate(10, 563.57985) matrix(-0.983255,0.182236,-0.182236,-0.983255,298.6455,115.8555) translate(-10, -563.57985)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
<use id="tips-f02-fr.svguse1550" xlink:href="#tips-f02-fr.svgpath92" transform="translate(10, 563.57985) matrix(-0.987688,0.156434,-0.156434,-0.987688,297.4360,119.8908) translate(-10, -563.57985)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
<use id="tips-f02-fr.svguse1551" xlink:href="#tips-f02-fr.svgpath92" transform="translate(10, 563.57985) matrix(-0.991445,0.130526,-0.130526,-0.991445,296.1201,123.8925) translate(-10, -563.57985)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <rect id="d0e75" display="none" height="1000px" width="288" y="718.88" x="10"/>
+ <rect id="d0e77" display="none" height="1000px" width="288" y="718.88" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e75"/>
+ <use y="0" x="0" xlink:href="#d0e77"/>
</flowRegion>
- <flowDiv xml:space="preserve">Dans les exemples ci-dessus, le segment a été tourné autour de son centre. Et au cas où vous voudriez que le centre soit en-dehors de votre forme ? Il suffit de créer un rectangle invisible (sans remplissage ni contour) recouvrant votre forme et dont le centre est à l'emplacement désiré; groupez la forme et le rectangle puis utilisez <flowSpan font-family="sans serif">Paver avec des clones</flowSpan> sur ce groupe. Vous pouvez maintenant créer des belles "explosions" ou "éclaboussures" en rendant aléatoire le redimensionnement, la rotation ou l'opacité :</flowDiv>
+ <flowDiv xml:space="preserve">Dans les exemples ci-dessus, le segment a été tourné autour de son centre. Et au cas où vous voudriez que le centre soit en-dehors de votre forme ? Il suffit de créer un rectangle invisible (sans remplissage ni contour) recouvrant votre forme et dont le centre est à l&apos;emplacement désiré; groupez la forme et le rectangle puis utilisez <flowSpan font-family="sans serif">Paver avec des clones</flowSpan> sur ce groupe. Vous pouvez maintenant créer des belles &quot;explosions&quot; ou &quot;éclaboussures&quot; en rendant aléatoire le redimensionnement, la rotation ou l&apos;opacité :</flowDiv>
</flowRoot>
<g id="tips-f03-fr.svgg1768" inkscape:tile-w="87.999840" transform="translate(10, 819.422353) matrix(0.637680,0.000000,0.000000,0.637680,37.60870,-470.9209)" inkscape:tile-h="7.3333200" inkscape:tile-cx="158.99982" inkscape:tile-cy="859.24904">
<path id="tips-f03-fr.svgpath1592" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" fill-rule="evenodd" fill="#000" d="M210.17,859.92c4.54-2.08,15.81-3.8,15.81-0.12,0,3.67-15.81,0.12-15.81,0.12z"/>
@@ -290,46 +291,45 @@
<use id="tips-f03-fr.svguse5896" xlink:href="#tips-f03-fr.svgg1768" transform="translate(10, 819.422353) matrix(1.521722,-0.574611,0.574611,1.521722,-116.7675,39.69527) translate(-10, -819.422353)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
<use id="tips-f03-fr.svguse5897" xlink:href="#tips-f03-fr.svgg1768" transform="translate(10, 819.422353) matrix(0.546248,-0.904563,0.904563,0.546248,-6.585200,160.6755) translate(-10, -819.422353)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
<text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="998.233113" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="998.233113" x="10">Trancher plusieurs zones d'export rectangulaires</tspan>
+ <tspan y="998.233113" x="10">Trancher plusieurs zones d&apos;export rectangulaires</tspan>
</text>
- <rect id="d0e97" display="none" height="1000px" width="288" y="1003.4" x="10"/>
+ <rect id="d0e99" display="none" height="1000px" width="288" y="1003.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e97"/>
+ <use y="0" x="0" xlink:href="#d0e99"/>
</flowRegion>
- <flowDiv xml:space="preserve">Créez un nouveau calque, et dans ce calque, créez des rectangles invisibles recouvrant des parties de votre image. Assurez-vous que votre document adopte le px (défini par défaut) comme unité, affichez la grille et faites coller les rectangles à cette grille de sorte que chacun d'entre-eux comporte un nombre entier de px. Assignez des ids significatifs aux rectangles, et exportez chacun d'entre-eux dans un fichier différent (chacun des rectangles se "souviendra" ainsi de son nom de fichier d'export). Après cela, il est facile de réexporter certains de ces rectangles : passez dans le calque d'export, utilisez Tab pour sélectionner celui dont vous avez besoin (ou utilisez une Recherche par id), et enfin cliquez sur Exporter dans la boîte de dialogue Exporter en bitmap. Vous pouvez aussi écrire un script shell (ou un fichier batch) pour exporter ces zones avec une commande telle que :</flowDiv>
+ <flowDiv xml:space="preserve">Créez un nouveau calque, et dans ce calque, créez des rectangles invisibles recouvrant des parties de votre image. Assurez-vous que votre document adopte le px (défini par défaut) comme unité, affichez la grille et faites coller les rectangles à cette grille de sorte que chacun d&apos;entre-eux comporte un nombre entier de px. Assignez des ids significatifs aux rectangles, et exportez chacun d&apos;entre-eux dans un fichier différent (<flowSpan font-family="sans serif">Fichier &gt; Exporter le Bitmap</flowSpan> (<flowSpan font-weight="bold">Maj+Ctrl+E</flowSpan>)). Chacun des rectangles se &quot;souviendra&quot; ainsi de son nom de fichier d&apos;export. Après cela, il est facile de réexporter certains de ces rectangles : passez dans le calque d&apos;export, utilisez Tab pour sélectionner celui dont vous avez besoin (ou utilisez une Recherche par id), et enfin cliquez sur Exporter dans la boîte de dialogue Exporter en bitmap. Vous pouvez aussi écrire un script shell (ou un fichier batch) pour exporter ces zones avec une commande telle que :</flowDiv>
</flowRoot>
- <rect id="d0e100" display="none" height="1000px" width="288" y="1159.8" x="10"/>
+ <rect id="d0e108" display="none" height="1000px" width="288" y="1159.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e100"/>
+ <use y="0" x="0" xlink:href="#d0e108"/>
</flowRegion>
- <flowDiv xml:space="preserve">inkscape -i area-id -t filename.svg
-</flowDiv>
+ <flowDiv xml:space="preserve">inkscape -i area-id -t nomdefichier.svg</flowDiv>
</flowRoot>
- <rect id="d0e103" display="none" height="1000px" width="288" y="1177.7" x="10"/>
+ <rect id="d0e111" display="none" height="1000px" width="288" y="1177.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e103"/>
+ <use y="0" x="0" xlink:href="#d0e111"/>
</flowRegion>
- <flowDiv xml:space="preserve">pour chaque zone. L'option -t rappelle à Inkscape d'utiliser le nomdefichier enregistré avec la zone; sinon vous pouvez fournir un autre nom pour l'export avec l'option -e. Une autre possibilité est d'utiliser l'outil <flowSpan font-weight="bold" font-family="sans serif">svgslice</flowSpan> permettant d'automatiser l'export depuis des documents SVG Inkscape, en utilisant au choix des guides ou un calque de découpage.</flowDiv>
+ <flowDiv xml:space="preserve">pour chaque zone. L&apos;option -t rappelle à Inkscape d&apos;utiliser le nomdefichier enregistré avec la zone; sinon vous pouvez fournir un autre nom pour l&apos;export avec l&apos;option -e. Une autre possibilité est d&apos;utiliser l&apos;outil <flowSpan font-weight="bold" font-family="sans serif">svgslice</flowSpan> permettant d&apos;automatiser l&apos;export depuis des documents SVG Inkscape, en utilisant au choix des guides ou un calque de découpage.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1261.8390617999999" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1261.8390617999999" x="10">Dégradés non-linéaires</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1261.8587618" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1261.8587618" x="10">Dégradés non-linéaires</tspan>
</text>
- <rect id="d0e115" display="none" height="1000px" width="288" y="1267" x="10"/>
+ <rect id="d0e123" display="none" height="1000px" width="288" y="1267.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e115"/>
+ <use y="0" x="0" xlink:href="#d0e123"/>
</flowRegion>
- <flowDiv xml:space="preserve">La version 1.1 du SVG ne supporte pas les dégradés non-linéaires (c'est à dire ayant des transitions non linéaires entre les couleurs). Vous pouvez cependant les émuler grâce à des dégradés <flowSpan font-style="italic">multi-stops</flowSpan>.</flowDiv>
+ <flowDiv xml:space="preserve">La version 1.1 du SVG ne supporte pas les dégradés non-linéaires (c&apos;est à dire ayant des transitions non linéaires entre les couleurs). Vous pouvez cependant les émuler grâce à des dégradés <flowSpan font-style="italic">multi-stops</flowSpan>.</flowDiv>
</flowRoot>
- <rect id="d0e121" display="none" height="1000px" width="288" y="1306.5" x="10"/>
+ <rect id="d0e129" display="none" height="1000px" width="288" y="1306.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e121"/>
+ <use y="0" x="0" xlink:href="#d0e129"/>
</flowRegion>
- <flowDiv xml:space="preserve">Commencez par créer un dégradé avec deux stops, et ouvrez l'éditeur de dégradés (par exemple, en double-cliquant sur une poignée du dégradé dans l'outil dégradé). Ajoutez un nouveau stop au milieu du dégradé, et déplacez-le légèrement. Puis, ajoutez d'autres stops de part et d'autre celui du milieu et déplacez-les aussi de sorte que le dégradé soit régulier. Plus vous ajoutez de stops, plus vous pouvez rendre le dégradé résultant régulier. Voici le dégradé initial avec deux stops (noir et blanc) :</flowDiv>
+ <flowDiv xml:space="preserve">Commencez par créer un dégradé avec deux stops, et ouvrez l&apos;éditeur de dégradés (par exemple, en double-cliquant sur une poignée du dégradé dans l&apos;outil dégradé). Ajoutez un nouveau stop au milieu du dégradé, et déplacez-le légèrement. Puis, ajoutez d&apos;autres stops de part et d&apos;autre celui du milieu et déplacez-les aussi de sorte que le dégradé soit régulier. Plus vous ajoutez de stops, plus vous pouvez rendre le dégradé résultant régulier. Voici le dégradé initial avec deux stops (noir et blanc) :</flowDiv>
</flowRoot>
<defs id="tips-f04-fr.svgdefs3">
<linearGradient id="tips-f04-fr.svglinearGradient844" y2="-5.6264" gradientUnits="userSpaceOnUse" x2="-753.98" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,178.9029,1.615078e-15)" y1="-71.602" x1="-753.98">
@@ -337,13 +337,13 @@
<stop id="tips-f04-fr.svgstop843" stop-color="#FFF" offset="1"/>
</linearGradient>
</defs>
- <rect id="tips-f04-fr.svgrect1511" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1407.0373467999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-16.125" fill="url(#tips-f04-fr.svglinearGradient844)"/>
- <rect id="d0e134" display="none" height="1000px" width="288" y="1435.2" x="10"/>
+ <rect id="tips-f04-fr.svgrect1511" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1407.0570467999999) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-16.125" fill="url(#tips-f04-fr.svglinearGradient844)"/>
+ <rect id="d0e142" display="none" height="1000px" width="288" y="1435.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e134"/>
+ <use y="0" x="0" xlink:href="#d0e142"/>
</flowRegion>
- <flowDiv xml:space="preserve">Et voici quelques dégradés multi-stops non-linéaires (examinez-les dans l'éditeur de dégradés) :</flowDiv>
+ <flowDiv xml:space="preserve">Et voici quelques dégradés multi-stops non-linéaires (examinez-les dans l&apos;éditeur de dégradés) :</flowDiv>
</flowRoot>
<defs id="tips-f05-fr.svgdefs3">
<linearGradient id="tips-f05-fr.svglinearGradient3979" y2="-4.5118" gradientUnits="userSpaceOnUse" x2="-1484.6" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,241.3779,2.179081e-15)" y1="-72.469" x1="-1484.6" inkscape:collect="always">
@@ -426,23 +426,23 @@
<stop id="tips-f05-fr.svgstop3630" stop-color="#fff" offset="1"/>
</linearGradient>
</defs>
- <rect id="tips-f05-fr.svgrect3632" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1471.9777817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-79.393" fill="url(#tips-f05-fr.svglinearGradient4000)"/>
- <rect id="tips-f05-fr.svgrect836" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1471.9777817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-63.336" fill="url(#tips-f05-fr.svglinearGradient3997)"/>
- <rect id="tips-f05-fr.svgrect847" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1471.9777817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-47.28" fill="url(#tips-f05-fr.svglinearGradient3994)"/>
- <rect id="tips-f05-fr.svgrect858" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1471.9777817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-95.45" fill="url(#tips-f05-fr.svglinearGradient3991)"/>
- <rect id="tips-f05-fr.svgrect869" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1471.9777817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-111.51" fill="url(#tips-f05-fr.svglinearGradient3988)"/>
- <rect id="tips-f05-fr.svgrect879" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1471.9777817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-31.223" fill="url(#tips-f05-fr.svglinearGradient3985)"/>
- <rect id="tips-f05-fr.svgrect890" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1471.9777817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-15.167" fill="url(#tips-f05-fr.svglinearGradient3982)"/>
- <rect id="tips-f05-fr.svgrect901" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1471.9777817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-127.56" fill="url(#tips-f05-fr.svglinearGradient3979)"/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1625.2986817999997" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1625.2986817999997" x="10">Dégradés radiaux excentriques</tspan>
+ <rect id="tips-f05-fr.svgrect3632" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1471.9974817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-79.393" fill="url(#tips-f05-fr.svglinearGradient4000)"/>
+ <rect id="tips-f05-fr.svgrect836" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1471.9974817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-63.336" fill="url(#tips-f05-fr.svglinearGradient3997)"/>
+ <rect id="tips-f05-fr.svgrect847" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1471.9974817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-47.28" fill="url(#tips-f05-fr.svglinearGradient3994)"/>
+ <rect id="tips-f05-fr.svgrect858" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1471.9974817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-95.45" fill="url(#tips-f05-fr.svglinearGradient3991)"/>
+ <rect id="tips-f05-fr.svgrect869" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1471.9974817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-111.51" fill="url(#tips-f05-fr.svglinearGradient3988)"/>
+ <rect id="tips-f05-fr.svgrect879" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1471.9974817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-31.223" fill="url(#tips-f05-fr.svglinearGradient3985)"/>
+ <rect id="tips-f05-fr.svgrect890" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1471.9974817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-15.167" fill="url(#tips-f05-fr.svglinearGradient3982)"/>
+ <rect id="tips-f05-fr.svgrect901" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1471.9974817999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-127.56" fill="url(#tips-f05-fr.svglinearGradient3979)"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1625.3183817999998" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1625.3183817999998" x="10">Dégradés radiaux excentriques</tspan>
</text>
- <rect id="d0e153" display="none" height="1000px" width="288" y="1630.5" x="10"/>
+ <rect id="d0e161" display="none" height="1000px" width="288" y="1630.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e153"/>
+ <use y="0" x="0" xlink:href="#d0e161"/>
</flowRegion>
- <flowDiv xml:space="preserve">Les dégradés radiaux ne sont pas nécessairement symétriques. Dans l'outil dégradés, déplacez la poignée centrale d'un dégradé elliptique tout en appuyant sur <flowSpan font-weight="bold">Maj</flowSpan>. Cela vous permettra de déplacer la <flowSpan font-style="italic">poignée du foyer</flowSpan> (en forme de "x") du dégradé et de la séparer du centre. Si vous n'en avez plus besoin, vous pouvez redéplacer la poignée de foyer près du centre.</flowDiv>
+ <flowDiv xml:space="preserve">Les dégradés radiaux ne sont pas nécessairement symétriques. Dans l&apos;outil dégradés, déplacez la poignée centrale d&apos;un dégradé elliptique tout en appuyant sur <flowSpan font-weight="bold">Maj</flowSpan>. Cela vous permettra de déplacer la <flowSpan font-style="italic">poignée du foyer</flowSpan> (en forme de &quot;x&quot;) du dégradé et de la séparer du centre. Si vous n&apos;en avez plus besoin, vous pouvez redéplacer la poignée de foyer près du centre.</flowDiv>
</flowRoot>
<defs id="tips-f06-fr.svgdefs3">
<radialGradient id="tips-f06-fr.svgradialGradient4031" gradientUnits="userSpaceOnUse" fx="164.26" fy="495.96" cx="187.87" cy="494.13" r="40.258" gradientTransform="matrix(0.930312,0.000000,0.000000,0.853811,16.07898,-387.2360)" inkscape:collect="always">
@@ -454,240 +454,209 @@
<stop id="tips-f06-fr.svgstop1079" stop-color="#000" stop-opacity="0" offset="1"/>
</radialGradient>
</defs>
- <rect id="tips-f06-fr.svgrect1569" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1709.8941747999997) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="70.82" stroke-width="0.89427pt" fill="url(#tips-f06-fr.svgradialGradient4034)"/>
- <rect id="tips-f06-fr.svgrect1570" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1709.8941747999997) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="153.67" stroke-width="0.89427pt" fill="url(#tips-f06-fr.svgradialGradient4031)"/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1803.9986337999997" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1803.9986337999997" x="10">Alignement au centre de la page</tspan>
+ <rect id="tips-f06-fr.svgrect1569" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1709.9138747999998) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="70.82" stroke-width="0.89427pt" fill="url(#tips-f06-fr.svgradialGradient4034)"/>
+ <rect id="tips-f06-fr.svgrect1570" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1709.9138747999998) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="153.67" stroke-width="0.89427pt" fill="url(#tips-f06-fr.svgradialGradient4031)"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1804.0183337999997" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1804.0183337999997" x="10">Alignement au centre de la page</tspan>
</text>
- <rect id="d0e178" display="none" height="1000px" width="288" y="1809.2" x="10"/>
+ <rect id="d0e186" display="none" height="1000px" width="288" y="1809.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e178"/>
+ <use y="0" x="0" xlink:href="#d0e186"/>
</flowRegion>
- <flowDiv xml:space="preserve">Pour aligner quelquechose au centre ou le long d'un côté de la page, sélectionnez l'objet ou le groupe à aligner puis ouvrez la boîte de dialogue Aligner et distribuer (<flowSpan font-weight="bold">Ctrl+Shift+A</flowSpan>). Vous pouvez alors choisir la <flowSpan font-family="sans serif">page</flowSpan> dans la liste <flowSpan font-family="sans serif">relativement à</flowSpan> et enfin aligner votre sélection comme vous le désirez.</flowDiv>
+ <flowDiv xml:space="preserve">Pour aligner quelque-chose au centre ou le long d&apos;un côté de la page, sélectionnez l&apos;objet ou le groupe à aligner puis ouvrez la boîte de dialogue Aligner et distribuer (<flowSpan font-weight="bold">Maj+Ctrl+A</flowSpan>). Vous pouvez alors choisir la <flowSpan font-family="sans serif">page</flowSpan> dans la liste <flowSpan font-family="sans serif">relativement à</flowSpan> et enfin aligner votre sélection comme vous le désirez.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1881.0900647999997" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1881.0900647999997" x="10">Nettoyage du document</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1881.1097647999998" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1881.1097647999998" x="10">Nettoyage du document</tspan>
</text>
- <rect id="d0e196" display="none" height="1000px" width="288" y="1886.3" x="10"/>
+ <rect id="d0e204" display="none" height="1000px" width="288" y="1886.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e196"/>
+ <use y="0" x="0" xlink:href="#d0e204"/>
</flowRegion>
- <flowDiv xml:space="preserve">Quand ils ne sont plus utilisés, beaucoup de dégradés, motifs et marqueurs (plus précisément, ceux que vous avez édité manuellement) restent dans les palettes correspondantes et peuvent être utilisés dans de nouveaux objets. Cependant, si vous voulez optimiser votre document, utilisez la commande <flowSpan font-family="sans serif">Nettoyer les Defs</flowSpan> du menu Fichier. Elle supprimera tout dégradé, motif ou marqueur qui n'est plus utilisé par aucun objet du document, réduisant ainsi la taille du fichier.</flowDiv>
+ <flowDiv xml:space="preserve">Quand ils ne sont plus utilisés, beaucoup de dégradés, motifs et marqueurs (plus précisément, ceux que vous avez édité manuellement) restent dans les palettes correspondantes et peuvent être utilisés dans de nouveaux objets. Cependant, si vous voulez optimiser votre document, utilisez la commande <flowSpan font-family="sans serif">Nettoyer les Defs</flowSpan> du menu Fichier. Elle supprimera tout dégradé, motif ou marqueur qui n&apos;est plus utilisé par aucun objet du document, réduisant ainsi la taille du fichier.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1990.0817867999997" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1990.0817867999997" x="10">Massicotter ou masquer un bitmap</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1990.1014867999997" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1990.1014867999997" x="10">Fonctionnalités cachées et éditeur XML</tspan>
</text>
- <rect id="d0e208" display="none" height="1000px" width="288" y="1995.3" x="10"/>
+ <rect id="d0e216" display="none" height="1000px" width="288" y="1995.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e208"/>
+ <use y="0" x="0" xlink:href="#d0e216"/>
</flowRegion>
- <flowDiv xml:space="preserve">By default, an imported bitmap (e.g. a photo) is an image element which is not
-editable by the Node tool. To work around this, convert the image into a rectangle with
-pattern fill by <flowSpan font-family="sans serif">Object to Pattern</flowSpan> (<flowSpan font-weight="bold">Alt+I</flowSpan>). This will
-give you a rectangle <flowSpan font-style="italic">filled</flowSpan> with your bitmap. Now this object can
-be converted to path, node-edited, intersected with other shapes etc. In
-<flowSpan font-family="sans serif">Inkscape Preferences</flowSpan> (<flowSpan font-family="sans serif">Misc</flowSpan> tab), you can set the
-option of always importing bitmaps as pattern-filled rectangles.
-</flowDiv>
+ <flowDiv xml:space="preserve">L&apos;éditeur XML (<flowSpan font-weight="bold">Maj+Ctrl+X</flowSpan>) vous permet de modifier la plupart des aspects du document sans avoir à utiliser un éditeur de texte externe. De plus, Inkscape supporte souvent des fonctionnalités SVG pas encore accessibles depuis l&apos;interface graphique. L&apos;éditeur XML offre la possibilité d&apos;accéder à ces fonctionnalités (à condition de connaître le SVG)</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2089.8166808" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2089.8166808" x="10">Fonctionnalités cachées et éditeur XML</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2078.9460188" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2078.9460188" x="10">Changer l&apos;unité de mesure des règles</tspan>
</text>
- <rect id="d0e232" display="none" height="1000px" width="288" y="2095" x="10"/>
+ <rect id="d0e228" display="none" height="1000px" width="288" y="2084.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e232"/>
+ <use y="0" x="0" xlink:href="#d0e228"/>
</flowRegion>
- <flowDiv xml:space="preserve">The XML editor allows you to change almost all aspects of the document without using an
-external text editor. Also, Inkscape usually supports more SVG features than are
-accessible from the GUI. The XML editor is one way to get access to these features (if
-you know SVG).
-</flowDiv>
+ <flowDiv xml:space="preserve">Dans le patron (template) par défaut, l&apos;unité de mesure utilisée par les règles est le px (&quot;unité utilisateur SVG&quot;, égale à 0.8pt ou 1/90 de pouce dans Inkscape). C&apos;est aussi l&apos;unité utilisée pour l&apos;affichage des coordonnées dans le coin inférieur gauche, et celle présélectionnée dans les menus qui font intervenir des unités (vous pouvez déplacer votre souris au-dessus d&apos;une règle pour voir un indicateur affichant l&apos;unité utilisée). Pour modifier ceci, ouvrez les <flowSpan font-family="sans serif">Préférences du document</flowSpan> (<flowSpan font-weight="bold">Ctrl+Maj+D</flowSpan>) et changez les <flowSpan font-family="sans serif">Unités par défaut</flowSpan> dans l&apos;onglet <flowSpan font-family="sans serif">Page</flowSpan>.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2167.7009008" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2167.7009008" x="10">Changer l'unité de mesure des règles</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2200.2615167999998" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2200.2615167999998" x="10">Appliquer des coups de tampon</tspan>
</text>
- <rect id="d0e241" display="none" height="1000px" width="288" y="2172.9" x="10"/>
+ <rect id="d0e249" display="none" height="1000px" width="288" y="2205.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e241"/>
+ <use y="0" x="0" xlink:href="#d0e249"/>
</flowRegion>
- <flowDiv xml:space="preserve">Dans le patron (template) par défaut, l'unité de mesure utilisée par les règles est le px ("unité utilisateur SVG", égale à 0.8pt ou 1/90 de pouce dans Inkscape). C'est aussi l'unité utilisée pour l'affichage des coordonnées dans le coin inférieur gauche, et celle présélectionnée dans les menus qui font intervenir des unités (vous pouvez déplacer votre souris au-dessus d'une règle pour voir un indicateur affichant l'unité utilisée). Pour modifier ceci, ouvrez les <flowSpan font-family="sans serif">Préférences du document</flowSpan> (<flowSpan font-weight="bold">Ctrl+Maj+D</flowSpan>) et changez les <flowSpan font-family="sans serif">Unités par défaut</flowSpan> dans l'onglet <flowSpan font-family="sans serif">Page</flowSpan>.</flowDiv>
+ <flowDiv xml:space="preserve">Pour créer rapidement plusieurs copies d&apos;un objet, utilisez le <flowSpan font-style="italic">coup de tampon</flowSpan>. Déplacez simplement un objet (ou redimensionnez/tournez le) et, alors que le bouton de la souris est toujours pressé, appuyez sur <flowSpan font-weight="bold">Espace</flowSpan>. Ceci appose un &quot;tampon&quot; de l&apos;objet courant. Vous pouvez répéter ce coup de tampon autant de fois que vous le voulez.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2289.0163988" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2289.0163988" x="10">Appliquer des coups de tampon</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2278.9234428" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2278.9234428" x="10">Astuces du stylo</tspan>
</text>
- <rect id="d0e262" display="none" height="1000px" width="288" y="2294.2" x="10"/>
+ <rect id="d0e264" display="none" height="1000px" width="288" y="2284.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e262"/>
+ <use y="0" x="0" xlink:href="#d0e264"/>
</flowRegion>
- <flowDiv xml:space="preserve">Pour créer rapidement plusieurs copies d'un objet, utilisez le <flowSpan font-style="italic">coup de tampon</flowSpan>. Déplacez simplement un objet (ou redimensionnez/tournez le) et, alors que le bouton de la souris est toujours pressé, appuyez sur <flowSpan font-weight="bold">Espace</flowSpan>. Ceci appose un "tampon" de l'objet courant. Vous pouvez répéter ce coup de tampon autant de fois que vous le voulez.</flowDiv>
+ <flowDiv xml:space="preserve">Dans l&apos;outil courbes de Bézier (stylo), vous pouvez terminer la ligne courante de plusieurs façons :</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2367.6783248" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2367.6783248" x="10">Astuces du stylo</tspan>
- </text>
- <rect id="d0e277" display="none" height="1000px" width="288" y="2372.9" x="10"/>
- <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
- <flowRegion>
- <use y="0" x="0" xlink:href="#d0e277"/>
- </flowRegion>
- <flowDiv xml:space="preserve">Dans l'outil courbes de Bézier (stylo), vous pouvez terminer la ligne courante de plusieurs façons :</flowDiv>
- </flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2407.5808248)"/>
- <rect id="d0e283" display="none" height="1000px" width="258" y="2401.6" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2318.8259427999997)"/>
+ <rect id="d0e270" display="none" height="1000px" width="258" y="2312.8" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e283"/>
+ <use y="0" x="0" xlink:href="#d0e270"/>
</flowRegion>
<flowDiv xml:space="preserve">Appuyer sur <flowSpan font-weight="bold">Entrée</flowSpan>.</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2425.756606)"/>
- <rect id="d0e290" display="none" height="1000px" width="258" y="2419.8" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2337.0017239999997)"/>
+ <rect id="d0e277" display="none" height="1000px" width="258" y="2331" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e290"/>
+ <use y="0" x="0" xlink:href="#d0e277"/>
</flowRegion>
<flowDiv xml:space="preserve">Effectuer un double-clic avec le bouton gauche de la souris.</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2443.6120748)"/>
- <rect id="d0e294" display="none" height="1000px" width="258" y="2437.6" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2354.8571927999997)"/>
+ <rect id="d0e281" display="none" height="1000px" width="258" y="2348.9" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e294"/>
+ <use y="0" x="0" xlink:href="#d0e281"/>
</flowRegion>
<flowDiv xml:space="preserve">Sélectionner le stylo de nouveau.</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2461.787856)"/>
- <rect id="d0e298" display="none" height="1000px" width="258" y="2455.8" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2373.0329739999997)"/>
+ <rect id="d0e285" display="none" height="1000px" width="258" y="2367" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e298"/>
+ <use y="0" x="0" xlink:href="#d0e285"/>
</flowRegion>
<flowDiv xml:space="preserve">Sélectionner un autre outil.</flowDiv>
</flowRoot>
- <rect id="d0e302" display="none" height="1000px" width="288" y="2472.3" x="10"/>
+ <rect id="d0e289" display="none" height="1000px" width="288" y="2383.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e302"/>
+ <use y="0" x="0" xlink:href="#d0e289"/>
</flowRegion>
- <flowDiv xml:space="preserve">Notez que tant que le chemin n'est pas terminé (c'est à dire qu'il est affiché en vert, avec le segment courant en rouge), il n'existe pas encore en tant qu'objet dans le document. Pour l'annuler, vous pouvez donc utiliser les raccourcis <flowSpan font-weight="bold">Esc</flowSpan> (abandonner complètement le chemin) ou <flowSpan font-weight="bold">Backspace</flowSpan> (supprimer le dernier segment du chemin non terminé) à la place d'<flowSpan font-family="sans serif">Annuler</flowSpan>.</flowDiv>
+ <flowDiv xml:space="preserve">Notez que tant que le chemin n&apos;est pas terminé (c&apos;est à dire qu&apos;il est affiché en vert, avec le segment courant en rouge), il n&apos;existe pas encore en tant qu&apos;objet dans le document. Pour l&apos;annuler, vous pouvez donc utiliser les raccourcis <flowSpan font-weight="bold">Esc</flowSpan> (abandonner complètement le chemin) ou <flowSpan font-weight="bold">Backspace</flowSpan> (supprimer le dernier segment du chemin non terminé) à la place d&apos;<flowSpan font-family="sans serif">Annuler</flowSpan>.</flowDiv>
</flowRoot>
- <rect id="d0e314" display="none" height="1000px" width="288" y="2543.6" x="10"/>
+ <rect id="d0e301" display="none" height="1000px" width="288" y="2454.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e314"/>
+ <use y="0" x="0" xlink:href="#d0e301"/>
</flowRegion>
- <flowDiv xml:space="preserve">Pour ajouter un nouveau sous-chemin à un chemin existant, sélectionnez ce chemin et commencez à dessiner (d'où vous voulez) tout en appuyant sur <flowSpan font-weight="bold">Maj</flowSpan>. Cependant, si vous voulez simplement <flowSpan font-style="italic">prolonger</flowSpan> un chemin existant, Maj n'est pas nécessaire; commencez simplement à dessiner depuis l'une des ancres situées aux extrémités du chemin sélectionné.</flowDiv>
+ <flowDiv xml:space="preserve">Pour ajouter un nouveau sous-chemin à un chemin existant, sélectionnez ce chemin et commencez à dessiner (d&apos;où vous voulez) tout en appuyant sur <flowSpan font-weight="bold">Maj</flowSpan>. Cependant, si vous voulez simplement <flowSpan font-style="italic">prolonger</flowSpan> un chemin existant, Maj n&apos;est pas nécessaire; commencez simplement à dessiner depuis l&apos;une des ancres situées aux extrémités du chemin sélectionné.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2626.1251188" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2626.1251188" x="10">Entrer des valeurs Unicode</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2537.3702368" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2537.3702368" x="10">Entrer des valeurs Unicode</tspan>
</text>
- <rect id="d0e329" display="none" height="1000px" width="288" y="2631.3" x="10"/>
+ <rect id="d0e316" display="none" height="1000px" width="288" y="2542.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e329"/>
+ <use y="0" x="0" xlink:href="#d0e316"/>
</flowRegion>
- <flowDiv xml:space="preserve">Quand vous êtes dans l'outil texte, appuyer sur <flowSpan font-weight="bold">Ctrl+U</flowSpan> permet d'alterner les modes Normal et Unicode. En mode Unicode, chaque groupe de 4 chiffres hexadécimaux que vous tapez devient un caractère Unicode, vous permettant ainsi de taper les symboles que vous voulez (si vous connaissez leur numéro Unicode, et si la police les supporte). Pour valider un caractère Unicode, appuyez sur <flowSpan font-weight="bold">Entrée</flowSpan>. Par example, <flowSpan font-weight="bold">Ctrl+U 2 0 1 4 Entrée</flowSpan> insère un tiret long (—). Pour quitter le mode Unicode sans insérer quoi que ce soit, appuyez sur la touche <flowSpan font-weight="bold">Échap</flowSpan>.</flowDiv>
+ <flowDiv xml:space="preserve">Quand vous êtes dans l&apos;outil texte, appuyer sur <flowSpan font-weight="bold">Ctrl+U</flowSpan> permet d&apos;alterner les modes Normal et Unicode. En mode Unicode, chaque groupe de 4 chiffres hexadécimaux que vous tapez devient un caractère Unicode, vous permettant ainsi de taper les symboles que vous voulez (si vous connaissez leur numéro Unicode, et si la police les supporte). Pour valider un caractère Unicode, appuyez sur <flowSpan font-weight="bold">Entrée</flowSpan>. Par example, <flowSpan font-weight="bold">Ctrl+U 2 0 1 4 Entrée</flowSpan> insère un tiret long (—). Pour quitter le mode Unicode sans insérer quoi que ce soit, appuyez sur la touche <flowSpan font-weight="bold">Échap</flowSpan>.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2747.3667568" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2747.3667568" x="10">Utilisation de la grille pour dessiner des icônes</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2658.6118748" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2658.6118748" x="10">Utilisation de la grille pour dessiner des icônes</tspan>
</text>
- <rect id="d0e350" display="none" height="1000px" width="288" y="2752.6" x="10"/>
+ <rect id="d0e337" display="none" height="1000px" width="288" y="2663.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e350"/>
+ <use y="0" x="0" xlink:href="#d0e337"/>
</flowRegion>
- <flowDiv xml:space="preserve">Supposons que vous vouliez créer une icône de 24x24 pixels. Créez un canevas de 24x24 px (utilisez les <flowSpan font-family="sans serif">Préférences du document</flowSpan>)(notez que dans le menu Créer un nouveau document, vous pouvez accéder à une liste de modèles, dont certains d'icônes) et définissez une taille de grille de 0.5 px (une grille de 48x48, donc). Maintenant, si vous alignez les remplissages d'objets sur les lignes <flowSpan font-style="italic">paires</flowSpan> de grille et les contours sur les lignes <flowSpan font-style="italic">impaires</flowSpan>, avec un nombre pair (en px) comme largeur de contour, en exportant le document à la résolution par défaut de 90ppp (de sorte qu'1px corresponde à 1 pixel bitmap), vous obtiendrez une icône bitmap nette ne nécessitant pas d'anticrénelage.</flowDiv>
+ <flowDiv xml:space="preserve">Supposons que vous vouliez créer une icône de 24x24 pixels. Créez un canevas de 24x24 px (utilisez les <flowSpan font-family="sans serif">Préférences du document</flowSpan>)(notez que dans le menu Créer un nouveau document, vous pouvez accéder à une liste de modèles, dont certains d&apos;icônes) et définissez une taille de grille de 0.5 px (une grille de 48x48, donc). Maintenant, si vous alignez les remplissages d&apos;objets sur les lignes <flowSpan font-style="italic">paires</flowSpan> de grille et les contours sur les lignes <flowSpan font-style="italic">impaires</flowSpan>, avec un nombre pair (en px) comme largeur de contour, en exportant le document à la résolution par défaut de 90ppp (de sorte qu&apos;1px corresponde à 1 pixel bitmap), vous obtiendrez une icône bitmap nette ne nécessitant pas d&apos;anticrénelage.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2879.3025368" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2879.3025368" x="10">Rotation d'objets</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2790.5476547999997" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2790.5476547999997" x="10">Rotation d&apos;objets</tspan>
</text>
- <rect id="d0e368" display="none" height="1000px" width="288" y="2884.5" x="10"/>
- <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
- <flowRegion>
- <use y="0" x="0" xlink:href="#d0e368"/>
- </flowRegion>
- <flowDiv xml:space="preserve">Dans le sélecteur, <flowSpan font-weight="bold">cliquer</flowSpan> sur un objet permet d'afficher les flèches de redimensionnement, <flowSpan font-weight="bold">cliquer</flowSpan> une fois de plus sur cet objet permet d'afficher les flèches d'inclinaison et de rotation. Si vous déplacez les flèches des coins, l'objet tournera autour du centre (marqué d'une croix). Si vous appuyez sur <flowSpan font-weight="bold">Maj</flowSpan> pendant cette opération, le rotation se fera autour du coin opposé. Vous pouvez aussi déplacer le centre de rotation (la croix) où vous le désirez.</flowDiv>
- </flowRoot>
- <rect id="d0e380" display="none" height="1000px" width="288" y="2966" x="10"/>
+ <rect id="d0e355" display="none" height="1000px" width="288" y="2795.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e380"/>
+ <use y="0" x="0" xlink:href="#d0e355"/>
</flowRegion>
- <flowDiv xml:space="preserve">Ou bien tourner en utilisant les raccourcis clavier : <flowSpan font-weight="bold">[</flowSpan> et <flowSpan font-weight="bold">]</flowSpan> (de 15 degrés) ou <flowSpan font-weight="bold">Ctrl+[</flowSpan> et <flowSpan font-weight="bold">Ctrl+]</flowSpan> (de 90 degrés). Ces mêmes raccourcis <flowSpan font-weight="bold">[]</flowSpan> combinés avec <flowSpan font-weight="bold">Alt</flowSpan> permettent des rotations lentes à l'échelle du pixel.</flowDiv>
+ <flowDiv xml:space="preserve">Dans le sélecteur, <flowSpan font-weight="bold">cliquer</flowSpan> sur un objet permet d&apos;afficher les flèches de redimensionnement, <flowSpan font-weight="bold">cliquer</flowSpan> une fois de plus sur cet objet permet d&apos;afficher les flèches d&apos;inclinaison et de rotation. Si vous déplacez les flèches des coins, l&apos;objet tournera autour du centre (marqué d&apos;une croix). Si vous appuyez sur <flowSpan font-weight="bold">Maj</flowSpan> pendant cette opération, le rotation se fera autour du coin opposé. Vous pouvez aussi déplacer le centre de rotation (la croix) où vous le désirez.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3017.8880998" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3017.8880998" x="10">Utiliser la boîte de dialogue "Ouvrir" comme palette d'objets</tspan>
- </text>
- <rect id="d0e407" display="none" height="1000px" width="288" y="3023.1" x="10"/>
+ <rect id="d0e367" display="none" height="1000px" width="288" y="2877.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e407"/>
+ <use y="0" x="0" xlink:href="#d0e367"/>
</flowRegion>
- <flowDiv xml:space="preserve">Si vous avez un certain nombre de petits fichiers SVG dont vous réutilisez fréquemment le contenu dans d'autres documents, vous trouverez peut-être pratique d'utiliser la boîte de dialogue Ouvrir comme une palette. Ajoutez le répertoire contenant vos éléments SVG dans la liste des favoris (de cette boîte de dialogue) afin de pouvoir le parcourir rapidement. Puis naviguez dans ce répertoire en consultant les aperçus. Lorsque vous avez trouvé le fichier dont vous avez besoin, cliquez-déplacez le simplement sur le canevas, et il sera automatiquement importé dans votre document courant.</flowDiv>
+ <flowDiv xml:space="preserve">Ou bien tourner en utilisant les raccourcis clavier : <flowSpan font-weight="bold">[</flowSpan> et <flowSpan font-weight="bold">]</flowSpan> (de 15 degrés) ou <flowSpan font-weight="bold">Ctrl+[</flowSpan> et <flowSpan font-weight="bold">Ctrl+]</flowSpan> (de 90 degrés). Ces mêmes raccourcis <flowSpan font-weight="bold">[]</flowSpan> combinés avec <flowSpan font-weight="bold">Alt</flowSpan> permettent des rotations lentes à l&apos;échelle du pixel.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3138.7502898" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3138.7502898" x="10">Des ombres portées grâce aux bitmaps</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2929.1332178" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2929.1332178" x="10">Des ombres portées grâce aux bitmaps</tspan>
</text>
- <rect id="d0e416" display="none" height="1000px" width="288" y="3144" x="10"/>
+ <rect id="d0e394" display="none" height="1000px" width="288" y="2934.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e416"/>
+ <use y="0" x="0" xlink:href="#d0e394"/>
</flowRegion>
- <flowDiv xml:space="preserve">Inkscape supportant le filtre SVG "flou gaussien", vous pouvez facilement créer des ombrages floutés pour les objets. Sélectionnez un objet, dupliquez-le avec <flowSpan font-weight="bold">Ctrl+D</flowSpan>, appuyez sur la touche <flowSpan font-weight="bold">PgBas</flowSpan> pour déplacer le duplicata sous l'objet original, puis déplacez-le légèrement vers le bas et la droite par rapport à l'original. Ouvrez maintenant la boîte de dialogue Remplissage et contour et changez la valeur du flou à 5. Le tour est joué !</flowDiv>
+ <flowDiv xml:space="preserve">Inkscape supportant le filtre SVG &quot;flou gaussien&quot;, vous pouvez facilement créer des ombrages floutés pour les objets. Sélectionnez un objet, dupliquez-le avec <flowSpan font-weight="bold">Ctrl+D</flowSpan>, appuyez sur la touche <flowSpan font-weight="bold">PgBas</flowSpan> pour déplacer le duplicata sous l&apos;objet original, puis déplacez-le légèrement vers le bas et la droite par rapport à l&apos;original. Ouvrez maintenant la boîte de dialogue Remplissage et contour et changez la valeur du flou à 5. Le tour est joué !</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3238.4654687999996" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3238.4654687999996" x="10">Placement d'un texte le long d'un chemin</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3028.8483967999996" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="3028.8483967999996" x="10">Placement d&apos;un texte le long d&apos;un chemin</tspan>
</text>
- <rect id="d0e431" display="none" height="1000px" width="288" y="3243.7" x="10"/>
+ <rect id="d0e409" display="none" height="1000px" width="288" y="3034" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e431"/>
+ <use y="0" x="0" xlink:href="#d0e409"/>
</flowRegion>
- <flowDiv xml:space="preserve">Pour placer du texte le long d'une courbe, sélectionnez le texte et la courbe puis utilisez la commande <flowSpan font-family="sans serif">Mettre suivant un chemin</flowSpan> du menu Texte. Le texte commencera au début du chemin. En général, il vaut mieux créer un chemin auquel vous voulez que le texte s'adapte plutôt que d'adapter ce texte à un autre élément (préexistant) du dessin — cela vous autorisera un meilleur contrôle sans avoir à "bricoler" votre dessin.</flowDiv>
+ <flowDiv xml:space="preserve">Pour placer du texte le long d&apos;une courbe, sélectionnez le texte et la courbe puis utilisez la commande <flowSpan font-family="sans serif">Mettre suivant un chemin</flowSpan> du menu Texte. Le texte commencera au début du chemin. En général, il vaut mieux créer un chemin auquel vous voulez que le texte s&apos;adapte plutôt que d&apos;adapter ce texte à un autre élément (préexistant) du dessin — cela vous autorisera un meilleur contrôle sans avoir à &quot;bricoler&quot; votre dessin.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3336.8171877999994" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3336.8171877999994" x="10">Sélection de l'original</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3127.2001157999994" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="3127.2001157999994" x="10">Sélection de l&apos;original</tspan>
</text>
- <rect id="d0e443" display="none" height="1000px" width="288" y="3342" x="10"/>
+ <rect id="d0e421" display="none" height="1000px" width="288" y="3132.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e443"/>
+ <use y="0" x="0" xlink:href="#d0e421"/>
</flowRegion>
- <flowDiv xml:space="preserve">Quand vous avez affaire à un texte suivant un chemin, un offset lié ou un clone, leur objet/chemin source peut être difficile à sélectionner (caché sous d'autres objets, rendu invisible et/ou verrouillé). le raccourci magique <flowSpan font-weight="bold">Maj+D</flowSpan> peut alors vous aider; sélectionnez le texte, l'offset lié ou le clone et appuyez sur <flowSpan font-weight="bold">Maj+D</flowSpan> pour sélectionner alors le chemin correspondant, la source de l'offset ou l'original du clone.</flowDiv>
+ <flowDiv xml:space="preserve">Quand vous avez affaire à un texte suivant un chemin, un offset lié ou un clone, leur objet/chemin source peut être difficile à sélectionner (caché sous d&apos;autres objets, rendu invisible et/ou verrouillé). le raccourci magique <flowSpan font-weight="bold">Maj+D</flowSpan> peut alors vous aider; sélectionnez le texte, l&apos;offset lié ou le clone et appuyez sur <flowSpan font-weight="bold">Maj+D</flowSpan> pour sélectionner alors le chemin correspondant, la source de l&apos;offset ou l&apos;original du clone.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3435.2083317999995" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3435.2083317999995" x="10">Au cas où la fenêtre serait hors de l'écran</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3225.5912597999995" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="3225.5912597999995" x="10">Au cas où la fenêtre serait hors de l&apos;écran</tspan>
</text>
- <rect id="d0e458" display="none" height="1000px" width="288" y="3440.4" x="10"/>
+ <rect id="d0e436" display="none" height="1000px" width="288" y="3230.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e458"/>
+ <use y="0" x="0" xlink:href="#d0e436"/>
</flowRegion>
- <flowDiv xml:space="preserve">Quand vous transférez des documents entre des systèmes avec des résolutions ou un nombre d'écrans différents, vous pouvez être confronté au problème suivant : Inkscape a enregistré une position de fenêtre qui fait que vous ne pouvez plus atteindre Inkscape sur votre écran. Il suffit de maximiser la fenêtre (ce qui devrait la rendre de nouveau visible a l'écran)(utilisez la barre des tâches), d'enregistrer le document et de le recharger. Vous pouvez éviter tout cela en désactivant l'option "enregistrer la taille et la position des fenêtres" (dans l'onglet <flowSpan font-family="sans serif">Fenêtres</flowSpan> des <flowSpan font-family="sans serif">Préférences d'Inkscape</flowSpan>).</flowDiv>
+ <flowDiv xml:space="preserve">Quand vous transférez des documents entre des systèmes avec des résolutions ou un nombre d&apos;écrans différents, vous pouvez être confronté au problème suivant : Inkscape a enregistré une position de fenêtre qui fait que vous ne pouvez plus atteindre Inkscape sur votre écran. Il suffit de maximiser la fenêtre (ce qui devrait la rendre de nouveau visible a l&apos;écran)(utilisez la barre des tâches), d&apos;enregistrer le document et de le recharger. Vous pouvez éviter tout cela en désactivant l&apos;option &quot;enregistrer la taille et la position des fenêtres&quot; (dans l&apos;onglet <flowSpan font-family="sans serif">Fenêtres</flowSpan> des <flowSpan font-family="sans serif">Préférences d&apos;Inkscape</flowSpan>).</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3556.5041157999995" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3556.5041157999995" x="10">Transparence, dégradés et export en Postscript</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3346.8870437999994" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="3346.8870437999994" x="10">Transparence, dégradés et export en Postscript</tspan>
</text>
- <rect id="d0e473" display="none" height="1000px" width="288" y="3561.7" x="10"/>
+ <rect id="d0e451" display="none" height="1000px" width="288" y="3352.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e473"/>
+ <use y="0" x="0" xlink:href="#d0e451"/>
</flowRegion>
- <flowDiv xml:space="preserve">Les formats PostScript ou EPS ne supportent pas la <flowSpan font-style="italic">transparence</flowSpan>, aussi vous ne devriez pas utiliser cette fonctionnalité si vous comptez exporter en PS/EPS. Dans le cas d'une transparence uniforme chevauchant une couleur uniforme, il est facile d'y remédier : sélectionnez l'un des objets transparents et passez à l'outil Pipette (<flowSpan font-weight="bold">F7</flowSpan>); Assurez vous qu'il est en mode "capturer la couleur visible sans alpha" et cliquez sur ce même objet. La couleur visible sera capturée et réassignée à l'objet mais cette fois, sans transparence. Répétez cette opération pour tous les objets transparents. Si votre objet transparent chevauche plusieurs zones de différentes couleurs uniformes, vous devrez le découper en morceaux (un morceau par zone) puis appliquer la procédure ci-dessus à chacun des morceaux.</flowDiv>
+ <flowDiv xml:space="preserve">Les formats PostScript ou EPS ne supportent pas la <flowSpan font-style="italic">transparence</flowSpan>, aussi vous ne devriez pas utiliser cette fonctionnalité si vous comptez exporter en PS/EPS. Dans le cas d&apos;une transparence uniforme chevauchant une couleur uniforme, il est facile d&apos;y remédier : sélectionnez l&apos;un des objets transparents et passez à l&apos;outil Pipette (<flowSpan font-weight="bold">F7</flowSpan>); Assurez vous qu&apos;il est en mode &quot;capturer la couleur visible sans alpha&quot; et cliquez sur ce même objet. La couleur visible sera capturée et réassignée à l&apos;objet mais cette fois, sans transparence. Répétez cette opération pour tous les objets transparents. Si votre objet transparent chevauche plusieurs zones de différentes couleurs uniformes, vous devrez le découper en morceaux (un morceau par zone) puis appliquer la procédure ci-dessus à chacun des morceaux.</flowDiv>
</flowRoot>
- <rect id="d0e482" display="none" height="1000px" width="288" y="3696.5" x="10"/>
+ <rect id="d0e460" display="none" height="1000px" width="288" y="3486.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e482"/>
+ <use y="0" x="0" xlink:href="#d0e460"/>
</flowRegion>
- <flowDiv xml:space="preserve">L'export de <flowSpan font-style="italic">dégradés</flowSpan> en PS ou EPS ne fonctionne pas pour du texte (à moins que ce texte ne soit converti en chemin) ou pour les remplissages des contours. Et, comme la transparence est perdu lors d'un export au format PS ou EPS, vous ne pouvez pas utiliser, par exemple, un dégradé depuis un bleu <flowSpan font-style="italic">opaque</flowSpan> vers un bleu <flowSpan font-style="italic">transparent</flowSpan>; pour contourner cela, remplacez-le par un dégradé depuis un bleu <flowSpan font-style="italic">opaque</flowSpan> vers la couleur du fond <flowSpan font-style="italic">opaque</flowSpan>.</flowDiv>
+ <flowDiv xml:space="preserve">L&apos;export de <flowSpan font-style="italic">dégradés</flowSpan> en PS ou EPS ne fonctionne pas pour du texte (à moins que ce texte ne soit converti en chemin) ou pour les remplissages des contours. Et, comme la transparence est perdu lors d&apos;un export au format PS ou EPS, vous ne pouvez pas utiliser, par exemple, un dégradé depuis un bleu <flowSpan font-style="italic">opaque</flowSpan> vers un bleu <flowSpan font-style="italic">transparent</flowSpan>; pour contourner cela, remplacez-le par un dégradé depuis un bleu <flowSpan font-style="italic">opaque</flowSpan> vers la couleur du fond <flowSpan font-style="italic">opaque</flowSpan>.</flowDiv>
</flowRoot>
- <g transform="translate(0, 3778.4282257999994)">
+ <g transform="translate(0, 3568.8111537999994)">
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
<linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.149642,0.000000,0.000000,0.465194,-0.130153,3495.428)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
<radialGradient id="radialGradient2456" xlink:href="#linearGradient666" gradientUnits="userSpaceOnUse" cy="1036.5" cx="233.92" gradientTransform="scale(1.825742,0.547723)" r="98.26" inkscape:collect="always"/>
diff --git a/share/tutorials/tutorial-tips.ja.svg b/share/tutorials/tutorial-tips.ja.svg
index 46783edd7..5c185bec5 100644
--- a/share/tutorials/tutorial-tips.ja.svg
+++ b/share/tutorials/tutorial-tips.ja.svg
@@ -51,283 +51,283 @@
<path id="path7527" opacity="0.5" style="marker-end:none;color:black;marker-start:none;marker-mid:none;" sodipodi:type="star" sodipodi:sides="3" fill-rule="evenodd" fill="#000" sodipodi:r1="7.6034532" sodipodi:r2="3.8017266" sodipodi:arg1="0.62024949" sodipodi:arg2="1.667447" transform="matrix(0.614962,4.549602e-2,6.191898e-2,-0.451855,112.4558,201.6044)" inkscape:randomized="0" sodipodi:cy="193.40422" sodipodi:cx="332.34018" inkscape:rounded="0" inkscape:flatsided="true" d="M338.53,197.82l-13.11-1.27,7.65-10.71,5.46,11.98z"/>
</g>
<text id="text1920" style="writing-mode:lr-tb;text-anchor:start;" font-family="sans" font-size="7.0000000" font-style="normal" transform="scale(1.130730,1.130730)" font-stretch="normal" font-variant="normal" y="18.25828" x="176.24451" font-weight="normal" fill="#ffffff">
- <tspan id="tspan1668" style="letter-spacing:2.1813099;" dx="0 -0.57057059 0 0 0 0 0" fill="#ffffff">::ヒントやコツ</tspan>
+ <tspan id="tspan1668" style="letter-spacing:2.1813099;" dx="0 -0.57057059 0 0 0 0 0" fill="#ffffff">::</tspan>
</text>
- <rect id="d0e10" display="none" height="1000px" width="264" y="36" x="35"/>
+ <rect id="d0e12" display="none" height="1000px" width="264" y="36" x="35"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;" font-family="sans" font-size="7.2" line-height="150%" font-weight="normal" font-style="italic" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e10"/>
+ <use y="0" x="0" xlink:href="#d0e12"/>
</flowRegion>
<flowDiv xml:space="preserve">このチュートリアルは、あなたの作業を助け効率化を図るいくつかの「隠し機能」やユーザが見つけたさまざまなヒントやコツを紹介しています。</flowDiv>
</flowRoot>
<text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="78.912499" x="10" font-family="sans" font-style="normal" fill="#000000">
<tspan y="78.912499" x="10">タイルクローンを使った放射状の配置</tspan>
</text>
- <rect id="d0e19" display="none" height="1000px" width="288" y="84.112" x="10"/>
+ <rect id="d0e21" display="none" height="1000px" width="288" y="84.112" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e19"/>
+ <use y="0" x="0" xlink:href="#d0e21"/>
</flowRegion>
<flowDiv xml:space="preserve">直角のグリッドやパターンは <flowSpan font-family="sans serif">タイルクローン</flowSpan> で簡単に作成できます。では、共通の中心から回転させる、<flowSpan font-style="italic">放射状</flowSpan> の配置とかはどうでしょう? それもできます!</flowDiv>
</flowRoot>
- <rect id="d0e28" display="none" height="1000px" width="288" y="124.24" x="10"/>
+ <rect id="d0e30" display="none" height="1000px" width="288" y="124.97" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e28"/>
+ <use y="0" x="0" xlink:href="#d0e30"/>
</flowRegion>
<flowDiv xml:space="preserve">あなたが作りたい放射状パターンが、3、4、6、8、あるいは 12 の要素だけでいいなら、対称化の P3、P31M、P3M1、P4、P4M、P6、あるいは P6M を試してみてください。これは、雪片などを作成するのに適しています。しかし、もっと汎用的なやり方だと次のようになります。</flowDiv>
</flowRoot>
- <rect id="d0e31" display="none" height="1000px" width="288" y="175.05" x="10"/>
+ <rect id="d0e33" display="none" height="1000px" width="288" y="175.89" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e31"/>
+ <use y="0" x="0" xlink:href="#d0e33"/>
</flowRegion>
<flowDiv xml:space="preserve">対称化の P1 (シンプル移動) を選び、<flowSpan font-family="sans serif">シフト</flowSpan> タブで <flowSpan font-family="sans serif">行ごと/垂直シフト</flowSpan> および <flowSpan font-family="sans serif">列ごと/水平シフト</flowSpan> をそれぞれ -100% に設定し、移動を<flowSpan font-style="italic">平衡</flowSpan>させます (訳注: 「タイルを考慮しない」を選んでもできます)。これで、すべてのクローンはオリジナルの上に正確に積み重なります。あとは <flowSpan font-family="sans serif">回転</flowSpan> タブで列ごとの回転角度を設定し、行が 1、列が複数になるようにして作成します。例として、以下に水平線、列数 30、回転角度 6°で作成したパターンを示します。</flowDiv>
</flowRoot>
- <path id="tips-f01-ja.svgpath25" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" d="M81.5,58.9h117.5" inkscape:tile-w="117.80000" transform="translate(10, 256.697093) " stroke-dashoffset="0.0000000" stroke="#000" stroke-linecap="butt" inkscape:tile-h="0.30000001" stroke-miterlimit="4.0000000" inkscape:tile-cx="160.25000" inkscape:tile-cy="346.50000" stroke-width="0.30000001" fill="none"/>
- <use id="tips-f01-ja.svguse55" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.994522,0.104528,-0.104528,0.994522,6.925170,-14.33743) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse56" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.978148,0.207912,-0.207912,0.978148,15.31072,-27.87239) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse57" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.951057,0.309017,-0.309017,0.951057,25.06545,-40.45673) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse58" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.913545,0.406737,-0.406737,0.913545,36.08194,-51.95277) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse59" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.866025,0.500000,-0.500000,0.866025,48.23990,-62.23401) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse60" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.809017,0.587785,-0.587785,0.809017,61.40597,-71.18799) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse61" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.743145,0.669131,-0.669131,0.743145,75.43562,-78.71674) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse62" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.669131,0.743145,-0.743145,0.669131,90.17562,-84.73774) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse63" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.587785,0.809017,-0.809017,0.587785,105.4642,-89.18526) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse64" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.500000,0.866025,-0.866025,0.500000,121.1340,-92.01010) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse65" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.406737,0.913545,-0.913545,0.406737,137.0132,-93.18140) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse66" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.309017,0.951057,-0.951057,0.309017,152.9274,-92.68676) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse67" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.207912,0.978148,-0.978148,0.207912,168.7031,-90.53114) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse68" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(0.104528,0.994522,-0.994522,0.104528,184.1673,-86.73846) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse69" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(6.123032e-17,1.000000,-1.000000,6.123032e-17,199.1500,-81.35000) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse70" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.104528,0.994522,-0.994522,-0.104528,213.4874,-74.42481) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse71" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.207912,0.978148,-0.978148,-0.207912,227.0224,-66.03933) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse72" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.309017,0.951057,-0.951057,-0.309017,239.6068,-56.28455) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse73" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.406737,0.913545,-0.913545,-0.406737,251.1028,-45.26806) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse74" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.500000,0.866025,-0.866025,-0.500000,261.3840,-33.11010) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse75" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.587785,0.809017,-0.809017,-0.587785,270.3380,-19.94403) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse76" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.669131,0.743145,-0.743145,-0.669131,277.8668,-5.914380) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse77" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.743145,0.669131,-0.669131,-0.743145,283.8877,8.825618) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse78" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.809017,0.587785,-0.587785,-0.809017,288.3353,24.11421) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse79" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.866025,0.500000,-0.500000,-0.866025,291.1601,39.78401) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse80" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.913545,0.406737,-0.406737,-0.913545,292.3314,55.66320) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse81" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.951057,0.309017,-0.309017,-0.951057,291.8368,71.57745) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse82" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.978148,0.207912,-0.207912,-0.978148,289.6811,87.35318) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <use id="tips-f01-ja.svguse83" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 256.697093) matrix(-0.994522,0.104528,-0.104528,-0.994522,285.8885,102.8173) translate(-10, -256.697093)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <rect id="d0e59" display="none" height="1000px" width="288" y="386.5" x="10"/>
- <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
- <flowRegion>
- <use y="0" x="0" xlink:href="#d0e59"/>
+ <path id="tips-f01-ja.svgpath25" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" d="M81.5,58.9h117.5" inkscape:tile-w="117.80000" transform="translate(10, 259.012287) " stroke-dashoffset="0.0000000" stroke="#000" stroke-linecap="butt" inkscape:tile-h="0.30000001" stroke-miterlimit="4.0000000" inkscape:tile-cx="160.25000" inkscape:tile-cy="346.50000" stroke-width="0.30000001" fill="none"/>
+ <use id="tips-f01-ja.svguse55" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.994522,0.104528,-0.104528,0.994522,6.925170,-14.33743) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse56" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.978148,0.207912,-0.207912,0.978148,15.31072,-27.87239) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse57" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.951057,0.309017,-0.309017,0.951057,25.06545,-40.45673) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse58" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.913545,0.406737,-0.406737,0.913545,36.08194,-51.95277) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse59" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.866025,0.500000,-0.500000,0.866025,48.23990,-62.23401) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse60" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.809017,0.587785,-0.587785,0.809017,61.40597,-71.18799) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse61" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.743145,0.669131,-0.669131,0.743145,75.43562,-78.71674) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse62" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.669131,0.743145,-0.743145,0.669131,90.17562,-84.73774) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse63" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.587785,0.809017,-0.809017,0.587785,105.4642,-89.18526) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse64" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.500000,0.866025,-0.866025,0.500000,121.1340,-92.01010) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse65" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.406737,0.913545,-0.913545,0.406737,137.0132,-93.18140) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse66" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.309017,0.951057,-0.951057,0.309017,152.9274,-92.68676) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse67" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.207912,0.978148,-0.978148,0.207912,168.7031,-90.53114) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse68" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(0.104528,0.994522,-0.994522,0.104528,184.1673,-86.73846) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse69" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(6.123032e-17,1.000000,-1.000000,6.123032e-17,199.1500,-81.35000) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse70" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.104528,0.994522,-0.994522,-0.104528,213.4874,-74.42481) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse71" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.207912,0.978148,-0.978148,-0.207912,227.0224,-66.03933) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse72" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.309017,0.951057,-0.951057,-0.309017,239.6068,-56.28455) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse73" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.406737,0.913545,-0.913545,-0.406737,251.1028,-45.26806) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse74" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.500000,0.866025,-0.866025,-0.500000,261.3840,-33.11010) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse75" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.587785,0.809017,-0.809017,-0.587785,270.3380,-19.94403) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse76" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.669131,0.743145,-0.743145,-0.669131,277.8668,-5.914380) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse77" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.743145,0.669131,-0.669131,-0.743145,283.8877,8.825618) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse78" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.809017,0.587785,-0.587785,-0.809017,288.3353,24.11421) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse79" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.866025,0.500000,-0.500000,-0.866025,291.1601,39.78401) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse80" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.913545,0.406737,-0.406737,-0.913545,292.3314,55.66320) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse81" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.951057,0.309017,-0.309017,-0.951057,291.8368,71.57745) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse82" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.978148,0.207912,-0.207912,-0.978148,289.6811,87.35318) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-ja.svguse83" xlink:href="#tips-f01-ja.svgpath25" transform="translate(10, 259.012287) matrix(-0.994522,0.104528,-0.104528,-0.994522,285.8885,102.8173) translate(-10, -259.012287)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <rect id="d0e61" display="none" height="1000px" width="288" y="388.81" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e61"/>
</flowRegion>
<flowDiv xml:space="preserve">これを時計の目盛り板のようにするには、切り抜くか、シンプルに白い円で中心部を覆い隠します (クローン上でブーリアン操作を行うには、まずこれらのリンクを解除してください)。</flowDiv>
</flowRoot>
- <rect id="d0e62" display="none" height="1000px" width="288" y="425.88" x="10"/>
+ <rect id="d0e64" display="none" height="1000px" width="288" y="429.52" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e62"/>
+ <use y="0" x="0" xlink:href="#d0e64"/>
</flowRegion>
<flowDiv xml:space="preserve">行と列の両方を使うことによって、もっとおもしろい効果を作り出せます。ここに挙げたパターンは、列数 10、行数 8、行ごとの回転角度 2°、列ごとの回転角度 18°で作成したものです。ここでの各線のグループが「列」であり、グループはそれぞれ 18°ずつ離れています。各列内では、個々の線は 2°ずつ離れています:</flowDiv>
</flowRoot>
- <path id="tips-f02-ja.svgpath92" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" d="M72.5,71.65h143" inkscape:tile-w="143.30000" transform="translate(10, 496.07030599999996) " stroke-dashoffset="0.0000000" stroke="#000" stroke-linecap="butt" inkscape:tile-h="0.30000001" stroke-miterlimit="4.0000000" inkscape:tile-cx="164.00000" inkscape:tile-cy="543.50000" stroke-width="0.30000001" fill="none"/>
- <use id="tips-f02-ja.svguse1473" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.999657,2.617695e-2,-2.617695e-2,0.999657,1.924910,-3.745086) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1474" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.998630,5.233596e-2,-5.233596e-2,0.998630,3.947230,-7.437965) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1475" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.996917,7.845910e-2,-7.845910e-2,0.996917,6.065500,-11.07739) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1476" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.994522,0.104528,-0.104528,0.994522,8.278530,-14.65955) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1477" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.991445,0.130526,-0.130526,0.991445,10.58424,-18.18274) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1478" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.987688,0.156434,-0.156434,0.987688,12.98172,-21.64461) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1479" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.983255,0.182236,-0.182236,0.983255,15.46808,-25.04208) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1480" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.951057,0.309017,-0.309017,0.951057,29.18885,-40.99141) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1481" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.942641,0.333807,-0.333807,0.942641,32.17667,-43.95868) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1482" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.933580,0.358368,-0.358368,0.933580,35.24138,-46.84623) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1483" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.923880,0.382683,-0.382683,0.923880,38.38095,-49.65217) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1484" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.913545,0.406737,-0.406737,0.913545,41.59183,-52.37582) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1485" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.902585,0.430511,-0.430511,0.902585,44.87392,-55.01397) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1486" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.891007,0.453990,-0.453990,0.891007,48.22376,-57.56504) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1487" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.878817,0.477159,-0.477159,0.878817,51.63863,-60.02816) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1488" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.809017,0.587785,-0.587785,0.809017,69.61669,-70.95716) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1489" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.793353,0.608761,-0.608761,0.793353,73.37512,-72.85554) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1490" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.777146,0.629320,-0.629320,0.777146,77.18198,-74.65460) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1491" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.760406,0.649448,-0.649448,0.760406,81.03440,-76.35361) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1492" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.743145,0.669131,-0.669131,0.743145,84.93020,-77.95106) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1493" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.725374,0.688355,-0.688355,0.725374,88.86650,-79.44634) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1494" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.707107,0.707107,-0.707107,0.707107,92.84060,-80.83745) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1495" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.688355,0.725374,-0.725374,0.688355,96.85030,-82.12436) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1496" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.587785,0.809017,-0.809017,0.587785,117.3249,-86.96326) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1497" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.566406,0.824126,-0.824126,0.566406,121.4861,-87.60718) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1498" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.544639,0.838671,-0.838671,0.544639,125.6626,-88.14188) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1499" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.522499,0.852640,-0.852640,0.522499,129.8520,-88.56700) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1500" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.500000,0.866025,-0.866025,0.500000,134.0508,-88.88270) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1501" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.477159,0.878817,-0.878817,0.477159,138.2564,-89.08796) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1502" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.453990,0.891007,-0.891007,0.453990,142.4656,-89.18356) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1503" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.430511,0.902585,-0.902585,0.430511,146.6768,-89.16850) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1504" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.309017,0.951057,-0.951057,0.309017,167.6443,-87.44306) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1505" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.284015,0.958820,-0.958820,0.284015,171.8011,-86.77010) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1506" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.258819,0.965926,-0.965926,0.258819,175.9385,-85.98768) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1507" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.233445,0.972370,-0.972370,0.233445,180.0541,-85.09770) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1508" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.207912,0.978148,-0.978148,0.207912,184.1447,-84.10004) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1509" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.182236,0.983255,-0.983255,0.182236,188.2082,-82.99550) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1510" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.156434,0.987688,-0.987688,0.156434,192.2414,-81.78604) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1511" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(0.130526,0.991445,-0.991445,0.130526,196.2412,-80.47010) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1512" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(6.123032e-17,1.000000,-1.000000,6.123032e-17,215.6500,-72.35000) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1513" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-2.617695e-2,0.999657,-0.999657,-2.617695e-2,219.3950,-70.42517) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1514" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-5.233596e-2,0.998630,-0.998630,-5.233596e-2,223.0879,-68.40298) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1515" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-7.845910e-2,0.996917,-0.996917,-7.845910e-2,226.7273,-66.28453) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1516" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.104528,0.994522,-0.994522,-0.104528,230.3096,-64.07158) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1517" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.130526,0.991445,-0.991445,-0.130526,233.8331,-61.76595) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1518" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.156434,0.987688,-0.987688,-0.156434,237.2945,-59.36826) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1519" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.182236,0.983255,-0.983255,-0.182236,240.6922,-56.88192) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1520" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.309017,0.951057,-0.951057,-0.309017,256.6413,-43.16115) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1521" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.333807,0.942641,-0.942641,-0.333807,259.6088,-40.17333) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1522" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.358368,0.933580,-0.933580,-0.358368,262.4962,-37.10862) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1523" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.382683,0.923880,-0.923880,-0.382683,265.3021,-33.96905) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1524" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.406737,0.913545,-0.913545,-0.406737,268.0261,-30.75817) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1525" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.430511,0.902585,-0.902585,-0.430511,270.6643,-27.47608) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1526" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.453990,0.891007,-0.891007,-0.453990,273.2149,-24.12624) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1527" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.477159,0.878817,-0.878817,-0.477159,275.6780,-20.71137) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1528" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.587785,0.809017,-0.809017,-0.587785,286.6070,-2.733510) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1529" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.608761,0.793353,-0.793353,-0.608761,288.5057,1.025120) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1530" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.629320,0.777146,-0.777146,-0.629320,290.3045,4.831980) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1531" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.649448,0.760406,-0.760406,-0.649448,292.0034,8.684401) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1532" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.669131,0.743145,-0.743145,-0.669131,293.6010,12.58018) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1533" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.688355,0.725374,-0.725374,-0.688355,295.0964,16.51657) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1534" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.707107,0.707107,-0.707107,-0.707107,296.4873,20.49058) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1535" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.725374,0.688355,-0.688355,-0.725374,297.7741,24.50044) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1536" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.809017,0.587785,-0.587785,-0.809017,302.6135,44.97581) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1537" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.824126,0.566406,-0.566406,-0.824126,303.2572,49.13771) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1538" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.838671,0.544639,-0.544639,-0.838671,303.7919,53.31061) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1539" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.852640,0.522499,-0.522499,-0.852640,304.2170,57.50440) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1540" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.866025,0.500000,-0.500000,-0.866025,304.5327,61.70160) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1541" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.878817,0.477159,-0.477159,-0.878817,304.7380,65.90736) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1542" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.891007,0.453990,-0.453990,-0.891007,304.8336,70.11673) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1543" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.902585,0.430511,-0.430511,-0.902585,304.8185,74.32639) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1544" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.951057,0.309017,-0.309017,-0.951057,303.0931,95.29267) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1545" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.958820,0.284015,-0.284015,-0.958820,302.4201,99.45188) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1546" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.965926,0.258819,-0.258819,-0.965926,301.6377,103.5896) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1547" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.972370,0.233445,-0.233445,-0.972370,300.7477,107.7029) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1548" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.978148,0.207912,-0.207912,-0.978148,299.7500,111.7972) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1549" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.983255,0.182236,-0.182236,-0.983255,298.6455,115.8555) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1550" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.987688,0.156434,-0.156434,-0.987688,297.4360,119.8908) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <use id="tips-f02-ja.svguse1551" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 496.07030599999996) matrix(-0.991445,0.130526,-0.130526,-0.991445,296.1201,123.8925) translate(-10, -496.07030599999996)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <rect id="d0e75" display="none" height="1000px" width="288" y="651.37" x="10"/>
- <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
- <flowRegion>
- <use y="0" x="0" xlink:href="#d0e75"/>
+ <path id="tips-f02-ja.svgpath92" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" d="M72.5,71.65h143" inkscape:tile-w="143.30000" transform="translate(10, 501.06961400000006) " stroke-dashoffset="0.0000000" stroke="#000" stroke-linecap="butt" inkscape:tile-h="0.30000001" stroke-miterlimit="4.0000000" inkscape:tile-cx="164.00000" inkscape:tile-cy="543.50000" stroke-width="0.30000001" fill="none"/>
+ <use id="tips-f02-ja.svguse1473" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.999657,2.617695e-2,-2.617695e-2,0.999657,1.924910,-3.745086) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1474" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.998630,5.233596e-2,-5.233596e-2,0.998630,3.947230,-7.437965) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1475" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.996917,7.845910e-2,-7.845910e-2,0.996917,6.065500,-11.07739) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1476" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.994522,0.104528,-0.104528,0.994522,8.278530,-14.65955) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1477" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.991445,0.130526,-0.130526,0.991445,10.58424,-18.18274) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1478" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.987688,0.156434,-0.156434,0.987688,12.98172,-21.64461) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1479" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.983255,0.182236,-0.182236,0.983255,15.46808,-25.04208) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1480" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.951057,0.309017,-0.309017,0.951057,29.18885,-40.99141) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1481" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.942641,0.333807,-0.333807,0.942641,32.17667,-43.95868) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1482" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.933580,0.358368,-0.358368,0.933580,35.24138,-46.84623) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1483" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.923880,0.382683,-0.382683,0.923880,38.38095,-49.65217) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1484" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.913545,0.406737,-0.406737,0.913545,41.59183,-52.37582) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1485" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.902585,0.430511,-0.430511,0.902585,44.87392,-55.01397) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1486" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.891007,0.453990,-0.453990,0.891007,48.22376,-57.56504) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1487" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.878817,0.477159,-0.477159,0.878817,51.63863,-60.02816) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1488" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.809017,0.587785,-0.587785,0.809017,69.61669,-70.95716) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1489" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.793353,0.608761,-0.608761,0.793353,73.37512,-72.85554) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1490" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.777146,0.629320,-0.629320,0.777146,77.18198,-74.65460) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1491" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.760406,0.649448,-0.649448,0.760406,81.03440,-76.35361) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1492" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.743145,0.669131,-0.669131,0.743145,84.93020,-77.95106) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1493" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.725374,0.688355,-0.688355,0.725374,88.86650,-79.44634) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1494" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.707107,0.707107,-0.707107,0.707107,92.84060,-80.83745) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1495" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.688355,0.725374,-0.725374,0.688355,96.85030,-82.12436) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1496" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.587785,0.809017,-0.809017,0.587785,117.3249,-86.96326) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1497" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.566406,0.824126,-0.824126,0.566406,121.4861,-87.60718) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1498" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.544639,0.838671,-0.838671,0.544639,125.6626,-88.14188) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1499" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.522499,0.852640,-0.852640,0.522499,129.8520,-88.56700) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1500" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.500000,0.866025,-0.866025,0.500000,134.0508,-88.88270) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1501" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.477159,0.878817,-0.878817,0.477159,138.2564,-89.08796) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1502" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.453990,0.891007,-0.891007,0.453990,142.4656,-89.18356) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1503" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.430511,0.902585,-0.902585,0.430511,146.6768,-89.16850) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1504" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.309017,0.951057,-0.951057,0.309017,167.6443,-87.44306) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1505" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.284015,0.958820,-0.958820,0.284015,171.8011,-86.77010) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1506" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.258819,0.965926,-0.965926,0.258819,175.9385,-85.98768) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1507" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.233445,0.972370,-0.972370,0.233445,180.0541,-85.09770) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1508" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.207912,0.978148,-0.978148,0.207912,184.1447,-84.10004) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1509" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.182236,0.983255,-0.983255,0.182236,188.2082,-82.99550) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1510" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.156434,0.987688,-0.987688,0.156434,192.2414,-81.78604) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1511" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(0.130526,0.991445,-0.991445,0.130526,196.2412,-80.47010) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1512" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(6.123032e-17,1.000000,-1.000000,6.123032e-17,215.6500,-72.35000) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1513" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-2.617695e-2,0.999657,-0.999657,-2.617695e-2,219.3950,-70.42517) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1514" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-5.233596e-2,0.998630,-0.998630,-5.233596e-2,223.0879,-68.40298) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1515" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-7.845910e-2,0.996917,-0.996917,-7.845910e-2,226.7273,-66.28453) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1516" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.104528,0.994522,-0.994522,-0.104528,230.3096,-64.07158) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1517" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.130526,0.991445,-0.991445,-0.130526,233.8331,-61.76595) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1518" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.156434,0.987688,-0.987688,-0.156434,237.2945,-59.36826) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1519" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.182236,0.983255,-0.983255,-0.182236,240.6922,-56.88192) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1520" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.309017,0.951057,-0.951057,-0.309017,256.6413,-43.16115) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1521" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.333807,0.942641,-0.942641,-0.333807,259.6088,-40.17333) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1522" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.358368,0.933580,-0.933580,-0.358368,262.4962,-37.10862) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1523" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.382683,0.923880,-0.923880,-0.382683,265.3021,-33.96905) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1524" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.406737,0.913545,-0.913545,-0.406737,268.0261,-30.75817) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1525" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.430511,0.902585,-0.902585,-0.430511,270.6643,-27.47608) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1526" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.453990,0.891007,-0.891007,-0.453990,273.2149,-24.12624) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1527" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.477159,0.878817,-0.878817,-0.477159,275.6780,-20.71137) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1528" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.587785,0.809017,-0.809017,-0.587785,286.6070,-2.733510) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1529" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.608761,0.793353,-0.793353,-0.608761,288.5057,1.025120) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1530" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.629320,0.777146,-0.777146,-0.629320,290.3045,4.831980) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1531" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.649448,0.760406,-0.760406,-0.649448,292.0034,8.684401) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1532" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.669131,0.743145,-0.743145,-0.669131,293.6010,12.58018) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1533" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.688355,0.725374,-0.725374,-0.688355,295.0964,16.51657) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1534" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.707107,0.707107,-0.707107,-0.707107,296.4873,20.49058) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1535" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.725374,0.688355,-0.688355,-0.725374,297.7741,24.50044) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1536" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.809017,0.587785,-0.587785,-0.809017,302.6135,44.97581) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1537" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.824126,0.566406,-0.566406,-0.824126,303.2572,49.13771) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1538" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.838671,0.544639,-0.544639,-0.838671,303.7919,53.31061) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1539" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.852640,0.522499,-0.522499,-0.852640,304.2170,57.50440) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1540" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.866025,0.500000,-0.500000,-0.866025,304.5327,61.70160) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1541" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.878817,0.477159,-0.477159,-0.878817,304.7380,65.90736) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1542" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.891007,0.453990,-0.453990,-0.891007,304.8336,70.11673) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1543" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.902585,0.430511,-0.430511,-0.902585,304.8185,74.32639) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1544" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.951057,0.309017,-0.309017,-0.951057,303.0931,95.29267) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1545" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.958820,0.284015,-0.284015,-0.958820,302.4201,99.45188) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1546" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.965926,0.258819,-0.258819,-0.965926,301.6377,103.5896) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1547" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.972370,0.233445,-0.233445,-0.972370,300.7477,107.7029) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1548" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.978148,0.207912,-0.207912,-0.978148,299.7500,111.7972) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1549" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.983255,0.182236,-0.182236,-0.983255,298.6455,115.8555) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1550" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.987688,0.156434,-0.156434,-0.987688,297.4360,119.8908) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-ja.svguse1551" xlink:href="#tips-f02-ja.svgpath92" transform="translate(10, 501.06961400000006) matrix(-0.991445,0.130526,-0.130526,-0.991445,296.1201,123.8925) translate(-10, -501.06961400000006)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <rect id="d0e77" display="none" height="1000px" width="288" y="656.37" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e77"/>
</flowRegion>
<flowDiv xml:space="preserve">上の例では、線は中心から回転しています。しかし、中心をシェイプの外に置きたい時はどうしたらよいでしょう? そのシェイプを覆うように、中心をあなたが置きたいところにした、見えない矩形 (フィルなし、ストロークなし) を作成し、シェイプと矩形をグループ化し、そのグループ上で <flowSpan font-family="sans serif">タイルクローン</flowSpan> を使用します。これは、あなたが拡大縮小、回転、そしておそらく不透明度もランダム化することでナイスな「爆発」あるいは「星形」にすることができる方法です:</flowDiv>
</flowRoot>
- <g id="tips-f03-ja.svgg1768" inkscape:tile-w="87.999840" transform="translate(10, 742.155035) matrix(0.637680,0.000000,0.000000,0.637680,37.60870,-470.9209)" inkscape:tile-h="7.3333200" inkscape:tile-cx="158.99982" inkscape:tile-cy="859.24904">
+ <g id="tips-f03-ja.svgg1768" inkscape:tile-w="87.999840" transform="translate(10, 749.2419140000001) matrix(0.637680,0.000000,0.000000,0.637680,37.60870,-470.9209)" inkscape:tile-h="7.3333200" inkscape:tile-cx="158.99982" inkscape:tile-cy="859.24904">
<path id="tips-f03-ja.svgpath1592" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" fill-rule="evenodd" fill="#000" d="M210.17,859.92c4.54-2.08,15.81-3.8,15.81-0.12,0,3.67-15.81,0.12-15.81,0.12z"/>
<rect id="tips-f03-ja.svgrect1680" opacity="0" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" height="11.5" width="138" y="853.5" x="90" stroke-width="0.25px"/>
</g>
- <use id="tips-f03-ja.svguse5827" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(1.582388,-0.949047,0.949047,1.582388,-154.0340,87.07056) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5828" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.158025,-0.146700,0.146700,0.158025,105.7377,85.22851) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5829" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.381205,-0.310377,0.310377,0.381205,62.11156,90.79346) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5830" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.916096,-0.772439,0.772439,0.916096,-47.81907,113.8302) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5831" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.271176,1.020398,-1.020398,0.271176,179.8827,-85.71164) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5832" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(5.449488e-2,1.117922,-1.117922,5.449488e-2,217.5118,-82.58176) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5833" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(1.301172,-0.342483,0.342483,1.301172,-68.23569,24.41345) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5834" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.437831,-5.706090e-2,5.706090e-2,0.437831,73.74740,51.22179) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5835" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.306813,9.940890e-2,-9.940890e-2,0.306813,104.0080,39.56182) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5836" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-3.070037e-2,0.733791,-0.733791,-3.070037e-2,199.7728,-22.62704) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5837" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.587705,1.503905,-1.503905,0.587705,173.1183,-177.2931) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5838" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-6.358936e-2,0.241746,-0.241746,-6.358936e-2,166.4545,48.29976) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5839" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.112789,0.480395,-0.480395,-0.112789,191.6708,18.91615) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5840" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.470476,0.344786,-0.344786,0.470476,100.1539,-7.148430) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5841" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.903283,1.297602,-1.297602,0.903283,113.3661,-172.9191) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5842" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(1.638722,0.413477,-0.413477,1.638722,-56.94251,-106.6588) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5843" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(1.375364,0.841378,-0.841378,1.375364,12.61539,-145.8564) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5844" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.372431,1.257953,-1.257953,0.372431,184.1022,-126.5285) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5845" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.974189,0.807369,-0.807369,0.974189,65.75931,-110.2368) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5846" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.731938,1.633265,-1.633265,-0.731938,366.5094,-93.65480) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5847" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.673132,0.518622,-0.518622,0.673132,85.37160,-46.91760) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5848" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(2.547028e-2,0.998190,-0.998190,2.547028e-2,212.3249,-63.70384) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5849" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-3.605237e-2,0.532086,-0.532086,-3.605237e-2,184.9846,5.822092) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5850" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-1.090290,0.485825,-0.485825,-1.090290,327.9609,93.43394) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5851" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.698354,0.189739,-0.189739,-0.698354,250.6815,104.4086) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5852" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(5.885208e-2,0.812223,-0.812223,5.885208e-2,193.3647,-40.42509) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5853" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.726872,1.565645,-1.565645,0.726872,158.5279,-196.5916) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5854" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.937370,0.984031,-0.984031,-0.937370,345.0698,12.40872) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5855" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-1.744032,-0.332291,0.332291,-1.744032,355.8320,257.4943) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5856" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.222960,1.144285,-1.144285,0.222960,196.1248,-99.21930) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5857" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.343933,1.153051,-1.153051,-0.343933,275.5978,-56.78320) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5858" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.184014,0.803951,-0.803951,-0.184014,226.4862,-20.57292) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5859" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.657759,0.630998,-0.630998,-0.657759,279.0187,39.94792) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5860" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-1.178407,8.005262e-3,-8.005262e-3,-1.178407,303.4147,166.6376) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5861" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-1.188778,0.960756,-0.960756,-1.188778,378.2234,35.00298) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5862" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.580462,-3.074334e-2,3.074334e-2,-0.580462,217.3166,125.9781) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5863" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.867001,0.425050,-0.425050,-0.867001,292.2441,84.68779) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5864" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.700823,0.100133,-0.100133,-0.700823,244.1245,117.0541) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5865" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-1.763055,-0.226403,0.226403,-1.763055,366.6297,244.2414) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5866" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.982450,-1.091297,1.091297,-0.982450,191.5241,304.3507) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5867" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.112597,-0.111700,0.111700,-0.112597,146.0492,101.2028) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5868" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.465116,-0.231915,0.231915,-0.465116,185.7921,145.0584) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5869" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-1.344854,3.164347e-2,-3.164347e-2,-1.344854,328.3710,176.1683) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5870" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.841796,0.711101,-0.711101,-0.841796,310.7677,42.98625) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5871" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.406734,-1.716231,1.716231,-0.406734,63.37569,346.8820) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5872" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.512726,-1.119051,1.119051,-0.512726,124.0951,272.0361) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5873" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-1.009778,0.397051,-0.397051,-1.009778,309.9339,99.57444) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5874" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.342373,-1.254425,1.254425,-0.342373,89.99150,277.7351) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5875" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-1.321413,-5.632474e-2,5.632474e-2,-1.321413,318.3386,186.5905) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5876" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(8.124399e-2,-1.492381,1.492381,8.124399e-2,12.78507,278.1906) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5877" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.735465,-0.521409,0.521409,-0.735465,201.0780,206.1158) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5878" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.826712,-0.390986,0.390986,-0.826712,223.8044,195.0139) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5879" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(9.504403e-2,-1.201923,1.201923,9.504403e-2,33.23421,236.7537) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5880" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.407521,-0.948369,0.948369,-0.407521,122.6155,240.2096) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5881" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.237366,-0.784455,0.784455,0.237366,45.59887,167.7661) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5882" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.297228,-0.331596,0.331596,0.297228,72.15004,100.2089) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5883" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-7.089730e-2,-0.560229,0.560229,-7.089730e-2,105.7138,160.3371) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5884" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-9.284730e-3,-0.591196,0.591196,-9.284730e-3,94.76460,159.8969) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5885" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.647489,-0.895367,0.895367,0.647489,-19.94909,151.6009) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5886" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.206174,-0.655204,0.655204,0.206174,59.88748,152.2020) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5887" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.228684,-1.074090,1.074090,-0.228684,88.07570,243.9143) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5888" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-1.157023,-1.395573,1.395573,-1.157023,192.3591,360.0865) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5889" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-1.029056,-1.277949,1.277949,-1.029056,183.6293,333.8833) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5890" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.838138,-1.332274,1.332274,0.838138,-80.09370,197.6504) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5891" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-9.741253e-2,-1.150852,1.150852,-9.741253e-2,63.91813,244.4753) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5892" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(-0.214987,-0.730718,0.730718,-0.214987,112.6132,195.1310) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5893" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(1.688294,-0.170486,0.170486,1.688294,-108.8011,-29.30468) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5894" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.553777,-0.203849,0.203849,0.553777,46.32707,62.69652) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5895" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(1.162667,-0.637705,0.637705,1.162667,-71.71793,76.11500) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5896" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(1.521722,-0.574611,0.574611,1.521722,-116.7675,39.69527) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <use id="tips-f03-ja.svguse5897" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 742.155035) matrix(0.546248,-0.904563,0.904563,0.546248,-6.585200,160.6755) translate(-10, -742.155035)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="920.965795" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="920.965795" x="10">スライス (領域を複数の矩形に分けてエクスポート) するには</tspan>
+ <use id="tips-f03-ja.svguse5827" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(1.582388,-0.949047,0.949047,1.582388,-154.0340,87.07056) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5828" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.158025,-0.146700,0.146700,0.158025,105.7377,85.22851) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5829" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.381205,-0.310377,0.310377,0.381205,62.11156,90.79346) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5830" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.916096,-0.772439,0.772439,0.916096,-47.81907,113.8302) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5831" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.271176,1.020398,-1.020398,0.271176,179.8827,-85.71164) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5832" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(5.449488e-2,1.117922,-1.117922,5.449488e-2,217.5118,-82.58176) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5833" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(1.301172,-0.342483,0.342483,1.301172,-68.23569,24.41345) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5834" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.437831,-5.706090e-2,5.706090e-2,0.437831,73.74740,51.22179) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5835" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.306813,9.940890e-2,-9.940890e-2,0.306813,104.0080,39.56182) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5836" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-3.070037e-2,0.733791,-0.733791,-3.070037e-2,199.7728,-22.62704) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5837" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.587705,1.503905,-1.503905,0.587705,173.1183,-177.2931) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5838" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-6.358936e-2,0.241746,-0.241746,-6.358936e-2,166.4545,48.29976) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5839" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.112789,0.480395,-0.480395,-0.112789,191.6708,18.91615) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5840" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.470476,0.344786,-0.344786,0.470476,100.1539,-7.148430) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5841" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.903283,1.297602,-1.297602,0.903283,113.3661,-172.9191) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5842" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(1.638722,0.413477,-0.413477,1.638722,-56.94251,-106.6588) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5843" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(1.375364,0.841378,-0.841378,1.375364,12.61539,-145.8564) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5844" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.372431,1.257953,-1.257953,0.372431,184.1022,-126.5285) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5845" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.974189,0.807369,-0.807369,0.974189,65.75931,-110.2368) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5846" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.731938,1.633265,-1.633265,-0.731938,366.5094,-93.65480) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5847" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.673132,0.518622,-0.518622,0.673132,85.37160,-46.91760) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5848" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(2.547028e-2,0.998190,-0.998190,2.547028e-2,212.3249,-63.70384) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5849" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-3.605237e-2,0.532086,-0.532086,-3.605237e-2,184.9846,5.822092) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5850" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-1.090290,0.485825,-0.485825,-1.090290,327.9609,93.43394) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5851" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.698354,0.189739,-0.189739,-0.698354,250.6815,104.4086) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5852" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(5.885208e-2,0.812223,-0.812223,5.885208e-2,193.3647,-40.42509) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5853" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.726872,1.565645,-1.565645,0.726872,158.5279,-196.5916) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5854" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.937370,0.984031,-0.984031,-0.937370,345.0698,12.40872) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5855" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-1.744032,-0.332291,0.332291,-1.744032,355.8320,257.4943) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5856" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.222960,1.144285,-1.144285,0.222960,196.1248,-99.21930) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5857" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.343933,1.153051,-1.153051,-0.343933,275.5978,-56.78320) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5858" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.184014,0.803951,-0.803951,-0.184014,226.4862,-20.57292) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5859" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.657759,0.630998,-0.630998,-0.657759,279.0187,39.94792) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5860" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-1.178407,8.005262e-3,-8.005262e-3,-1.178407,303.4147,166.6376) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5861" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-1.188778,0.960756,-0.960756,-1.188778,378.2234,35.00298) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5862" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.580462,-3.074334e-2,3.074334e-2,-0.580462,217.3166,125.9781) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5863" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.867001,0.425050,-0.425050,-0.867001,292.2441,84.68779) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5864" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.700823,0.100133,-0.100133,-0.700823,244.1245,117.0541) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5865" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-1.763055,-0.226403,0.226403,-1.763055,366.6297,244.2414) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5866" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.982450,-1.091297,1.091297,-0.982450,191.5241,304.3507) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5867" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.112597,-0.111700,0.111700,-0.112597,146.0492,101.2028) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5868" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.465116,-0.231915,0.231915,-0.465116,185.7921,145.0584) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5869" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-1.344854,3.164347e-2,-3.164347e-2,-1.344854,328.3710,176.1683) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5870" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.841796,0.711101,-0.711101,-0.841796,310.7677,42.98625) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5871" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.406734,-1.716231,1.716231,-0.406734,63.37569,346.8820) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5872" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.512726,-1.119051,1.119051,-0.512726,124.0951,272.0361) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5873" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-1.009778,0.397051,-0.397051,-1.009778,309.9339,99.57444) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5874" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.342373,-1.254425,1.254425,-0.342373,89.99150,277.7351) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5875" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-1.321413,-5.632474e-2,5.632474e-2,-1.321413,318.3386,186.5905) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5876" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(8.124399e-2,-1.492381,1.492381,8.124399e-2,12.78507,278.1906) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5877" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.735465,-0.521409,0.521409,-0.735465,201.0780,206.1158) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5878" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.826712,-0.390986,0.390986,-0.826712,223.8044,195.0139) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5879" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(9.504403e-2,-1.201923,1.201923,9.504403e-2,33.23421,236.7537) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5880" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.407521,-0.948369,0.948369,-0.407521,122.6155,240.2096) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5881" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.237366,-0.784455,0.784455,0.237366,45.59887,167.7661) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5882" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.297228,-0.331596,0.331596,0.297228,72.15004,100.2089) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5883" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-7.089730e-2,-0.560229,0.560229,-7.089730e-2,105.7138,160.3371) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5884" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-9.284730e-3,-0.591196,0.591196,-9.284730e-3,94.76460,159.8969) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5885" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.647489,-0.895367,0.895367,0.647489,-19.94909,151.6009) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5886" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.206174,-0.655204,0.655204,0.206174,59.88748,152.2020) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5887" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.228684,-1.074090,1.074090,-0.228684,88.07570,243.9143) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5888" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-1.157023,-1.395573,1.395573,-1.157023,192.3591,360.0865) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5889" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-1.029056,-1.277949,1.277949,-1.029056,183.6293,333.8833) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5890" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.838138,-1.332274,1.332274,0.838138,-80.09370,197.6504) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5891" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-9.741253e-2,-1.150852,1.150852,-9.741253e-2,63.91813,244.4753) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5892" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(-0.214987,-0.730718,0.730718,-0.214987,112.6132,195.1310) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5893" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(1.688294,-0.170486,0.170486,1.688294,-108.8011,-29.30468) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5894" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.553777,-0.203849,0.203849,0.553777,46.32707,62.69652) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5895" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(1.162667,-0.637705,0.637705,1.162667,-71.71793,76.11500) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5896" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(1.521722,-0.574611,0.574611,1.521722,-116.7675,39.69527) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-ja.svguse5897" xlink:href="#tips-f03-ja.svgg1768" transform="translate(10, 749.2419140000001) matrix(0.546248,-0.904563,0.904563,0.546248,-6.585200,160.6755) translate(-10, -749.2419140000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="928.052674" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="928.052674" x="10">スライス (領域を複数の矩形に分けてエクスポート) するには</tspan>
</text>
- <rect id="d0e97" display="none" height="1000px" width="288" y="926.17" x="10"/>
+ <rect id="d0e99" display="none" height="1000px" width="288" y="933.25" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e97"/>
+ <use y="0" x="0" xlink:href="#d0e99"/>
</flowRegion>
- <flowDiv xml:space="preserve">新しくレイヤーを作成し、そのレイヤーに、あなたのイメージの一部を覆うように見えない矩形を作成します。ドキュメントの単位がピクセル (デフォルト) になっていることを確認し、グリッドをオンにしてピクセル単位数全体に渡るように矩形をそれぞれグリッドにスナップさせます。各矩形に覚えやすい ID を割り当て、それぞれをそれぞれのファイルへエクスポートします。すると、矩形はそれらがエクスポートされたファイル名を覚えていますので、その後は矩形のいくつかは簡単に再エクスポートできます — エクスポートレイヤーに切り替え、Tab で (または ID で検索して) エクスポートしたいオブジェクトを選び、エクスポートします。または、以下のような、すべての領域を各領域ごとにエクスポートするコマンドでシェルスクリプトやバッチファイルを書くこともできます:</flowDiv>
+ <flowDiv xml:space="preserve">新しくレイヤーを作成し、そのレイヤーに、あなたのイメージの一部を覆うように見えない矩形を作成します。ドキュメントの単位が px (デフォルト) になっていることを確認し、グリッドをオンにして px 単位数全体に渡るように矩形をそれぞれグリッドにスナップさせます。各矩形に覚えやすい ID を割り当て、それぞれをそれぞれのファイルへエクスポートします (<flowSpan font-family="sans serif">ファイル &gt; ビットマップにエクスポート</flowSpan>〔<flowSpan font-weight="bold">Shift+Ctrl+E</flowSpan>〕)。矩形はそれらがエクスポートされたファイル名を覚えていますので、その後は矩形のいくつかは簡単に再エクスポートできます — エクスポートレイヤーに切り替え、Tab で (または ID で検索して) エクスポートしたいオブジェクトを選択し、ダイアログからエクスポートをクリックします。または、以下のような、すべての領域を各領域ごとにエクスポートするコマンドでシェルスクリプトやバッチファイルを書くこともできます:</flowDiv>
</flowRoot>
- <rect id="d0e100" display="none" height="1000px" width="288" y="1052.3" x="10"/>
+ <rect id="d0e108" display="none" height="1000px" width="288" y="1074.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e100"/>
+ <use y="0" x="0" xlink:href="#d0e108"/>
</flowRegion>
<flowDiv xml:space="preserve">inkscape -i area-id -t filename.svg</flowDiv>
</flowRoot>
- <rect id="d0e103" display="none" height="1000px" width="288" y="1070.1" x="10"/>
+ <rect id="d0e111" display="none" height="1000px" width="288" y="1092.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e103"/>
+ <use y="0" x="0" xlink:href="#d0e111"/>
</flowRegion>
<flowDiv xml:space="preserve">-t スイッチは、記憶しているファイル名ヒントを使用することを意味し、その他の場合は -e スイッチでファイル名を指定できます。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1112.4376447999998" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1112.4376447999998" x="10">非線形グラデーション</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1134.4731837999998" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1134.4731837999998" x="10">非線形グラデーション</tspan>
</text>
- <rect id="d0e112" display="none" height="1000px" width="288" y="1117.6" x="10"/>
+ <rect id="d0e120" display="none" height="1000px" width="288" y="1139.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e112"/>
+ <use y="0" x="0" xlink:href="#d0e120"/>
</flowRegion>
<flowDiv xml:space="preserve">SVG バージョン 1.1 は非線形グラデーション (すなわち色の非線形変換) をサポートしていません。しかし、<flowSpan font-style="italic">マルチストップ</flowSpan> グラデーションによってエミュレートすることができます。</flowDiv>
</flowRoot>
- <rect id="d0e118" display="none" height="1000px" width="288" y="1157.2" x="10"/>
+ <rect id="d0e126" display="none" height="1000px" width="288" y="1179.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e118"/>
+ <use y="0" x="0" xlink:href="#d0e126"/>
</flowRegion>
<flowDiv xml:space="preserve">まず、シンプルな 2 停止点のグラデーションを作成します。グラデーションエディタを開き (グラデーションツールでグラデーションハンドルをダブルクリック)、中間に新しい色フェーズを追加します (すこしドラッグしてください)。さらに色フェーズを追加し、それらもドラッグすることでグラデーションは滑らかになります。そしてさらに色フェーズを追加すれば、よりなめらかなグラデーションができあがります。以下は最初の白と黒の 2 停止点のみのグラデーションです:</flowDiv>
</flowRoot>
@@ -337,11 +337,11 @@
<stop id="tips-f04-ja.svgstop843" stop-color="#FFF" offset="1"/>
</linearGradient>
</defs>
- <rect id="tips-f04-ja.svgrect1511" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1247.2152078) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-16.125" fill="url(#tips-f04-ja.svglinearGradient844)"/>
- <rect id="d0e131" display="none" height="1000px" width="288" y="1275.3" x="10"/>
+ <rect id="tips-f04-ja.svgrect1511" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1273.6535047999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-16.125" fill="url(#tips-f04-ja.svglinearGradient844)"/>
+ <rect id="d0e139" display="none" height="1000px" width="288" y="1301.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e131"/>
+ <use y="0" x="0" xlink:href="#d0e139"/>
</flowRegion>
<flowDiv xml:space="preserve">そして以下はさまざまな「非線形」マルチストップグラデーションです (グラデーションエディタで調べてみてください)。</flowDiv>
</flowRoot>
@@ -426,21 +426,21 @@
<stop id="tips-f05-ja.svgstop3630" stop-color="#fff" offset="1"/>
</linearGradient>
</defs>
- <rect id="tips-f05-ja.svgrect3632" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1312.0814238) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-79.393" fill="url(#tips-f05-ja.svglinearGradient4000)"/>
- <rect id="tips-f05-ja.svgrect836" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1312.0814238) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-63.336" fill="url(#tips-f05-ja.svglinearGradient3997)"/>
- <rect id="tips-f05-ja.svgrect847" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1312.0814238) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-47.28" fill="url(#tips-f05-ja.svglinearGradient3994)"/>
- <rect id="tips-f05-ja.svgrect858" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1312.0814238) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-95.45" fill="url(#tips-f05-ja.svglinearGradient3991)"/>
- <rect id="tips-f05-ja.svgrect869" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1312.0814238) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-111.51" fill="url(#tips-f05-ja.svglinearGradient3988)"/>
- <rect id="tips-f05-ja.svgrect879" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1312.0814238) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-31.223" fill="url(#tips-f05-ja.svglinearGradient3985)"/>
- <rect id="tips-f05-ja.svgrect890" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1312.0814238) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-15.167" fill="url(#tips-f05-ja.svglinearGradient3982)"/>
- <rect id="tips-f05-ja.svgrect901" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1312.0814238) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-127.56" fill="url(#tips-f05-ja.svglinearGradient3979)"/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1465.4023238" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1465.4023238" x="10">一風変わった放射状グラデーション</tspan>
+ <rect id="tips-f05-ja.svgrect3632" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1339.2300768) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-79.393" fill="url(#tips-f05-ja.svglinearGradient4000)"/>
+ <rect id="tips-f05-ja.svgrect836" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1339.2300768) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-63.336" fill="url(#tips-f05-ja.svglinearGradient3997)"/>
+ <rect id="tips-f05-ja.svgrect847" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1339.2300768) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-47.28" fill="url(#tips-f05-ja.svglinearGradient3994)"/>
+ <rect id="tips-f05-ja.svgrect858" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1339.2300768) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-95.45" fill="url(#tips-f05-ja.svglinearGradient3991)"/>
+ <rect id="tips-f05-ja.svgrect869" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1339.2300768) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-111.51" fill="url(#tips-f05-ja.svglinearGradient3988)"/>
+ <rect id="tips-f05-ja.svgrect879" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1339.2300768) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-31.223" fill="url(#tips-f05-ja.svglinearGradient3985)"/>
+ <rect id="tips-f05-ja.svgrect890" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1339.2300768) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-15.167" fill="url(#tips-f05-ja.svglinearGradient3982)"/>
+ <rect id="tips-f05-ja.svgrect901" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1339.2300768) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-127.56" fill="url(#tips-f05-ja.svglinearGradient3979)"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1492.5509768" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1492.5509768" x="10">一風変わった放射状グラデーション</tspan>
</text>
- <rect id="d0e150" display="none" height="1000px" width="288" y="1470.6" x="10"/>
+ <rect id="d0e158" display="none" height="1000px" width="288" y="1497.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e150"/>
+ <use y="0" x="0" xlink:href="#d0e158"/>
</flowRegion>
<flowDiv xml:space="preserve">放射状グラデーションは対称性を持ちません。グラデーションツールで、楕円グラデーションの中心ハンドルを <flowSpan font-weight="bold">Shift</flowSpan> キーを押しながらドラッグすると、×字形のグラデーションの<flowSpan font-style="italic">焦点ハンドル</flowSpan>が中心を離れて移動します。もし焦点を中心と同じ位置に戻したい場合は、中心ハンドル付近にドラッグすれば中心にスナップされます。</flowDiv>
</flowRoot>
@@ -454,229 +454,209 @@
<stop id="tips-f06-ja.svgstop1079" stop-color="#000" stop-opacity="0" offset="1"/>
</radialGradient>
</defs>
- <rect id="tips-f06-ja.svgrect1569" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1540.0720768) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="70.82" stroke-width="0.89427pt" fill="url(#tips-f06-ja.svgradialGradient4034)"/>
- <rect id="tips-f06-ja.svgrect1570" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1540.0720768) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="153.67" stroke-width="0.89427pt" fill="url(#tips-f06-ja.svgradialGradient4031)"/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1634.1765358" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1634.1765358" x="10">ページ中央への配置</tspan>
+ <rect id="tips-f06-ja.svgrect1569" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1567.2207298) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="70.82" stroke-width="0.89427pt" fill="url(#tips-f06-ja.svgradialGradient4034)"/>
+ <rect id="tips-f06-ja.svgrect1570" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1567.2207298) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="153.67" stroke-width="0.89427pt" fill="url(#tips-f06-ja.svgradialGradient4031)"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1661.3251888" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1661.3251888" x="10">ページ中央への配置</tspan>
</text>
- <rect id="d0e175" display="none" height="1000px" width="288" y="1639.4" x="10"/>
+ <rect id="d0e183" display="none" height="1000px" width="288" y="1666.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e175"/>
+ <use y="0" x="0" xlink:href="#d0e183"/>
</flowRegion>
- <flowDiv xml:space="preserve">オブジェクトやグループをページの中心あるいは端に配置するには、それを選択し、「整列と配置」コマンド(<flowSpan font-weight="bold">Ctrl+Shift+A</flowSpan>) で <flowSpan font-family="sans serif">基準:</flowSpan> を <flowSpan font-family="sans serif">ページ</flowSpan> にして行います。</flowDiv>
+ <flowDiv xml:space="preserve">オブジェクトやグループなどをページの中心あるいは端に配置するには、それを選択し、「整列と配置」ダイアログ (<flowSpan font-weight="bold">Ctrl+Shift+A</flowSpan>) で <flowSpan font-family="sans serif">基準:</flowSpan> を <flowSpan font-family="sans serif">ページ</flowSpan> にして行います。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1692.4209778" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1692.4209778" x="10">ドキュメントのクリーンアップ</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1719.5696308" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1719.5696308" x="10">ドキュメントのクリーンアップ</tspan>
</text>
- <rect id="d0e193" display="none" height="1000px" width="288" y="1697.6" x="10"/>
+ <rect id="d0e201" display="none" height="1000px" width="288" y="1724.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e193"/>
+ <use y="0" x="0" xlink:href="#d0e201"/>
</flowRegion>
<flowDiv xml:space="preserve">パレットにもはや使われていないたくさんのグラデーション、パターン、あるいはマーカー (正確に言えば、あなたが編集したもの) が残っていても、それは新しいオブジェクトに再利用することができます。しかし、ドキュメントにあわせて整理したければ、ファイルメニューの <flowSpan font-family="sans serif">Def のバキューム</flowSpan> コマンドを使ってください。これはそのドキュメントで使用されていないすべてのグラデーション、パターン、あるいはマーカーを削除し、ファイルサイズを小さくします。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1792.9400898" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1792.9400898" x="10">ビットマップの切り抜きやマスキング</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1820.8225298" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1820.8225298" x="10">XML エディタの隠し機能</tspan>
</text>
- <rect id="d0e205" display="none" height="1000px" width="288" y="1798.1" x="10"/>
+ <rect id="d0e213" display="none" height="1000px" width="288" y="1826" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e205"/>
+ <use y="0" x="0" xlink:href="#d0e213"/>
</flowRegion>
- <flowDiv xml:space="preserve">デフォルトでは、インポートしたビットマップはノードツールで編集できない image 要素になります。これを編集するには、画像に <flowSpan font-family="sans serif">オブジェクトをパターンに</flowSpan> コマンド (<flowSpan font-weight="bold">Alt+I</flowSpan>) を使用します。これでビットマップが <flowSpan font-style="italic">フィル</flowSpan> になった矩形に変換されます。オブジェクトはこれでパスへの変換、ノード編集、他のシェイプとの交差などが行えるようになります。<flowSpan font-family="sans serif">Inkscape の設定</flowSpan> の <flowSpan font-family="sans serif">その他</flowSpan> タブで、常にインポートしたビットマップをパターンとしてフィルにした矩形とするよう設定できます。</flowDiv>
+ <flowDiv xml:space="preserve">XML エディタ (<flowSpan font-weight="bold">Shift+Ctrl+X</flowSpan>) では、外部のテキストエディタを使用せずに、ドキュメントをほとんどすべての面から変更できます。Inkscape は GUI から編集できるよりも多くの SVG 機能をサポートしていますが、XML エディタはこれらの機能を利用する一つの手段です (もしあなたが SVG についてご存知ならば)。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1895.3530978" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1895.3530978" x="10">XML エディタの隠し機能</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1902.3802038" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1902.3802038" x="10">ルーラの単位の変更</tspan>
</text>
- <rect id="d0e229" display="none" height="1000px" width="288" y="1900.6" x="10"/>
+ <rect id="d0e225" display="none" height="1000px" width="288" y="1907.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e229"/>
- </flowRegion>
- <flowDiv xml:space="preserve">XML エディタでは、外部のテキストエディタを使用せずに、ドキュメントをほとんどすべての面から変更できます。Inkscape は GUI から編集できるよりも多くの SVG 機能をサポートしていますが、XML エディタはこれらの機能を利用する一つの手段です (もしあなたが SVG についてご存知ならば)。</flowDiv>
- </flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1965.5760398" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1965.5760398" x="10">ルーラの単位の変更</tspan>
- </text>
- <rect id="d0e238" display="none" height="1000px" width="288" y="1970.8" x="10"/>
- <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
- <flowRegion>
- <use y="0" x="0" xlink:href="#d0e238"/>
+ <use y="0" x="0" xlink:href="#d0e225"/>
</flowRegion>
<flowDiv xml:space="preserve">デフォルトテンプレートでは、ルーラで使用される単位は px (「SVG ユーザ単位」、Inkscape では 0.8pt または 1/90 インチ) です。これは座標の表示や単位メニューの初期値に使われています (マウスポインタをルーラの上に移動させると使用している単位がツールチップに表示されます)。これを変更するには、<flowSpan font-family="sans serif">ドキュメントの設定</flowSpan> (<flowSpan font-weight="bold">Ctrl+Shift+D</flowSpan>) を開き、<flowSpan font-family="sans serif">ページ</flowSpan> タブの <flowSpan font-family="sans serif">デフォルト単位</flowSpan> を変更します。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2057.2080698" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2057.2080698" x="10">スタンプ</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1995.4798208" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1995.4798208" x="10">スタンプ</tspan>
</text>
- <rect id="d0e259" display="none" height="1000px" width="288" y="2062.4" x="10"/>
+ <rect id="d0e246" display="none" height="1000px" width="288" y="2000.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e259"/>
+ <use y="0" x="0" xlink:href="#d0e246"/>
</flowRegion>
<flowDiv xml:space="preserve">オブジェクトの複製を素早く作成するには、<flowSpan font-style="italic">スタンプ</flowSpan> 機能を使います。オブジェクトをドラッグ (または拡大縮小や回転) し、マウスボタンを押している間に <flowSpan font-weight="bold">スペース</flowSpan> キーを押します。その時点でのオブジェクトが「スタンプ」として残ります。好きなだけこれを繰り返せます。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2125.3390088" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2125.3390088" x="10">ペンツールの裏技</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2065.1921568000002" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2065.1921568000002" x="10">ペンツールの裏技</tspan>
</text>
- <rect id="d0e274" display="none" height="1000px" width="288" y="2130.5" x="10"/>
+ <rect id="d0e261" display="none" height="1000px" width="288" y="2070.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e274"/>
+ <use y="0" x="0" xlink:href="#d0e261"/>
</flowRegion>
<flowDiv xml:space="preserve">ペン (ベジエ) ツールで描画中の線を完了させるには以下のオプションがあります:</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2165.3899468)"/>
- <rect id="d0e280" display="none" height="1000px" width="258" y="2159.4" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2105.9768878)"/>
+ <rect id="d0e267" display="none" height="1000px" width="258" y="2100" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e280"/>
+ <use y="0" x="0" xlink:href="#d0e267"/>
</flowRegion>
<flowDiv xml:space="preserve"><flowSpan font-weight="bold">Enter</flowSpan> キーを押す</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2183.4055718)"/>
- <rect id="d0e286" display="none" height="1000px" width="258" y="2177.4" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2123.9925128)"/>
+ <rect id="d0e273" display="none" height="1000px" width="258" y="2118" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e286"/>
+ <use y="0" x="0" xlink:href="#d0e273"/>
</flowRegion>
<flowDiv xml:space="preserve">マウスの左ボタンでダブルクリックする</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2201.5774468)"/>
- <rect id="d0e290" display="none" height="1000px" width="258" y="2195.6" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2142.1643878)"/>
+ <rect id="d0e277" display="none" height="1000px" width="258" y="2136.2" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e290"/>
+ <use y="0" x="0" xlink:href="#d0e277"/>
</flowRegion>
<flowDiv xml:space="preserve">ペンツールを再度選択する</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2219.7024468)"/>
- <rect id="d0e294" display="none" height="1000px" width="258" y="2213.7" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2160.2893878)"/>
+ <rect id="d0e281" display="none" height="1000px" width="258" y="2154.3" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e294"/>
+ <use y="0" x="0" xlink:href="#d0e281"/>
</flowRegion>
<flowDiv xml:space="preserve">他のツールを選択する</flowDiv>
</flowRoot>
- <rect id="d0e298" display="none" height="1000px" width="288" y="2231.7" x="10"/>
+ <rect id="d0e285" display="none" height="1000px" width="288" y="2172.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e298"/>
+ <use y="0" x="0" xlink:href="#d0e285"/>
</flowRegion>
<flowDiv xml:space="preserve">パスが完了していない間 (描画した線が緑色、現在のセグメントは赤色) は、オブジェクトはまだドキュメント上に存在していないことに注意してください。従って、それをキャンセルするには、<flowSpan font-family="sans serif">元に戻す</flowSpan> のではなく、<flowSpan font-weight="bold">Esc</flowSpan> キー (パス全体をキャンセル) または <flowSpan font-weight="bold">Backspace</flowSpan> キー (未完了のパスの最後のセグメントのみ削除) を使用します。</flowDiv>
</flowRoot>
- <rect id="d0e310" display="none" height="1000px" width="288" y="2294" x="10"/>
+ <rect id="d0e297" display="none" height="1000px" width="288" y="2235.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e310"/>
+ <use y="0" x="0" xlink:href="#d0e297"/>
</flowRegion>
<flowDiv xml:space="preserve">既存のパスに新規にサブパスを追加するには、パスを選択し <flowSpan font-weight="bold">Shift</flowSpan> キーを押しながら任意のポイントを描画してください。しかし、既存のパスを伸ばしたいだけならば、Shift を押す必要はありません。単に選択したパスの終点から描画を開始してください。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2357.7008768000005" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2357.7008768000005" x="10">Unicode 値の入力</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2298.9077988" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2298.9077988" x="10">Unicode 値の入力</tspan>
</text>
- <rect id="d0e322" display="none" height="1000px" width="288" y="2362.9" x="10"/>
+ <rect id="d0e309" display="none" height="1000px" width="288" y="2304.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e322"/>
+ <use y="0" x="0" xlink:href="#d0e309"/>
</flowRegion>
<flowDiv xml:space="preserve">テキストツールでは、<flowSpan font-weight="bold">Ctrl+U</flowSpan> を押すことで Unicode と通常モードを切り替えます。Unicode モードでは 4 個の 16 進数のグループを入力することで Unicode 1 文字になりますので、(あなたがそれらの Unicode を知っており、フォントがサポートしている限り) 任意の記号を入力する事ができます。Unicode 入力を終了するには <flowSpan font-weight="bold">Enter</flowSpan> キーを押します。例えば、<flowSpan font-weight="bold">Ctrl+U 2 0 1 4 Enter</flowSpan> で emダッシュ(—) が挿入されます。何も入力せずに Unicode を抜けるには <flowSpan font-weight="bold">Esc</flowSpan> キーを押します。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2462.1121468000006" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2462.1121468000006" x="10">アイコン描画のためのグリッドの使用</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2403.3190688" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2403.3190688" x="10">アイコン描画のためのグリッドの使用</tspan>
</text>
- <rect id="d0e343" display="none" height="1000px" width="288" y="2467.3" x="10"/>
+ <rect id="d0e330" display="none" height="1000px" width="288" y="2408.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e343"/>
+ <use y="0" x="0" xlink:href="#d0e330"/>
</flowRegion>
- <flowDiv xml:space="preserve">24×24 ピクセルのアイコンを作成したい場合は、24×24px のキャンバスを作成 (<flowSpan font-family="sans serif">ドキュメントの設定</flowSpan>) し、グリッドを 0.5px (48×48 のグリッド線に設定) します。フィルのオブジェクトを<flowSpan font-style="italic">偶数</flowSpan>のグリッド線に、ストロークのオブジェクトを<flowSpan font-style="italic">奇数</flowSpan>のグリッド線に配置したら、それをデフォルトの 90dpi (1 px は 1 ビットマップピクセルになります) でエクスポートします。するとアンチエイリアスのかかっていないビットマップ画像が出来上がります。</flowDiv>
+ <flowDiv xml:space="preserve">24×24 ピクセルのアイコンを作成したい場合は、24×24 px のキャンバスを作成 (<flowSpan font-family="sans serif">ドキュメントの設定</flowSpan>) し、グリッドを 0.5 px (48×48 のグリッド線に設定) します。フィルのオブジェクトを<flowSpan font-style="italic">偶数</flowSpan>のグリッド線に、ストロークのオブジェクトを<flowSpan font-style="italic">奇数</flowSpan>のグリッド線に配置したら、それをデフォルトの 90dpi (1 px は 1 ビットマップピクセルになります) でエクスポートします。するとアンチエイリアスのかかっていないビットマップ画像が出来上がります。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2553.7367188000007" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2553.7367188000007" x="10">オブジェクトの回転</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2495.6774318" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2495.6774318" x="10">オブジェクトの回転</tspan>
</text>
- <rect id="d0e361" display="none" height="1000px" width="288" y="2558.9" x="10"/>
+ <rect id="d0e348" display="none" height="1000px" width="288" y="2500.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e361"/>
+ <use y="0" x="0" xlink:href="#d0e348"/>
</flowRegion>
<flowDiv xml:space="preserve">選択ツールの時に、オブジェクトを<flowSpan font-weight="bold">クリック</flowSpan>すると、拡大縮小の矢印が表示され、そのオブジェクト上で<flowSpan font-weight="bold">再度クリック</flowSpan>すると回転およびシフトの矢印が表示されます。角の矢印をクリックおよびドラッグすると、オブジェクトはその中心を軸 (+印が表示されます) として回転します。<flowSpan font-weight="bold">Shift</flowSpan> キーを押すと、対角を軸として回転します。回転軸はドラッグで好きな位置に置くことができます。</flowDiv>
</flowRoot>
- <rect id="d0e373" display="none" height="1000px" width="288" y="2620.4" x="10"/>
+ <rect id="d0e360" display="none" height="1000px" width="288" y="2562.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e373"/>
+ <use y="0" x="0" xlink:href="#d0e360"/>
</flowRegion>
<flowDiv xml:space="preserve">また、キーボードから <flowSpan font-weight="bold">[</flowSpan> および <flowSpan font-weight="bold">]</flowSpan> キーを押すと 15°ずつ回転し、<flowSpan font-weight="bold">Ctrl+[</flowSpan> および <flowSpan font-weight="bold">Ctrl+]</flowSpan> キーを押すと90°ずつ回転します。<flowSpan font-weight="bold">Alt</flowSpan> キーを押しながらだと、ピクセルサイズ単位のゆっくりとした回転になります。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2673.455354800001" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2673.455354800001" x="10">オブジェクトパレットとしての「開く」ダイアログ</tspan>
- </text>
- <rect id="d0e397" display="none" height="1000px" width="288" y="2678.7" x="10"/>
- <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
- <flowRegion>
- <use y="0" x="0" xlink:href="#d0e397"/>
- </flowRegion>
- <flowDiv xml:space="preserve">もしあなたが、他のドキュメントで再利用するための、数多くの小さな SVG ファイルを持っているなら、「開く」ダイアログをパレットのように利用できます。SVG ソースが入っているディレクトリをブックマークリストに追加しておくと素早くアクセスできます。そのディレクトリ内をプレビューで探します。目的のファイルが見つかったら、それをキャンバスにドラッグすると、現在のドキュメント上にインポートされます。</flowDiv>
- </flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2763.690460800001" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2763.690460800001" x="10">影を落とす</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2615.3960678" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2615.3960678" x="10">影を落とす</tspan>
</text>
- <rect id="d0e406" display="none" height="1000px" width="288" y="2768.9" x="10"/>
+ <rect id="d0e384" display="none" height="1000px" width="288" y="2620.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e406"/>
+ <use y="0" x="0" xlink:href="#d0e384"/>
</flowRegion>
<flowDiv xml:space="preserve">(訳注: Inkscape 0.47 では「フィルタ」→「光と影」→「影を落とす」でできます) Inkscape はガウスぼかし SVG フィルタをサポートしていますので、オブジェクトにぼかした影を落とすのも簡単にできます。オブジェクトを選択し、<flowSpan font-weight="bold">Ctrl+D</flowSpan> で複製を作成し、<flowSpan font-weight="bold">PgDown</flowSpan> でオリジナルオブジェクトの真下に置き、それをオリジナルオブジェクトの斜め下にずらします。フィル/ストロークダイアログを開いて、「ぼかし」値を変更します。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2854.632197800001" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2854.632197800001" x="10">パス上にテキストを置く</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2707.0715998" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2707.0715998" x="10">パス上にテキストを置く</tspan>
</text>
- <rect id="d0e421" display="none" height="1000px" width="288" y="2859.8" x="10"/>
+ <rect id="d0e399" display="none" height="1000px" width="288" y="2712.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e421"/>
+ <use y="0" x="0" xlink:href="#d0e399"/>
</flowRegion>
<flowDiv xml:space="preserve">曲線に沿ってテキストを配置するには、テキストと曲線を一緒に選択し、「テキスト」メニューから <flowSpan font-family="sans serif">テキストをパス上に配置</flowSpan> を選びます。テキストはパスの先頭からパスに沿って表示されます。一般に、テキストを沿わせるにはそれ用にパスを作成するのが最適です。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2923.395365800001" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2923.395365800001" x="10">オリジナルを選択する</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2775.8347678" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2775.8347678" x="10">オリジナルを選択する</tspan>
</text>
- <rect id="d0e433" display="none" height="1000px" width="288" y="2928.6" x="10"/>
+ <rect id="d0e411" display="none" height="1000px" width="288" y="2781" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e433"/>
+ <use y="0" x="0" xlink:href="#d0e411"/>
</flowRegion>
<flowDiv xml:space="preserve">パス上に配置したテキスト、リンクオフセット、あるいはクローンがある場合、場合によってはそれらのもととなるオブジェクト/パスを探すのが難しくなるかもしれません。なぜなら、それは直下にあるとか、見えなくしている、あるいはロックされているかもしれないからです。マジックキー <flowSpan font-weight="bold">Shift+D</flowSpan> がそれを助けてくれます。テキスト、リンクオフセット、あるいはクローンを選択し、<flowSpan font-weight="bold">Shift+D</flowSpan> を押すと対応するパス、オフセットソース、あるいはクローンオリジナルが選択されます。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3024.851748800001" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3024.851748800001" x="10">画面の外に出てしまったウィンドウの回復</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2878.0249458" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2878.0249458" x="10">画面の外に出てしまったウィンドウの回復</tspan>
</text>
- <rect id="d0e448" display="none" height="1000px" width="288" y="3030.1" x="10"/>
+ <rect id="d0e426" display="none" height="1000px" width="288" y="2883.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e448"/>
+ <use y="0" x="0" xlink:href="#d0e426"/>
</flowRegion>
<flowDiv xml:space="preserve">ドキュメントを解像度のやディスプレイの数が異なるシステムに移動した場合、Inkscape がウィンドウの位置を記憶しているために、画面の外にウィンドウが表示されてしまうかもしれません。その時は (タスクバーなどを使って) ウィンドウを全画面化して保存し、再び開いてください。<flowSpan font-family="sans serif">Inkscape の設定</flowSpan> の <flowSpan font-family="sans serif">ウィンドウ</flowSpan> タブでウィンドウの位置とサイズの保存をしないように設定すれば、この問題を回避できます。</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3115.730273800001" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3115.730273800001" x="10">透明、グラデーション、そして PostScript エクスポート</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2970.3710607999997" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2970.3710607999997" x="10">透明、グラデーション、そして PostScript エクスポート</tspan>
</text>
- <rect id="d0e463" display="none" height="1000px" width="288" y="3120.9" x="10"/>
+ <rect id="d0e441" display="none" height="1000px" width="288" y="2975.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e463"/>
+ <use y="0" x="0" xlink:href="#d0e441"/>
</flowRegion>
<flowDiv xml:space="preserve">PostScript や EPS 形式は<flowSpan font-style="italic">透明度</flowSpan>をサポートしていません。なので、それを決して PS/EPS にエクスポートしないでください。均一な透明データが単一色を覆っている場合は簡単に解決できます。透明オブジェクトを選択し、スポイトツールに切り替え (<flowSpan font-weight="bold">F7</flowSpan>)、「採取」(不透明度の採取モード) をオフにして、同じオブジェクトをクリックします。表示色が採取され、オブジェクトの背後に割り当てられますが、この時点で透明度は存在しません。すべての透明オブジェクトでこれを繰り返します。透明オブジェクトがいくつかの色の領域を覆っている場合、それに応じて透明オブジェクトを分割し、それぞれにこの手順を適用します。</flowDiv>
</flowRoot>
- <rect id="d0e472" display="none" height="1000px" width="288" y="3225.8" x="10"/>
+ <rect id="d0e450" display="none" height="1000px" width="288" y="3080.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e472"/>
+ <use y="0" x="0" xlink:href="#d0e450"/>
</flowRegion>
<flowDiv xml:space="preserve">グラデーションの PS/EPS へのエクスポートはテキスト (テキストがパスに変換されている場合を除く) やストロークの塗りに対しては機能しません。また、透明度は PS/EPS へのエクスポートでは失われるので、例えば<flowSpan font-style="italic">不透明</flowSpan>な青から <flowSpan font-style="italic">透明</flowSpan>な青へのグラデーションなどは使用できません。次善の策として、グラデーションを<flowSpan font-style="italic">不透明</flowSpan>な青から<flowSpan font-style="italic">不透明な</flowSpan>背景色に置き換えてください。</flowDiv>
</flowRoot>
- <g transform="translate(0, 3287.320529800001)">
+ <g transform="translate(0, 3143.4486177999997)">
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
<linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.149642,0.000000,0.000000,0.465194,-0.130153,3495.428)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
<radialGradient id="radialGradient2456" xlink:href="#linearGradient666" gradientUnits="userSpaceOnUse" cy="1036.5" cx="233.92" gradientTransform="scale(1.825742,0.547723)" r="98.26" inkscape:collect="always"/>
diff --git a/share/tutorials/tutorial-tips.nl.svg b/share/tutorials/tutorial-tips.nl.svg
new file mode 100644
index 000000000..6e1668324
--- /dev/null
+++ b/share/tutorials/tutorial-tips.nl.svg
@@ -0,0 +1,700 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- DO NOT EDIT THIS FILE. It is produced automatically from a DocBook source (*.xml) by tutorial-svg.xsl. -->
+<svg id="svg1" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="tutorial-basic.svg" xmlns:string="http://www.jclark.com/xt/java/java.lang.String" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:version="0.32" height="3170pt" width="256pt" version="1.1" xmlns:cc="http://web.resource.org/cc/" xmlns:xlink="http://www.w3.org/1999/xlink" inkscape:version="0.48" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <sodipodi:namedview id="base" inkscape:window-x="0" inkscape:window-y="0" snaptoguides="true" inkscape:zoom="2.0000000" inkscape:cx="160.00000" inkscape:cy="3864.0000" inkscape:window-width="780" showborder="false" inkscape:window-height="580" showguides="true"/>
+ <defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
+ <linearGradient id="linearGradient841">
+ <stop id="stop842" stop-color="#0082ab" offset="0"/>
+ <stop id="stop843" stop-color="#FFF" stop-opacity="0" offset="1"/>
+ </linearGradient>
+ <linearGradient id="linearGradient1657" y2="0.91667" xlink:href="#linearGradient841" y1="0.16666" x2="0.51619" x1="0.51619"/>
+ <linearGradient id="linearGradient666">
+ <stop id="stop667" stop-color="#FFF" stop-opacity="0.336" offset="0"/>
+ <stop id="stop668" stop-color="#FFF" stop-opacity="0" offset="1"/>
+ </linearGradient>
+ <radialGradient id="radialGradient669" xlink:href="#linearGradient666"/>
+ </defs>
+ <metadata id="metadata4" xmlns:cc="http://creativecommons.org/ns#">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g id="layer1" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Layer 1" inkscape:groupmode="layer">
+ <rect id="rect582" fill-rule="evenodd" rx="0" ry="6.1828" height="69.248" width="319.89" y="0.27753" x="0.18215" fill="url(#linearGradient1657)"/>
+ <path id="path93" stroke-width="1.0000000pt" fill="#FFF" d="M150.97,4.9606h-9.58v0.613h0.29c1.29,0,1.43,0.0652,1.43,0.6129v0.3782,6.2073,0.378c0,0.548-0.14,0.613-1.43,0.613h-0.29v0.613h9.79l0.31-3.482h-0.7c-0.2,0.913-0.57,1.722-0.95,2.1-0.5,0.522-1.41,0.769-2.74,0.769h-1.06c-0.48,0-0.87-0.078-1.02-0.195-0.11-0.079-0.12-0.157-0.12-0.431v-3.3251h0.31c0.98,0,1.37,0.0783,1.69,0.3521,0.42,0.339,0.58,0.756,0.61,1.526h0.75v-4.2776h-0.75c-0.08,1.278-0.72,1.7866-2.23,1.7866h-0.38v-2.9734c0-0.5607,0.14-0.652,1-0.652h0.83c1.4,0,2.09,0.1173,2.63,0.4825,0.52,0.3391,0.91,1.0694,1.15,2.243h0.68l-0.22-3.3385zm-21.15,5.2294h1.8c1.43,0,2.18-0.091,2.82-0.339,1.13-0.4434,1.77-1.278,1.77-2.3082,0-0.9912-0.56-1.7475-1.61-2.1779-0.62-0.2608-1.61-0.4043-2.71-0.4043h-5.58v0.613h0.29c1.29,0,1.43,0.0652,1.43,0.6129v0.3782,6.2073,0.378c0,0.548-0.14,0.613-1.43,0.613h-0.29v0.613h5.36v-0.613h-0.42c-1.29,0-1.43-0.065-1.43-0.613v-0.378-2.582zm0-0.6128v-3.3385c0-0.5999,0.09-0.6651,0.97-0.6651h1.02c1.66,0,2.44,0.639,2.44,2.0213,0,1.3433-0.81,1.9823-2.5,1.9823h-1.93zm-13.87-4.7991h-0.67l-3.67,7.6029c-0.31,0.678-0.38,0.769-0.62,0.978-0.25,0.248-0.7,0.404-1.13,0.404h-0.06v0.613h4.22v-0.613h-0.32c-0.86,0-1.29-0.247-1.29-0.743,0-0.156,0.05-0.339,0.14-0.548l0.53-1.147h4.22l0.87,1.747c0.09,0.196,0.12,0.287,0.12,0.352,0,0.209-0.4,0.339-0.99,0.339h-0.66v0.613h4.94v-0.613h-0.23c-0.79,0-0.97-0.104-1.34-0.834l-4.06-8.1509zm-0.78,2.1387l1.8,3.7032h-3.57l1.77-3.7032zm-11-2.0474h-0.61l-0.63,0.7694c-1.13-0.6782-1.76-0.8738-2.82-0.8738-1.55,0-2.825,0.5086-3.909,1.565-1.02,0.9911-1.498,2.0865-1.498,3.4297,0,2.8043,2.247,4.8123,5.387,4.8123,2.55,0,4.18-1.226,4.54-3.417l-0.75-0.104c-0.16,0.691-0.35,1.16-0.63,1.552-0.66,0.9-1.68,1.356-2.97,1.356-2.358,0-3.473-1.343-3.473-4.1471,0-1.4736,0.239-2.4647,0.781-3.2472,0.494-0.7303,1.482-1.1867,2.502-1.1867,1.12,0,2.1,0.4825,2.71,1.3171,0.3,0.4304,0.54,0.939,0.91,1.9431h0.7l-0.24-3.7688zm-15.955,0.013h-0.589l-0.638,0.7825c-0.749-0.5869-1.769-0.8999-2.901-0.8999-2.088,0-3.491,1.0955-3.491,2.7256,0,1.4215,0.861,2.1257,3.204,2.6214l1.514,0.313c1.18,0.248,1.291,0.274,1.626,0.482,0.478,0.3,0.733,0.731,0.733,1.239,0,0.522-0.239,0.952-0.717,1.304-0.526,0.379-1.052,0.522-1.928,0.522-1.18,0-2.025-0.3-2.774-0.978-0.669-0.613-1.004-1.226-1.243-2.23h-0.686l0.064,3.717h0.622l0.717-0.887c1.068,0.717,1.961,0.978,3.347,0.978,2.343,0,3.842-1.122,3.842-2.869,0-0.809-0.335-1.5-0.957-1.9954-0.43-0.3391-1.052-0.5608-2.327-0.8216l-1.705-0.3521c-1.419-0.3-2.088-0.8086-2.088-1.6041,0-0.9128,0.908-1.5388,2.263-1.5388,1.116,0,2.024,0.3912,2.662,1.1346,0.462,0.5347,0.749,1.0824,0.956,1.7475h0.686l-0.192-3.3907zm-21.55,5.2296v-3.5473-0.3782c0-0.5477,0.144-0.6129,1.435-0.6129h0.303v-0.613h-5.244v0.613h0.287c1.291,0,1.434,0.0652,1.434,0.6129v0.3782,6.2073,0.378c0,0.548-0.143,0.613-1.434,0.613h-0.287v0.613h5.244v-0.613h-0.303c-1.291,0-1.435-0.065-1.435-0.613v-0.378-1.656l1.849-1.5258,2.774,3.3258c0.255,0.313,0.319,0.417,0.319,0.547,0,0.209-0.303,0.3-1.084,0.3h-0.494v0.613h5.451v-0.613h-0.303c-0.877,0-1.1-0.091-1.562-0.652l-3.857-4.551,2.375-1.9431c0.765-0.6651,1.737-1.0433,2.693-1.0433v-0.613h-4.909v0.613h0.399c0.733,0,1.036,0.1173,1.036,0.3912,0,0.1826-0.319,0.5608-0.781,0.939l-3.906,3.2082zm-17.82-5.1514h-3.283v0.613h0.398c0.813,0,1.18,0.1043,1.467,0.4303v5.5421c0,1.787-0.319,2.165-1.849,2.217v0.613h4.543v-0.613c-1.515-0.052-1.834-0.43-1.834-2.217v-4.8379l7.109,7.8509h0.67v-6.7685c0-1.7866,0.319-2.1648,1.849-2.2169v-0.613h-4.543v0.613c1.514,0.0521,1.833,0.4303,1.833,2.2169v4.0945l-6.36-6.9244zm-10.36,1.6041v-0.3782c0-0.5477,0.143-0.6129,1.418-0.6129h0.319v-0.613h-5.276v0.613h0.319c1.291,0,1.435,0.0652,1.435,0.6129v0.3782,6.2073,0.378c0,0.548-0.144,0.613-1.435,0.613h-0.319v0.613h5.276v-0.613h-0.319c-1.275,0-1.418-0.065-1.418-0.613v-0.378-6.2073z"/>
+ <use id="use1325" opacity="0.0786517" xlink:href="#path93" transform="matrix(2.39436,0,0,2.331219,-82.96365,-14.49494)" height="1052.3622" width="320" y="0" x="0"/>
+ <g id="g1798" fill-rule="evenodd" transform="translate(-1.250000e-6,0.000000)">
+ <path id="path691" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,5.149671,-45.83576)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient669)"/>
+ <path id="path690" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,2.022526,-44.58496)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient669)"/>
+ <path id="path689" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,-3.397884,-48.75451)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient669)"/>
+ <path id="path688" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,8.068429,-48.33756)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient669)"/>
+ <path id="path674" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,12.02955,-53.13256)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient669)"/>
+ <path id="path673" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,9.855679,-58.05951)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient669)"/>
+ <path id="path672" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,5.269166,-61.39511)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient669)"/>
+ <path id="path671" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,0.265717,-60.76966)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient669)"/>
+ <path id="path670" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,-3.903834,-56.18316)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient669)"/>
+ <path id="path665" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,-6.614049,-53.47301)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient669)"/>
+ <g id="g839" transform="matrix(5.883700e-2,0.000000,0.000000,5.883700e-2,-4.768899,-3.296641)">
+ <path id="path805" d="M397.64,320.25l-117.25-37.73-29.65-157.69,94.34-95.683,48.52,17.52,90.3,88.953-86.26,184.63z" stroke="#000" stroke-width="0.93619299pt" fill="#FFF"/>
+ <path id="path1791" d="M476.96,339.17c18.82,3.77,22.59,16.94,18.82,20.71-3.76,3.76-13.17,7.53-20.7,1.88-7.54-5.65-7.54-18.82,1.88-22.59z" stroke-width="1.0000000pt" fill="#000"/>
+ <path id="path1792" d="M286.46,340.43c-1.83,0.49-17.16-12.72-29.29-6.6s-20.28,19.83-8.94,25.45c11.33,5.62,19.43-0.86,29.37-7.84s9.58-8.32,8.86-11.01z" stroke-width="1.0000000pt" fill="#000"/>
+ <path id="path1793" d="M510.36,306.93c10.23-2.56,33.88,0,30.12,15.06-3.77,15.06-35.77,9.41-56.48,1.88-1.88-15.06,21.53-15.74,26.36-16.94z" stroke-width="1.0000000pt" fill="#000"/>
+ <path id="path831" d="M359.24,21.363c-11.31,0-22.61,4.32-31.27,12.989l-154.1,154.06c-8.49,8.5-12.76,19.55-12.93,30.64h-0.06c0,0.04,0.06,0.07,0.06,0.11,0,0.19-0.06,0.37-0.06,0.56h0.27c2.95,11.22,79.15,25.52,87.65,34.02,12.84,12.84-49.23,22.27-36.4,35.11,12.84,12.84,77.59,24.84,90.43,37.68s-26.23,26.51-13.39,39.35c12.83,12.84,55.96-3.21,48.15,30.28,17.34,17.34,53.51,9.06,77.73-8.28,12.84-12.84-24.63-11.7-11.79-24.54s45.25-12.91,72.56-43.62c-10.99-17.1-46.98-24.38-34.14-37.22s37.8-6.32,91.66-30.78c26.29-11.94,24.12-21.01,24.02-32-0.01-0.23,0-0.44,0-0.67h-0.06c-0.17-11.09-4.47-22.14-12.96-30.64l-154.07-154.06c-8.66-8.669-19.99-12.989-31.3-12.989zm-1.32,20.04c5.03,0.131,9.1,3.965,17.06,9.128l72.79,53.979c0.8,0.51,1.55,1.05,2.25,1.61,0.7,0.55,1.34,1.14,1.93,1.72,0.6,0.59,1.14,1.18,1.64,1.79s0.95,1.24,1.35,1.87c0.4,0.64,0.75,1.28,1.05,1.93s0.53,1.33,0.73,1.99,0.37,1.32,0.47,1.99,0.15,1.35,0.15,2.02l-43.13-20.831-4.3,32.561-23.72-11.12-36.63,24.46-14.02-48.33-18.05,42.28-50.41,5.03,0.56-22.44c0-5.39,29.06-43.124,46.75-52.107l32.39-23.259c4.78-3.097,8.13-4.35,11.14-4.271zm-66.99,220.21c22.94,5.95,48.47,13.76,68.95,13.9l0.88,9.22c-17.54-1.81-54.65-10.28-63.4-14.75l-6.43-8.37z" stroke-width="1.0000000pt" fill="#000"/>
+ </g>
+ </g>
+ <path id="use2086" style="color:#000000;" d="m100.21,10.827,5.6958,0-3.4988,11.473,6.4281,0-0.5696,1.8715-6.4281,0-1.546,4.7193c-1.3019,4.0142-2.6851,8.8691-4.1498,14.565-1.4646,5.6415-2.1969,8.9234-2.1969,9.8455,0,1.2476,0.5696,1.8715,1.7088,1.8715,2.0071,0,4.421-2.7665,7.2417-8.2995,0.27125-0.5967,0.6781-1.329,1.2205-2.1969l1.6274,0.81368c-2.1156,4.3939-3.6887,7.2146-4.7194,8.4623-2.2241,2.658-4.5837,3.987-7.079,3.987-1.6816,0-3.0377-0.51533-4.0684-1.546-1.0307-1.0849-1.546-2.4682-1.546-4.1498,0-1.5189,0.2439-3.2276,0.73231-5.1262,0.54247-2.1156,2.2783-8.1911,5.2076-18.226l1.3833-4.7193h-6.5095l0.65093-1.8715h6.5095l3.9057-11.473zm40.901,10.822,6.1026,0c-5.1533,16.436-7.73,26.851-7.73,31.245,0,1.6274,0.43397,2.441,1.3019,2.441,1.0306,0,2.2512-0.97642,3.6616-2.9293,1.4646-2.0071,2.7394-4.4752,3.8243-7.4045l1.7901,0.73231c-2.875,8.1368-6.4552,12.205-10.741,12.205-3.6887,0-5.533-2.0613-5.533-6.184,0-1.0849,0.13562-2.8479,0.40684-5.2889-2.1156,3.2547-3.8243,5.6144-5.1262,7.079-2.6038,2.9293-5.5602,4.3939-8.8691,4.3939-1.9528,0-3.5802-0.67807-4.8821-2.0342s-1.9528-3.0377-1.9528-5.0448c0-0.97642,0.81369-4.2583,2.4411-9.8455l1.4646-5.0448c1.6273-5.5873,2.441-9.0319,2.441-10.334,0-1.0307-0.35256-1.546-1.0578-1.546-2.2783,0-5.2889,3.5802-9.0319,10.741l-1.7901-0.89505c4.1226-8.4623,8.2724-12.693,12.449-12.693,1.5189,0,2.7394,0.56958,3.6616,1.7087,0.97644,1.1392,1.4646,2.6309,1.4646,4.4752,0,2.2783-0.54244,5.1262-1.6273,8.5436l-2.197,6.9163c-1.7901,5.6415-2.6852,8.9234-2.6852,9.8455,0,1.8986,0.97644,2.8479,2.9293,2.8479,1.7358,0,3.6344-1.0578,5.6958-3.1734,2.1156-2.1156,4.0141-4.9092,5.6958-8.3809,2.5495-5.2618,5.1804-12.721,7.8927-22.376zm24.058-10.822,5.6958,0-3.4988,11.473,6.4281,0-0.56959,1.8715-6.4281,0-1.546,4.7193c-1.3019,4.0142-2.6852,8.8691-4.1498,14.565-1.4646,5.6415-2.1969,8.9234-2.1969,9.8455,0,1.2476,0.56959,1.8715,1.7088,1.8715,2.007,0,4.421-2.7665,7.2417-8.2995,0.27125-0.5967,0.67809-1.329,1.2205-2.1969l1.6274,0.81368c-2.1156,4.3939-3.6887,7.2146-4.7194,8.4623-2.2241,2.658-4.5837,3.987-7.079,3.987-1.6816,0-3.0378-0.51533-4.0684-1.546-1.0306-1.0849-1.546-2.4682-1.546-4.1498,0-1.5189,0.24428-3.2276,0.73231-5.1262,0.54248-2.1156,2.2783-8.1911,5.2076-18.226l1.3833-4.7193h-6.5095l0.65093-1.8715h6.5095l3.9057-11.473zm28.154,12.287c-3.9057-0.217-7.3774,3.6887-10.415,11.717-2.1156,5.5873-3.1733,10.605-3.1733,15.053,0,4.1226,1.8172,6.184,5.4516,6.184,2.9293,0,5.4788-1.8715,7.6486-5.6144,1.4104-2.3868,2.6309-5.533,3.6616-9.4387,1.0306-3.9599,1.6273-7.6757,1.7901-11.147,0.21693-4.2854-1.4375-6.5366-4.9635-6.7536zm-0.0813-1.8715c3.2005,0,5.8043,1.2748,7.8114,3.8243,2.007,2.4953,3.0106,5.75,3.0106,9.7642,0,4.9363-1.763,9.9269-5.2889,14.972-3.7972,5.4245-8.408,8.1368-13.833,8.1368-3.309,0-6.0212-1.1392-8.1368-3.4175-2.1156-2.3326-3.1734-5.2889-3.1734-8.8691,0-6.0755,2.2241-11.825,6.6722-17.25,3.9057-4.7736,8.2182-7.1604,12.938-7.1604zm15.867,12.856-1.7088-0.73231c1.4104-3.4717,3.1191-6.3467,5.1262-8.625,2.0071-2.3326,3.7972-3.4988,5.3703-3.4988,3.526,0,5.2889,2.5767,5.2889,7.73,0,0.92217-0.1626,2.7665-0.48818,5.533,3.7429-8.842,7.73-13.263,11.961-13.263,1.1934,0,2.1969,0.37972,3.0106,1.1392,0.86793,0.70519,1.3019,1.5731,1.3019,2.6038,0,0.86793-0.29823,1.6002-0.89506,2.1969-0.59668,0.5967-1.329,0.89505-2.1969,0.89505-1.8443,0-2.7665-1.0578-2.7665-3.1734,0-0.5967-0.18995-0.89505-0.56956-0.89505-0.54247,0-1.3019,0.48821-2.2783,1.4646-0.97644,0.97642-1.8172,2.1156-2.5224,3.4175-2.1698,3.9057-5.6958,13.236-10.578,27.991h-6.1026c2.5496-7.6486,4.204-13.236,4.9635-16.762,1.1934-5.533,1.7901-9.5472,1.7901-12.042,0-2.658-0.43397-3.987-1.3019-3.987-0.75943,0-1.8715,0.97642-3.3361,2.9293-1.4104,1.9528-2.7665,4.3125-4.0684,7.079zm45.973-31.245c1.0306,0,1.8986,0.37972,2.6038,1.1392,0.75944,0.70519,1.1392,1.5731,1.1392,2.6038s-0.37991,1.9257-1.1392,2.6851c-0.70518,0.75944-1.5731,1.1392-2.6038,1.1392-1.0306,0-1.9257-0.37972-2.6852-1.1392-0.75944-0.75944-1.1392-1.6545-1.1392-2.6851,0-1.0307,0.37991-1.8986,1.1392-2.6038,0.75943-0.75944,1.6545-1.1392,2.6852-1.1392zm1.2205,42.718,1.6273,0.81368c-3.6344,7.7028-7.5944,11.554-11.88,11.554-1.5189,0-2.7665-0.54245-3.7429-1.6274-0.97644-1.1392-1.4646-2.5767-1.4646-4.3125,0-1.1934,0.16261-2.3054,0.48819-3.3361s1.2205-3.3361,2.6852-6.9163l3.092-7.4045c1.8443-4.3939,2.7665-7.3503,2.7665-8.8691,0-1.0849-0.46109-1.6274-1.3833-1.6274-1.8986,0-4.5024,2.9835-7.8113,8.9505l-1.72-19.042c3.8514-7.0519,7.5401-10.578,11.066-10.578,1.4646,0,2.658,0.54246,3.5802,1.6274,0.92215,1.0849,1.3832,2.4953,1.3832,4.2311,0,2.0613-1.112,5.8856-3.3361,11.473l-3.4175,8.5437c-1.4104,3.526-2.1156,5.8314-2.1156,6.9163,0,0.97642,0.43397,1.4646,1.3019,1.4646,1.0306,0,2.3597-0.92217,3.987-2.7665,1.6816-1.8986,3.2819-4.2854,4.8008-7.1604zm27.584-22.295c-1.6273-0.1085-3.5259,0.8408-5.6958,2.8479-2.1156,1.9528-4.0955,4.5837-5.9399,7.8927-3.6887,6.5637-5.533,12.07-5.533,16.518,0,3.4717,1.3561,5.2076,4.0684,5.2076,4.3939,0,8.5436-4.3125,12.449-12.938,2.658-5.8585,4.1498-10.713,4.4752-14.565,0.10865-1.4104-0.18996-2.5767-0.89503-3.4988-0.70522-0.92217-1.6816-1.4104-2.9293-1.4646zm6.8349-0.97642,5.7771,0c-1.3561,3.6344-3.2005,8.9505-5.533,15.948-2.4953,7.5401-3.743,12.666-3.743,15.379,0,1.1392,0.43397,1.7087,1.3019,1.7087,1.8986,0,4.5566-3.6887,7.9741-11.066l1.7901,0.73232c-2.2783,4.9363-4.2312,8.3267-5.8585,10.171-1.6274,1.8443-3.4717,2.7665-5.5331,2.7665-3.3632,0-5.0448-1.5189-5.0448-4.5566,0-0.81368,0.2439-2.4682,0.73231-4.9635-3.8514,6.401-7.9741,9.6014-12.368,9.6014-2.7665,0-5.0177-0.92217-6.7536-2.7665-1.7358-1.8443-2.6038-4.2583-2.6038-7.2418,0-6.184,2.4411-12.178,7.3231-17.982,4.8821-5.8585,9.8998-8.7878,15.053-8.7878,2.7123,0,4.7736,1.4918,6.184,4.4752l1.3019-3.4175zm16.708-17.82,0.48822-1.8715c4.0684-0.16275,8.6793-0.43396,13.833-0.81368-0.43393,1.4646-0.75944,2.5224-0.9764,3.1734-0.59669,1.6816-1.4375,4.2311-2.5224,7.6486l-6.5908,21.481c-3.1462,10.252-4.7193,16.545-4.7193,18.877,0,1.6816,0.48819,2.5224,1.4646,2.5224,1.3561,0,3.0377-1.4646,5.0448-4.3939,1.0307-1.5189,2.197-3.526,3.4988-6.0212l1.8715,0.89505c-1.6274,2.9835-2.8479,5.0991-3.6616,6.3467-2.4953,3.7429-5.3432,5.6144-8.5437,5.6144-1.6273,0-2.9564-0.5967-3.987-1.7901s-1.546-2.7123-1.546-4.5566c0-2.2783,0.92219-6.4281,2.7665-12.449l7.1-41.415c1.5731-5.1533,2.3597-8.0554,2.3597-8.7064,0-0.97642-0.37952-1.6274-1.1392-1.9528-0.75944-0.37972-2.3597-0.5967-4.8007-0.65094z" fill-rule="nonzero" sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" fill-opacity="0.110769" fill="#FFF"/>
+ <text id="text7519" opacity="0.5" style="writing-mode:lr-tb;text-anchor:start;text-align:start;" line-height="125%" font-weight="normal" xml:space="preserve" transform="matrix(0,1,-1,0,0,0)" font-style="normal" font-stretch="normal" font-size="6.96932268px" font-variant="normal" y="-326.81229" x="3.6203015" font-family="sans" sodipodi:linespacing="125%" fill="#000000"><tspan id="tspan7521" sodipodi:role="line" x="3.6203015" style="letter-spacing:0.29056421;" y="-326.81229">Gebruik <tspan id="tspan7523" font-weight="bold">Ctrl+pijl omlaag</tspan> om te scrollen </tspan></text>
+ <path id="path7527" opacity="0.5" style="color:#000000;" sodipodi:type="star" sodipodi:sides="3" fill-rule="evenodd" fill="#000" sodipodi:r1="7.6034532" sodipodi:r2="3.8017266" sodipodi:arg1="0.62024949" sodipodi:arg2="1.667447" transform="matrix(0.614962,0.04549602,0.06191898,-0.451855,112.4558,236.80469)" inkscape:randomized="0" sodipodi:cy="193.40422" sodipodi:cx="332.34018" inkscape:rounded="0" inkscape:flatsided="true" d="m338.53,197.82-13.108-1.2709,7.6547-10.717,5.4534,11.987z"/>
+ <text id="text4226" style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-family="Times New Roman" font-weight="normal" xml:space="preserve" font-style="italic" font-stretch="normal" line-height="125%" font-variant="normal" y="24.862183" x="127.49774" stroke-width="1pt" sodipodi:linespacing="125%" fill="#ffffff"><g id="g5367" style="writing-mode:lr-tb;text-anchor:start;text-align:start;" transform="translate(-1.25e-6,0)" font-size="14.5px" line-height="125%"><tspan id="tspan4616" sodipodi:role="line">handleiding</tspan></g><use id="use5370" opacity="0.0786517" style="writing-mode:lr-tb;text-anchor:start;text-align:start;" line-height="125%" xlink:href="#path93" transform="matrix(2.39436,0,0,2.331219,-79.37211,18.142125)" height="1052.3622" width="320" font-size="6.137362px" y="0" x="0"/></text>
+ </g>
+ <text id="text1920" style="writing-mode:lr-tb;text-anchor:start;" font-family="sans" font-size="7.0000000" font-style="normal" transform="scale(1.130730,1.130730)" font-stretch="normal" font-variant="normal" y="18.25828" x="176.24451" font-weight="normal" fill="#ffffff">
+ <tspan id="tspan1668" style="letter-spacing:2.1813099;" dx="0 -0.57057059 0 0 0 0 0" fill="#ffffff">::</tspan>
+ </text>
+ <rect id="d0e12" display="none" height="1000px" width="264" y="36" x="35"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;" font-family="sans" font-size="7.2" line-height="150%" font-weight="normal" font-style="italic" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e12"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Deze handleiding demonstreert verschillende tips en trucs die gebruikers leerden door het gebruik van Inkscape, alsook enkele “verborgen” features die je werk kunnen versnellen.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="89.367967" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="89.367967" x="10">Radiale positionering met behulp van Tegelen met klonen</tspan>
+ </text>
+ <rect id="d0e21" display="none" height="1000px" width="288" y="94.568" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e21"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Het gebruik van <flowSpan font-family="sans serif">Tegelen met klonen</flowSpan> is eenvoudig in te zien voor rechthoekige rasters en patronen. Maar wat indien je <flowSpan font-style="italic">radiale</flowSpan> positionering nodig hebt, waar objecten een gemeenschappelijk rotatiemiddelpunt hebben. Dat is ook mogelijk!</flowDiv>
+ </flowRoot>
+ <rect id="d0e30" display="none" height="1000px" width="288" y="144.34" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e30"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Indien je radiaal patroon slechts 3, 4, 6, 8, of 12 elementen bevat, probeer dan P3-, P31M-, P3M1-, P4-, P4M-, P6- of P6M-symmetrie. Deze geven een mooi resultaat voor sneeuwvlokken en dergelijke. Dit is echter een meer algemene methode.</flowDiv>
+ </flowRoot>
+ <rect id="d0e33" display="none" height="1000px" width="288" y="194.12" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e33"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Kies de P1-symmetrie (eenvoudige verplaatsing) en <flowSpan font-style="italic">compenseer</flowSpan> vervolgens voor de verplaatsing door naar de tab <flowSpan font-family="sans serif">Verplaatsing</flowSpan> te gaan en <flowSpan font-family="sans serif">Per rij / Y-verplaatsing</flowSpan> en <flowSpan font-family="sans serif">Per kolom / X-verplaatsing</flowSpan> beide op -100% in te stellen. Nu zullen alle klonen exact op het origineel liggen. Alles wat nu nog gedaan moet worden is naar de tab <flowSpan font-family="sans serif">Rotatie</flowSpan> te gaan en een rotatie per kolom in te stellen. Creëer vervolgens het patroon met een rij en meerdere kolommen. Hier is bijvoorbeeld een patroon gemaakt uit een horizontale lijn met 30 kolommen en elke kolom geroteerd over 6 graden:</flowDiv>
+ </flowRoot>
+ <path id="tips-f01-nl.svgpath25" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" d="M81.5,58.9h117.5" inkscape:tile-w="117.80000" transform="translate(10, 305.09438) " stroke-dashoffset="0.0000000" stroke="#000" stroke-linecap="butt" inkscape:tile-h="0.30000001" stroke-miterlimit="4.0000000" inkscape:tile-cx="160.25000" inkscape:tile-cy="346.50000" stroke-width="0.30000001" fill="none"/>
+ <use id="tips-f01-nl.svguse55" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.994522,0.104528,-0.104528,0.994522,6.925170,-14.33743) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse56" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.978148,0.207912,-0.207912,0.978148,15.31072,-27.87239) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse57" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.951057,0.309017,-0.309017,0.951057,25.06545,-40.45673) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse58" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.913545,0.406737,-0.406737,0.913545,36.08194,-51.95277) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse59" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.866025,0.500000,-0.500000,0.866025,48.23990,-62.23401) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse60" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.809017,0.587785,-0.587785,0.809017,61.40597,-71.18799) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse61" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.743145,0.669131,-0.669131,0.743145,75.43562,-78.71674) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse62" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.669131,0.743145,-0.743145,0.669131,90.17562,-84.73774) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse63" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.587785,0.809017,-0.809017,0.587785,105.4642,-89.18526) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse64" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.500000,0.866025,-0.866025,0.500000,121.1340,-92.01010) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse65" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.406737,0.913545,-0.913545,0.406737,137.0132,-93.18140) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse66" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.309017,0.951057,-0.951057,0.309017,152.9274,-92.68676) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse67" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.207912,0.978148,-0.978148,0.207912,168.7031,-90.53114) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse68" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(0.104528,0.994522,-0.994522,0.104528,184.1673,-86.73846) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse69" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(6.123032e-17,1.000000,-1.000000,6.123032e-17,199.1500,-81.35000) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse70" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.104528,0.994522,-0.994522,-0.104528,213.4874,-74.42481) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse71" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.207912,0.978148,-0.978148,-0.207912,227.0224,-66.03933) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse72" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.309017,0.951057,-0.951057,-0.309017,239.6068,-56.28455) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse73" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.406737,0.913545,-0.913545,-0.406737,251.1028,-45.26806) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse74" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.500000,0.866025,-0.866025,-0.500000,261.3840,-33.11010) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse75" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.587785,0.809017,-0.809017,-0.587785,270.3380,-19.94403) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse76" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.669131,0.743145,-0.743145,-0.669131,277.8668,-5.914380) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse77" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.743145,0.669131,-0.669131,-0.743145,283.8877,8.825618) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse78" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.809017,0.587785,-0.587785,-0.809017,288.3353,24.11421) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse79" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.866025,0.500000,-0.500000,-0.866025,291.1601,39.78401) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse80" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.913545,0.406737,-0.406737,-0.913545,292.3314,55.66320) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse81" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.951057,0.309017,-0.309017,-0.951057,291.8368,71.57745) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse82" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.978148,0.207912,-0.207912,-0.978148,289.6811,87.35318) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f01-nl.svguse83" xlink:href="#tips-f01-nl.svgpath25" transform="translate(10, 305.09438) matrix(-0.994522,0.104528,-0.104528,-0.994522,285.8885,102.8173) translate(-10, -305.09438)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
+ <rect id="d0e61" display="none" height="1000px" width="288" y="434.89" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e61"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Om hier een wijzerplaat van een klok van te maken is het centrale deel wegsnijden (ontlink eerst de klonen voor booleaanse operaties) of overtekenen met een witte cirkel.</flowDiv>
+ </flowRoot>
+ <rect id="d0e64" display="none" height="1000px" width="288" y="472.37" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e64"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Interessantere effecten kunnen gemaakt worden door van zowel rijen als kolommen gebruik te maken. Hier is een patroon met 10 kolommen en 8 rijen met een rotatie van 2 graden per rij en 18 per kolom. Elke groep lijnen is hier een “kolom” zodat de groepen 18 graden van elkaar liggen, met in elke kolom individuele lijnen die 2 graden uit elkaar liggen:</flowDiv>
+ </flowRoot>
+ <path id="tips-f02-nl.svgpath92" stroke-linejoin="miter" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" d="M72.5,71.65h143" inkscape:tile-w="143.30000" transform="translate(10, 551.421257) " stroke-dashoffset="0.0000000" stroke="#000" stroke-linecap="butt" inkscape:tile-h="0.30000001" stroke-miterlimit="4.0000000" inkscape:tile-cx="164.00000" inkscape:tile-cy="543.50000" stroke-width="0.30000001" fill="none"/>
+ <use id="tips-f02-nl.svguse1473" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.999657,2.617695e-2,-2.617695e-2,0.999657,1.924910,-3.745086) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1474" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.998630,5.233596e-2,-5.233596e-2,0.998630,3.947230,-7.437965) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1475" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.996917,7.845910e-2,-7.845910e-2,0.996917,6.065500,-11.07739) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1476" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.994522,0.104528,-0.104528,0.994522,8.278530,-14.65955) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1477" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.991445,0.130526,-0.130526,0.991445,10.58424,-18.18274) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1478" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.987688,0.156434,-0.156434,0.987688,12.98172,-21.64461) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1479" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.983255,0.182236,-0.182236,0.983255,15.46808,-25.04208) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1480" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.951057,0.309017,-0.309017,0.951057,29.18885,-40.99141) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1481" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.942641,0.333807,-0.333807,0.942641,32.17667,-43.95868) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1482" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.933580,0.358368,-0.358368,0.933580,35.24138,-46.84623) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1483" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.923880,0.382683,-0.382683,0.923880,38.38095,-49.65217) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1484" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.913545,0.406737,-0.406737,0.913545,41.59183,-52.37582) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1485" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.902585,0.430511,-0.430511,0.902585,44.87392,-55.01397) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1486" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.891007,0.453990,-0.453990,0.891007,48.22376,-57.56504) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1487" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.878817,0.477159,-0.477159,0.878817,51.63863,-60.02816) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1488" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.809017,0.587785,-0.587785,0.809017,69.61669,-70.95716) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1489" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.793353,0.608761,-0.608761,0.793353,73.37512,-72.85554) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1490" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.777146,0.629320,-0.629320,0.777146,77.18198,-74.65460) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1491" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.760406,0.649448,-0.649448,0.760406,81.03440,-76.35361) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1492" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.743145,0.669131,-0.669131,0.743145,84.93020,-77.95106) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1493" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.725374,0.688355,-0.688355,0.725374,88.86650,-79.44634) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1494" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.707107,0.707107,-0.707107,0.707107,92.84060,-80.83745) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1495" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.688355,0.725374,-0.725374,0.688355,96.85030,-82.12436) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1496" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.587785,0.809017,-0.809017,0.587785,117.3249,-86.96326) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1497" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.566406,0.824126,-0.824126,0.566406,121.4861,-87.60718) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1498" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.544639,0.838671,-0.838671,0.544639,125.6626,-88.14188) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1499" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.522499,0.852640,-0.852640,0.522499,129.8520,-88.56700) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1500" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.500000,0.866025,-0.866025,0.500000,134.0508,-88.88270) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1501" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.477159,0.878817,-0.878817,0.477159,138.2564,-89.08796) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1502" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.453990,0.891007,-0.891007,0.453990,142.4656,-89.18356) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1503" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.430511,0.902585,-0.902585,0.430511,146.6768,-89.16850) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1504" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.309017,0.951057,-0.951057,0.309017,167.6443,-87.44306) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1505" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.284015,0.958820,-0.958820,0.284015,171.8011,-86.77010) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1506" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.258819,0.965926,-0.965926,0.258819,175.9385,-85.98768) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1507" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.233445,0.972370,-0.972370,0.233445,180.0541,-85.09770) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1508" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.207912,0.978148,-0.978148,0.207912,184.1447,-84.10004) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1509" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.182236,0.983255,-0.983255,0.182236,188.2082,-82.99550) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1510" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.156434,0.987688,-0.987688,0.156434,192.2414,-81.78604) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1511" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(0.130526,0.991445,-0.991445,0.130526,196.2412,-80.47010) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1512" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(6.123032e-17,1.000000,-1.000000,6.123032e-17,215.6500,-72.35000) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1513" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-2.617695e-2,0.999657,-0.999657,-2.617695e-2,219.3950,-70.42517) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1514" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-5.233596e-2,0.998630,-0.998630,-5.233596e-2,223.0879,-68.40298) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1515" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-7.845910e-2,0.996917,-0.996917,-7.845910e-2,226.7273,-66.28453) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1516" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.104528,0.994522,-0.994522,-0.104528,230.3096,-64.07158) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1517" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.130526,0.991445,-0.991445,-0.130526,233.8331,-61.76595) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1518" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.156434,0.987688,-0.987688,-0.156434,237.2945,-59.36826) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1519" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.182236,0.983255,-0.983255,-0.182236,240.6922,-56.88192) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1520" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.309017,0.951057,-0.951057,-0.309017,256.6413,-43.16115) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1521" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.333807,0.942641,-0.942641,-0.333807,259.6088,-40.17333) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1522" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.358368,0.933580,-0.933580,-0.358368,262.4962,-37.10862) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1523" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.382683,0.923880,-0.923880,-0.382683,265.3021,-33.96905) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1524" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.406737,0.913545,-0.913545,-0.406737,268.0261,-30.75817) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1525" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.430511,0.902585,-0.902585,-0.430511,270.6643,-27.47608) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1526" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.453990,0.891007,-0.891007,-0.453990,273.2149,-24.12624) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1527" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.477159,0.878817,-0.878817,-0.477159,275.6780,-20.71137) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1528" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.587785,0.809017,-0.809017,-0.587785,286.6070,-2.733510) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1529" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.608761,0.793353,-0.793353,-0.608761,288.5057,1.025120) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1530" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.629320,0.777146,-0.777146,-0.629320,290.3045,4.831980) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1531" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.649448,0.760406,-0.760406,-0.649448,292.0034,8.684401) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1532" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.669131,0.743145,-0.743145,-0.669131,293.6010,12.58018) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1533" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.688355,0.725374,-0.725374,-0.688355,295.0964,16.51657) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1534" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.707107,0.707107,-0.707107,-0.707107,296.4873,20.49058) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1535" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.725374,0.688355,-0.688355,-0.725374,297.7741,24.50044) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1536" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.809017,0.587785,-0.587785,-0.809017,302.6135,44.97581) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1537" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.824126,0.566406,-0.566406,-0.824126,303.2572,49.13771) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1538" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.838671,0.544639,-0.544639,-0.838671,303.7919,53.31061) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1539" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.852640,0.522499,-0.522499,-0.852640,304.2170,57.50440) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1540" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.866025,0.500000,-0.500000,-0.866025,304.5327,61.70160) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1541" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.878817,0.477159,-0.477159,-0.878817,304.7380,65.90736) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1542" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.891007,0.453990,-0.453990,-0.891007,304.8336,70.11673) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1543" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.902585,0.430511,-0.430511,-0.902585,304.8185,74.32639) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1544" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.951057,0.309017,-0.309017,-0.951057,303.0931,95.29267) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1545" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.958820,0.284015,-0.284015,-0.958820,302.4201,99.45188) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1546" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.965926,0.258819,-0.258819,-0.965926,301.6377,103.5896) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1547" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.972370,0.233445,-0.233445,-0.972370,300.7477,107.7029) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1548" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.978148,0.207912,-0.207912,-0.978148,299.7500,111.7972) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1549" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.983255,0.182236,-0.182236,-0.983255,298.6455,115.8555) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1550" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.987688,0.156434,-0.156434,-0.987688,297.4360,119.8908) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f02-nl.svguse1551" xlink:href="#tips-f02-nl.svgpath92" transform="translate(10, 551.421257) matrix(-0.991445,0.130526,-0.130526,-0.991445,296.1201,123.8925) translate(-10, -551.421257)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
+ <rect id="d0e77" display="none" height="1000px" width="288" y="706.72" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e77"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">In bovenstaande voorbeelden werd de lijn geroteerd rond zijn middelpunt. Maar wat indien het rotatiemiddelpunt buiten je vorm ligt? Creëer een onzichtbare rechthoek (geen vulling, lijn) die je vorm zou bedekken en waarvan het middelpunt het punt is dat je nodig hebt, groepeer de vorm en de rechthoek en gebruik <flowSpan font-family="sans serif">Tegelen met klonen</flowSpan> op deze groep. Op deze wijze kan je mooie “explosies” maken door randomisatie van schaal, rotatie en soms ondoorzichtigheid:</flowDiv>
+ </flowRoot>
+ <g id="tips-f03-nl.svgg1768" inkscape:tile-w="87.999840" transform="translate(10, 796.4167259999999) matrix(0.637680,0.000000,0.000000,0.637680,37.60870,-470.9209)" inkscape:tile-h="7.3333200" inkscape:tile-cx="158.99982" inkscape:tile-cy="859.24904">
+ <path id="tips-f03-nl.svgpath1592" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" fill-rule="evenodd" fill="#000" d="M210.17,859.92c4.54-2.08,15.81-3.8,15.81-0.12,0,3.67-15.81,0.12-15.81,0.12z"/>
+ <rect id="tips-f03-nl.svgrect1680" opacity="0" style="marker-end:none;color:#000000;marker-start:none;marker-mid:none;" height="11.5" width="138" y="853.5" x="90" stroke-width="0.25px"/>
+ </g>
+ <use id="tips-f03-nl.svguse5827" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(1.582388,-0.949047,0.949047,1.582388,-154.0340,87.07056) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5828" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.158025,-0.146700,0.146700,0.158025,105.7377,85.22851) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5829" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.381205,-0.310377,0.310377,0.381205,62.11156,90.79346) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5830" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.916096,-0.772439,0.772439,0.916096,-47.81907,113.8302) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5831" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.271176,1.020398,-1.020398,0.271176,179.8827,-85.71164) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5832" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(5.449488e-2,1.117922,-1.117922,5.449488e-2,217.5118,-82.58176) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5833" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(1.301172,-0.342483,0.342483,1.301172,-68.23569,24.41345) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5834" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.437831,-5.706090e-2,5.706090e-2,0.437831,73.74740,51.22179) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5835" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.306813,9.940890e-2,-9.940890e-2,0.306813,104.0080,39.56182) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5836" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-3.070037e-2,0.733791,-0.733791,-3.070037e-2,199.7728,-22.62704) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5837" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.587705,1.503905,-1.503905,0.587705,173.1183,-177.2931) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5838" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-6.358936e-2,0.241746,-0.241746,-6.358936e-2,166.4545,48.29976) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5839" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.112789,0.480395,-0.480395,-0.112789,191.6708,18.91615) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5840" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.470476,0.344786,-0.344786,0.470476,100.1539,-7.148430) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5841" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.903283,1.297602,-1.297602,0.903283,113.3661,-172.9191) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5842" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(1.638722,0.413477,-0.413477,1.638722,-56.94251,-106.6588) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5843" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(1.375364,0.841378,-0.841378,1.375364,12.61539,-145.8564) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5844" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.372431,1.257953,-1.257953,0.372431,184.1022,-126.5285) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5845" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.974189,0.807369,-0.807369,0.974189,65.75931,-110.2368) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5846" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.731938,1.633265,-1.633265,-0.731938,366.5094,-93.65480) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5847" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.673132,0.518622,-0.518622,0.673132,85.37160,-46.91760) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5848" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(2.547028e-2,0.998190,-0.998190,2.547028e-2,212.3249,-63.70384) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5849" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-3.605237e-2,0.532086,-0.532086,-3.605237e-2,184.9846,5.822092) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5850" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-1.090290,0.485825,-0.485825,-1.090290,327.9609,93.43394) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5851" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.698354,0.189739,-0.189739,-0.698354,250.6815,104.4086) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5852" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(5.885208e-2,0.812223,-0.812223,5.885208e-2,193.3647,-40.42509) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5853" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.726872,1.565645,-1.565645,0.726872,158.5279,-196.5916) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5854" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.937370,0.984031,-0.984031,-0.937370,345.0698,12.40872) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5855" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-1.744032,-0.332291,0.332291,-1.744032,355.8320,257.4943) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5856" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.222960,1.144285,-1.144285,0.222960,196.1248,-99.21930) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5857" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.343933,1.153051,-1.153051,-0.343933,275.5978,-56.78320) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5858" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.184014,0.803951,-0.803951,-0.184014,226.4862,-20.57292) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5859" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.657759,0.630998,-0.630998,-0.657759,279.0187,39.94792) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5860" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-1.178407,8.005262e-3,-8.005262e-3,-1.178407,303.4147,166.6376) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5861" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-1.188778,0.960756,-0.960756,-1.188778,378.2234,35.00298) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5862" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.580462,-3.074334e-2,3.074334e-2,-0.580462,217.3166,125.9781) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5863" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.867001,0.425050,-0.425050,-0.867001,292.2441,84.68779) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5864" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.700823,0.100133,-0.100133,-0.700823,244.1245,117.0541) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5865" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-1.763055,-0.226403,0.226403,-1.763055,366.6297,244.2414) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5866" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.982450,-1.091297,1.091297,-0.982450,191.5241,304.3507) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5867" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.112597,-0.111700,0.111700,-0.112597,146.0492,101.2028) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5868" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.465116,-0.231915,0.231915,-0.465116,185.7921,145.0584) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5869" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-1.344854,3.164347e-2,-3.164347e-2,-1.344854,328.3710,176.1683) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5870" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.841796,0.711101,-0.711101,-0.841796,310.7677,42.98625) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5871" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.406734,-1.716231,1.716231,-0.406734,63.37569,346.8820) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5872" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.512726,-1.119051,1.119051,-0.512726,124.0951,272.0361) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5873" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-1.009778,0.397051,-0.397051,-1.009778,309.9339,99.57444) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5874" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.342373,-1.254425,1.254425,-0.342373,89.99150,277.7351) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5875" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-1.321413,-5.632474e-2,5.632474e-2,-1.321413,318.3386,186.5905) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5876" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(8.124399e-2,-1.492381,1.492381,8.124399e-2,12.78507,278.1906) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5877" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.735465,-0.521409,0.521409,-0.735465,201.0780,206.1158) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5878" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.826712,-0.390986,0.390986,-0.826712,223.8044,195.0139) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5879" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(9.504403e-2,-1.201923,1.201923,9.504403e-2,33.23421,236.7537) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5880" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.407521,-0.948369,0.948369,-0.407521,122.6155,240.2096) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5881" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.237366,-0.784455,0.784455,0.237366,45.59887,167.7661) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5882" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.297228,-0.331596,0.331596,0.297228,72.15004,100.2089) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5883" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-7.089730e-2,-0.560229,0.560229,-7.089730e-2,105.7138,160.3371) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5884" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-9.284730e-3,-0.591196,0.591196,-9.284730e-3,94.76460,159.8969) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5885" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.647489,-0.895367,0.895367,0.647489,-19.94909,151.6009) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5886" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.206174,-0.655204,0.655204,0.206174,59.88748,152.2020) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5887" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.228684,-1.074090,1.074090,-0.228684,88.07570,243.9143) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5888" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-1.157023,-1.395573,1.395573,-1.157023,192.3591,360.0865) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5889" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-1.029056,-1.277949,1.277949,-1.029056,183.6293,333.8833) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5890" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.838138,-1.332274,1.332274,0.838138,-80.09370,197.6504) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5891" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-9.741253e-2,-1.150852,1.150852,-9.741253e-2,63.91813,244.4753) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5892" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(-0.214987,-0.730718,0.730718,-0.214987,112.6132,195.1310) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5893" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(1.688294,-0.170486,0.170486,1.688294,-108.8011,-29.30468) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5894" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.553777,-0.203849,0.203849,0.553777,46.32707,62.69652) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5895" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(1.162667,-0.637705,0.637705,1.162667,-71.71793,76.11500) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5896" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(1.521722,-0.574611,0.574611,1.521722,-116.7675,39.69527) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <use id="tips-f03-nl.svguse5897" xlink:href="#tips-f03-nl.svgg1768" transform="translate(10, 796.4167259999999) matrix(0.546248,-0.904563,0.904563,0.546248,-6.585200,160.6755) translate(-10, -796.4167259999999)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="975.2274859999999" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="975.2274859999999" x="10">Uitsnijden (verschillende rechthoekige exportgebieden)</tspan>
+ </text>
+ <rect id="d0e99" display="none" height="1000px" width="288" y="980.43" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e99"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Maak in een nieuwe laag diverse onzichtbare rechthoeken die verschillende delen van je afbeelding bedekken. Zorg ervoor dat je document px als eenheid gebruikt (standaard). Schakel het raster aan en kleef de rechthoeken aan het raster zodat elke rechthoek een geheel aantal px-eenheden omspant. Geef logische ids op aan de rechthoeken en exporteer elk naar zijn eigen bestand (<flowSpan font-family="sans serif">Bestand &gt; Bitmap exporteren</flowSpan> (<flowSpan font-weight="bold">Shift+Ctrl+E</flowSpan>)). Hierdoor zullen de rechthoeken hun exportbestandsnaam onthouden. Hierna is het eenvoudig om sommige rechthoeken de reëxporteren: ga naar de exportlaag, gebruik Tab om diegene die je nodig hebt te selecteren (of gebruik Zoeken met id), en klik op Exporteren in de dialoog. Je kan ook een shell script of batch file maken om al je gebieden te exporteren, met een commando zoals:</flowDiv>
+ </flowRoot>
+ <rect id="d0e108" display="none" height="1000px" width="288" y="1124.3" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e108"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">inkscape -i rechthoek-id -t bestandsnaam.svg</flowDiv>
+ </flowRoot>
+ <rect id="d0e111" display="none" height="1000px" width="288" y="1142.2" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e111"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">voor elk geëxporteerd oppervlak. De -t optie zorgt dat Inkscape de naam van de zone gebruikt voor de bestandsnaam, zoniet kan je de bestandsnaam van de uitvoer geven met de -e optie. Als alternatief kan je het gereedschap <flowSpan font-weight="bold" font-family="sans serif">svgslice</flowSpan> gebruiken voor automatische export van Inkscape SVG-documenten, met uitsnijlaag of hulplijnen.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1215.4403157999998" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1215.4403157999998" x="10">Niet-lineaire kleurverlopen</tspan>
+ </text>
+ <rect id="d0e123" display="none" height="1000px" width="288" y="1220.6" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e123"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">SVG-versie 1.1 ondersteunt geen niet-lineaire kleurverlopen (dit is deze die geen niet-lineaire overgang hebben tussen de kleuren). Je kan deze echter emuleren door <flowSpan font-style="italic">multi-stop</flowSpan> kleurverlopen.</flowDiv>
+ </flowRoot>
+ <rect id="d0e129" display="none" height="1000px" width="288" y="1259.7" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e129"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Begin met een eenvoudig tweestopskleurverloop. Open de kleurverloop-editor (bijvoorbeeld door te dubbelklikken op een kleurverloophandvat). Voeg een nieuw kleurverloop toe in het midden en versleep het een beetje. Voeg vervolgens meer kleurverlopen toe voor en na de overgang in het midden zodat het verloop vloeiend is. Hoe meer overgangen, hoe vloeiender je het uiteindelijke kleurverloop kan maken. Hier is het initiële zwart-wit kleurverloop met twee stops:</flowDiv>
+ </flowRoot>
+ <defs id="tips-f04-nl.svgdefs3">
+ <linearGradient id="tips-f04-nl.svglinearGradient844" y2="-5.6264" gradientUnits="userSpaceOnUse" x2="-753.98" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,178.9029,1.615078e-15)" y1="-71.602" x1="-753.98">
+ <stop id="tips-f04-nl.svgstop842" stop-color="#000" offset="0"/>
+ <stop id="tips-f04-nl.svgstop843" stop-color="#FFF" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect id="tips-f04-nl.svgrect1511" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1359.8846947999998) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-16.125" fill="url(#tips-f04-nl.svglinearGradient844)"/>
+ <rect id="d0e142" display="none" height="1000px" width="288" y="1388" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e142"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Dit zijn diverse “niet-lineaire” multi-stop kleurverlopen (bekijk ze in de kleurverloop-editor):</flowDiv>
+ </flowRoot>
+ <defs id="tips-f05-nl.svgdefs3">
+ <linearGradient id="tips-f05-nl.svglinearGradient3979" y2="-4.5118" gradientUnits="userSpaceOnUse" x2="-1484.6" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,241.3779,2.179081e-15)" y1="-72.469" x1="-1484.6" inkscape:collect="always">
+ <stop id="tips-f05-nl.svgstop903" stop-color="#000" offset="0"/>
+ <stop id="tips-f05-nl.svgstop1388" stop-color="#1f1f1f" offset="0.30971"/>
+ <stop id="tips-f05-nl.svgstop911" stop-color="#3f3f3f" offset="0.51169"/>
+ <stop id="tips-f05-nl.svgstop904" stop-color="#7f7f7f" offset="0.6941"/>
+ <stop id="tips-f05-nl.svgstop905" stop-color="#bfbfbf" offset="0.85671"/>
+ <stop id="tips-f05-nl.svgstop906" stop-color="#dfdfdf" offset="0.93052"/>
+ <stop id="tips-f05-nl.svgstop907" stop-color="#efefef" offset="0.96831"/>
+ <stop id="tips-f05-nl.svgstop908" stop-color="#f7f7f7" offset="0.98965"/>
+ <stop id="tips-f05-nl.svgstop909" stop-color="#fff" offset="1"/>
+ </linearGradient>
+ <linearGradient id="tips-f05-nl.svglinearGradient3982" y2="-4.5119" gradientUnits="userSpaceOnUse" x2="-1021.7" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,243.3771,2.197130e-15)" y1="-72.469" x1="-1021.7" inkscape:collect="always">
+ <stop id="tips-f05-nl.svgstop892" stop-color="#000" offset="0"/>
+ <stop id="tips-f05-nl.svgstop893" stop-color="#3f3f3f" offset="0.032569"/>
+ <stop id="tips-f05-nl.svgstop894" stop-color="#7f7f7f" offset="0.082509"/>
+ <stop id="tips-f05-nl.svgstop895" stop-color="#bfbfbf" offset="0.15915"/>
+ <stop id="tips-f05-nl.svgstop896" stop-color="#dfdfdf" offset="0.20343"/>
+ <stop id="tips-f05-nl.svgstop897" stop-color="#efefef" offset="0.27003"/>
+ <stop id="tips-f05-nl.svgstop898" stop-color="#f7f7f7" offset="0.33919"/>
+ <stop id="tips-f05-nl.svgstop899" stop-color="#fff" offset="1"/>
+ </linearGradient>
+ <linearGradient id="tips-f05-nl.svglinearGradient3985" y2="-5.6264" gradientUnits="userSpaceOnUse" x2="-1088.6" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,243.2092,2.195615e-15)" y1="-72.469" x1="-1088.6" inkscape:collect="always">
+ <stop id="tips-f05-nl.svgstop881" stop-color="#000" offset="0"/>
+ <stop id="tips-f05-nl.svgstop882" stop-color="#3f3f3f" offset="0.050992"/>
+ <stop id="tips-f05-nl.svgstop883" stop-color="#7f7f7f" offset="0.13841"/>
+ <stop id="tips-f05-nl.svgstop884" stop-color="#bfbfbf" offset="0.31314"/>
+ <stop id="tips-f05-nl.svgstop885" stop-color="#dfdfdf" offset="0.41979"/>
+ <stop id="tips-f05-nl.svgstop886" stop-color="#efefef" offset="0.48934"/>
+ <stop id="tips-f05-nl.svgstop887" stop-color="#f7f7f7" offset="0.6629"/>
+ <stop id="tips-f05-nl.svgstop888" stop-color="#fff" offset="1"/>
+ </linearGradient>
+ <linearGradient id="tips-f05-nl.svglinearGradient3988" y2="-4.5118" gradientUnits="userSpaceOnUse" x2="-1417.6" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,241.5457,2.180595e-15)" y1="-72.469" x1="-1417.6" inkscape:collect="always">
+ <stop id="tips-f05-nl.svgstop871" stop-color="#000" offset="0"/>
+ <stop id="tips-f05-nl.svgstop1390" stop-color="#3f3f3f" offset="0.34958"/>
+ <stop id="tips-f05-nl.svgstop872" stop-color="#7f7f7f" offset="0.60247"/>
+ <stop id="tips-f05-nl.svgstop873" stop-color="#bfbfbf" offset="0.78191"/>
+ <stop id="tips-f05-nl.svgstop874" stop-color="#dfdfdf" offset="0.86472"/>
+ <stop id="tips-f05-nl.svgstop875" stop-color="#efefef" offset="0.93806"/>
+ <stop id="tips-f05-nl.svgstop876" stop-color="#f7f7f7" offset="0.97619"/>
+ <stop id="tips-f05-nl.svgstop877" stop-color="#fff" offset="1"/>
+ </linearGradient>
+ <linearGradient id="tips-f05-nl.svglinearGradient3991" y2="-4.5119" gradientUnits="userSpaceOnUse" x2="-1354.9" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,242.1509,2.186058e-15)" y1="-72.469" x1="-1354.9" inkscape:collect="always">
+ <stop id="tips-f05-nl.svgstop860" stop-color="#000" offset="0"/>
+ <stop id="tips-f05-nl.svgstop861" stop-color="#7f7f7f" offset="0.47509"/>
+ <stop id="tips-f05-nl.svgstop862" stop-color="#bfbfbf" offset="0.70159"/>
+ <stop id="tips-f05-nl.svgstop863" stop-color="#dfdfdf" offset="0.83404"/>
+ <stop id="tips-f05-nl.svgstop864" stop-color="#efefef" offset="0.89395"/>
+ <stop id="tips-f05-nl.svgstop865" stop-color="#f7f7f7" offset="0.95386"/>
+ <stop id="tips-f05-nl.svgstop866" stop-color="#fff" offset="1"/>
+ </linearGradient>
+ <linearGradient id="tips-f05-nl.svglinearGradient3994" y2="-5.6264" gradientUnits="userSpaceOnUse" x2="-1155.6" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,243.0416,2.194101e-15)" y1="-72.469" x1="-1155.6" inkscape:collect="always">
+ <stop id="tips-f05-nl.svgstop849" stop-color="#000" offset="0"/>
+ <stop id="tips-f05-nl.svgstop850" stop-color="#3f3f3f" offset="0.08634"/>
+ <stop id="tips-f05-nl.svgstop851" stop-color="#7f7f7f" offset="0.23435"/>
+ <stop id="tips-f05-nl.svgstop852" stop-color="#bfbfbf" offset="0.44844"/>
+ <stop id="tips-f05-nl.svgstop853" stop-color="#dfdfdf" offset="0.53717"/>
+ <stop id="tips-f05-nl.svgstop854" stop-color="#efefef" offset="0.64299"/>
+ <stop id="tips-f05-nl.svgstop855" stop-color="#f7f7f7" offset="0.77809"/>
+ <stop id="tips-f05-nl.svgstop856" stop-color="#fff" offset="1"/>
+ </linearGradient>
+ <linearGradient id="tips-f05-nl.svglinearGradient3997" y2="-5.6264" gradientUnits="userSpaceOnUse" x2="-1222.2" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,242.7845,2.191778e-15)" y1="-72.469" x1="-1222.2" inkscape:collect="always">
+ <stop id="tips-f05-nl.svgstop838" stop-color="#000" offset="0"/>
+ <stop id="tips-f05-nl.svgstop846" stop-color="#3f3f3f" offset="0.11729"/>
+ <stop id="tips-f05-nl.svgstop839" stop-color="#7f7f7f" offset="0.30868"/>
+ <stop id="tips-f05-nl.svgstop840" stop-color="#bfbfbf" offset="0.55673"/>
+ <stop id="tips-f05-nl.svgstop841" stop-color="#dfdfdf" offset="0.68916"/>
+ <stop id="tips-f05-nl.svgstop1490" stop-color="#efefef" offset="0.77552"/>
+ <stop id="tips-f05-nl.svgstop1491" stop-color="#f7f7f7" offset="0.85833"/>
+ <stop id="tips-f05-nl.svgstop844" stop-color="#fff" offset="1"/>
+ </linearGradient>
+ <linearGradient id="tips-f05-nl.svglinearGradient4000" y2="-5.6264" gradientUnits="userSpaceOnUse" x2="-1289.3" gradientTransform="matrix(0.237277,0.000000,0.000000,4.214480,242.6501,2.190567e-15)" y1="-72.469" x1="-1289.3" inkscape:collect="always">
+ <stop id="tips-f05-nl.svgstop3629" stop-color="#000" offset="0"/>
+ <stop id="tips-f05-nl.svgstop3633" stop-color="#7f7f7f" offset="0.39661"/>
+ <stop id="tips-f05-nl.svgstop3634" stop-color="#bfbfbf" offset="0.68131"/>
+ <stop id="tips-f05-nl.svgstop3635" stop-color="#dfdfdf" offset="0.78264"/>
+ <stop id="tips-f05-nl.svgstop3636" stop-color="#efefef" offset="0.86468"/>
+ <stop id="tips-f05-nl.svgstop3637" stop-color="#f7f7f7" offset="0.89296"/>
+ <stop id="tips-f05-nl.svgstop3630" stop-color="#fff" offset="1"/>
+ </linearGradient>
+ </defs>
+ <rect id="tips-f05-nl.svgrect3632" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1424.3915358) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-79.393" fill="url(#tips-f05-nl.svglinearGradient4000)"/>
+ <rect id="tips-f05-nl.svgrect836" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1424.3915358) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-63.336" fill="url(#tips-f05-nl.svglinearGradient3997)"/>
+ <rect id="tips-f05-nl.svgrect847" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1424.3915358) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-47.28" fill="url(#tips-f05-nl.svglinearGradient3994)"/>
+ <rect id="tips-f05-nl.svgrect858" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1424.3915358) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-95.45" fill="url(#tips-f05-nl.svglinearGradient3991)"/>
+ <rect id="tips-f05-nl.svgrect869" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1424.3915358) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-111.51" fill="url(#tips-f05-nl.svglinearGradient3988)"/>
+ <rect id="tips-f05-nl.svgrect879" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1424.3915358) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-31.223" fill="url(#tips-f05-nl.svglinearGradient3985)"/>
+ <rect id="tips-f05-nl.svgrect890" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1424.3915358) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-15.167" fill="url(#tips-f05-nl.svglinearGradient3982)"/>
+ <rect id="tips-f05-nl.svgrect901" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1424.3915358) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-127.56" fill="url(#tips-f05-nl.svglinearGradient3979)"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1577.7124357999999" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1577.7124357999999" x="10">Excentrische radiale kleurverlopen</tspan>
+ </text>
+ <rect id="d0e161" display="none" height="1000px" width="288" y="1582.9" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e161"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Radiale kleurverlopen moeten niet symmetrisch zijn. Sleep in het kleurverloopgereedschap het centrale handvat van een elliptisch kleurverloop met <flowSpan font-weight="bold">Shift</flowSpan>. Dit verplaatst het x-vormige <flowSpan font-style="italic">brandpunt</flowSpan> van het kleurverloop uit het centrum. Wanneer je het niet nodig hebt, kan je het brandpunt terugbrengen door het dichtbij het middelpunt te slepen.</flowDiv>
+ </flowRoot>
+ <defs id="tips-f06-nl.svgdefs3">
+ <radialGradient id="tips-f06-nl.svgradialGradient4031" gradientUnits="userSpaceOnUse" fx="164.26" fy="495.96" cx="187.87" cy="494.13" r="40.258" gradientTransform="matrix(0.930312,0.000000,0.000000,0.853811,16.07898,-387.2360)" inkscape:collect="always">
+ <stop id="tips-f06-nl.svgstop1057" stop-color="#0082ab" stop-opacity="0" offset="0"/>
+ <stop id="tips-f06-nl.svgstop1058" stop-color="#000" offset="1"/>
+ </radialGradient>
+ <radialGradient id="tips-f06-nl.svgradialGradient4034" gradientUnits="userSpaceOnUse" fx="122.44" fy="495.35" cx="92.072" cy="494.13" r="40.514" gradientTransform="matrix(0.930312,0.000000,0.000000,0.853811,22.35642,-387.2360)" inkscape:collect="always">
+ <stop id="tips-f06-nl.svgstop1078" stop-color="#ff2ee1" stop-opacity="0.529229" offset="0"/>
+ <stop id="tips-f06-nl.svgstop1079" stop-color="#000" stop-opacity="0" offset="1"/>
+ </radialGradient>
+ </defs>
+ <rect id="tips-f06-nl.svgrect1569" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1661.8743347999998) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="70.82" stroke-width="0.89427pt" fill="url(#tips-f06-nl.svgradialGradient4034)"/>
+ <rect id="tips-f06-nl.svgrect1570" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1661.8743347999998) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="153.67" stroke-width="0.89427pt" fill="url(#tips-f06-nl.svgradialGradient4031)"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1755.9787937999997" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1755.9787937999997" x="10">Uitlijnen naar het midden van de pagina</tspan>
+ </text>
+ <rect id="d0e186" display="none" height="1000px" width="288" y="1761.2" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e186"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Om iets uit te lijnen op het midden of de zijkant van een pagina, selecteer je het object of de groep en kies je in het dialoogvenster Uitlijnen en verdelen (<flowSpan font-weight="bold">Ctrl+Shift+A</flowSpan>) <flowSpan font-family="sans serif">Pagina</flowSpan> bij <flowSpan font-family="sans serif">Relatief ten opzichte van:</flowSpan>.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1822.1099127999996" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1822.1099127999996" x="10">Document opruimen</tspan>
+ </text>
+ <rect id="d0e204" display="none" height="1000px" width="288" y="1827.3" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e204"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Veel ongebruikte kleurverlopen, patronen en markeringen (de manueel bewerkte) blijven in de corresponderende paletten en kunnen hergebruikt worden voor nieuwe objecten. Voor het optimaliseren van je document kan je de opdracht <flowSpan font-family="sans serif">Definities opruimen</flowSpan> in het menu Bestand gebruiken. Deze verwijdert alle kleurverlopen, patronen of markeringen die nergens gebruikt worden, wat zorgt voor een kleiner bestand.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1920.1413187999997" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1920.1413187999997" x="10">Verborgen features en de XML-editor</tspan>
+ </text>
+ <rect id="d0e216" display="none" height="1000px" width="288" y="1925.3" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e216"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">De XML-editor laat je toe om bijna alle aspecten van het document te bewerken zonder een externe tekstbewerker. Bovendien ondersteunt Inkscape dikwijls meer features dan dat er toegankelijk zijn via de GUI. De XML-editor is een manier om toegang te krijgen tot deze features, indien je SVG kent.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1998.5567887999996" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1998.5567887999996" x="10">Aanpassen van de eenheid van de liniaal</tspan>
+ </text>
+ <rect id="d0e225" display="none" height="1000px" width="288" y="2003.8" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e225"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">In het standaardsjabloon is de standaardeenheid van linialen px (“SVG gebruikerseenheid”, in Inkscape is deze gelijk aan 0.8pt of 1/90 van een inch). Dit is ook de eenheid voor weergave van coördinaten in de hoek benedenlinks en wordt voorgeselecteerd in alle dialogen. (Je kan altijd met je muis over een liniaal gaan om de gebruikte eenheid in de tooltip weer te geven.) Open de <flowSpan font-family="sans serif">Documenteigenschappen</flowSpan> (<flowSpan font-weight="bold">Ctrl+Shift+D</flowSpan>) om dit te veranderen en pas <flowSpan font-family="sans serif">Standaardeenheid</flowSpan> aan in de tab <flowSpan font-family="sans serif">Page</flowSpan>.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2108.8184008" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2108.8184008" x="10">Stempelen</tspan>
+ </text>
+ <rect id="d0e246" display="none" height="1000px" width="288" y="2114" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e246"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Om snel meerdere kopieën van een object te maken, kan je <flowSpan font-style="italic">stempelen</flowSpan>. Sleep een object (of schaal of roteer het) en tijdens het ingedrukt houden van de linkermuisknop, druk je op de <flowSpan font-weight="bold">Spatiebalk</flowSpan>. Dit maakt een stempel van de huidige objectvorm. Je kan het zo vaak herhalen als je wil.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2187.3043628" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2187.3043628" x="10">Trucken met de pen</tspan>
+ </text>
+ <rect id="d0e261" display="none" height="1000px" width="288" y="2192.5" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e261"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">In het pengereedschap (Bezier), heb je de volgende mogelijkheden om een lijn te beëindigen:</flowDiv>
+ </flowRoot>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2226.9998318)"/>
+ <rect id="d0e267" display="none" height="1000px" width="258" y="2221" x="20"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e267"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Drukken op <flowSpan font-weight="bold">Enter</flowSpan></flowDiv>
+ </flowRoot>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2244.7420193)"/>
+ <rect id="d0e273" display="none" height="1000px" width="258" y="2238.7" x="20"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e273"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Dubbelklikken met de linkermuisknop</flowDiv>
+ </flowRoot>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2262.4842068)"/>
+ <rect id="d0e277" display="none" height="1000px" width="258" y="2256.5" x="20"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e277"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">De pen opnieuw selecteren</flowDiv>
+ </flowRoot>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2280.2263943)"/>
+ <rect id="d0e281" display="none" height="1000px" width="258" y="2274.2" x="20"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e281"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Een ander gereedschap selecteren</flowDiv>
+ </flowRoot>
+ <rect id="d0e285" display="none" height="1000px" width="288" y="2292.1" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e285"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Noteer dat terwijl het pad nog niet beëindigd is (dit is getoond in groen en het huidige segment rood), het nog niet bestaat als object in het document. Bijgevolg gebruik je om het te annuleren op <flowSpan font-weight="bold">Esc</flowSpan> (volledige pad annuleren) of <flowSpan font-weight="bold">Backspace</flowSpan> (het laatste segment verwijderen) in plaats van <flowSpan font-family="sans serif">Ongedaan maken</flowSpan>.</flowDiv>
+ </flowRoot>
+ <rect id="d0e297" display="none" height="1000px" width="288" y="2352.6" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e297"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Om een nieuw subpad aan een bestaand pad toe te voegen, selecteer je dat pad en begin je te tekenen met <flowSpan font-weight="bold">Shift</flowSpan> van een willekeurig punt. Indien je echter eenvoudigweg wil <flowSpan font-style="italic">voortgaan</flowSpan> met een bestaand pad, is Shift niet nodig; begin dan te tekenen vanaf een van de uiteinden.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2415.1827201" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2415.1827201" x="10">Ingeven van Unicode tekens</tspan>
+ </text>
+ <rect id="d0e312" display="none" height="1000px" width="288" y="2420.4" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e312"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">In het tekstgereedscap schakelt <flowSpan font-weight="bold">Ctrl+U</flowSpan> tussen Unicode en normale modus. In Unicode modus wordt elke groep van 4 hexadecimale cijfers die je ingeeft een enkel Unicode karakter. Dit laat je toe om arbitraire symbolen in te geven (zolang je de Unicode waarden kent en het lettertype deze ondersteunt). Om Unicode-invoer te beëindigen, druk je op <flowSpan font-weight="bold">Enter</flowSpan>. Bijvoorbeeld, <flowSpan font-weight="bold">Ctrl+U 2 0 1 4 Enter</flowSpan> voegt een liggend streepje (—) in. Om de Unicode modus te verlaten zonder iets in te voegen, druk je op <flowSpan font-weight="bold">Esc</flowSpan>.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2525.5576131000003" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2525.5576131000003" x="10">Het raster gebruiken voor het tekenen van iconen</tspan>
+ </text>
+ <rect id="d0e333" display="none" height="1000px" width="288" y="2530.8" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e333"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Veronderstel dat je een 24x24 pixel icoon wil maken. Creëer een 24x24 px canvas (gebruik de <flowSpan font-family="sans serif">Documenteigenschappen</flowSpan>) en stel het raster in op 0.5px (48x48 rasterlijnen). Indien je nu gevulde objecten uitlijnd op <flowSpan font-style="italic">even</flowSpan> rasterlijnen, contouren op <flowSpan font-style="italic">oneven</flowSpan> rasterlijnen met een lijnbreedte een even nummer in px en exporteert op de standaard 90ppi resolutie (opdat 1 px 1 bitmap pixel wordt), verkrijg je een scherp beeld zonder dat anti-aliasing nodig is.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2625.3038631000004" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2625.3038631000004" x="10">Objectrotatie</tspan>
+ </text>
+ <rect id="d0e351" display="none" height="1000px" width="288" y="2630.5" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e351"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">In het selectiegereedschap <flowSpan font-weight="bold">klik</flowSpan> je op een object om de schaalhandvatten te tonen. <flowSpan font-weight="bold">Klik</flowSpan> dan opnieuw op het object om de handvatten voor rotatie en scheeftrekken te tonen. Indien je op de handvatten op de hoeken klikt en sleept draait het object rond het centrum (kruisteken). Indien je tegelijkertijd <flowSpan font-weight="bold">Shift</flowSpan> ingedrukt houdt, wordt geroteerd rond de tegenovergestelde hoek.Je kan ook het rotatiecentrum naar gelijk welke plaats slepen.</flowDiv>
+ </flowRoot>
+ <rect id="d0e363" display="none" height="1000px" width="288" y="2712.2" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e363"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Je kan ook roteren met het toetsenbord met <flowSpan font-weight="bold">[</flowSpan> en <flowSpan font-weight="bold">]</flowSpan> (per 15 graden) of <flowSpan font-weight="bold">Ctrl+[</flowSpan> en <flowSpan font-weight="bold">Ctrl+]</flowSpan> (per 90 graden). Dezelfde <flowSpan font-weight="bold">[]</flowSpan> toetsen met <flowSpan font-weight="bold">Alt</flowSpan> zorgen voor pixelgrootte rotatie.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2764.1939331000003" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2764.1939331000003" x="10">Slagschaduwen</tspan>
+ </text>
+ <rect id="d0e390" display="none" height="1000px" width="288" y="2769.4" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e390"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Inkscape ondersteunt de SVG-filter Gaussiaanse vervaging zodat je op eenvouwige wijze vage slagschaduwen kan maken. Selecteer een object. Dupliceer het met <flowSpan font-weight="bold">Ctrl+D</flowSpan>, druk op <flowSpan font-weight="bold">PgDown</flowSpan> om het onder het originele object te plaatsen. Verplaats het een beetje naar rechts en lager dan het origineel. Open nu de dialoog Vulling en lijn en verander Vervaging naar bijvoorbeeld 5.0.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2853.2691131" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2853.2691131" x="10">Tekst op een pad plaatsen</tspan>
+ </text>
+ <rect id="d0e405" display="none" height="1000px" width="288" y="2858.5" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e405"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Om tekst op een pad te plaatsen, selecteer je de tekst en de curve en kies je <flowSpan font-family="sans serif">Op pad plaatsen</flowSpan> in het menu Tekst. De tekst zal starten bij het begin van het pad. Algemeen is het best om een expliciet pad te maken waaraan je de tekst wil fitten in plaats van het te fitten op een andere object — dit geeft je meer controle zonder je afbeelding om zeep te helpen.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2942.2113011" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2942.2113011" x="10">Het origineel selecteren</tspan>
+ </text>
+ <rect id="d0e417" display="none" height="1000px" width="288" y="2947.4" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e417"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Wanneer je tekst op een pad hebt, een gekoppelde rand of een kloon, kan het moeilijk zijn om het bronobject/-pad te selecteren, omdat het er direct onder kan liggen, onzichtbaar kan zijn of vergrendeld. De magische toets <flowSpan font-weight="bold">Shift+D</flowSpan> helpt hierbij; selecteer de test, gekoppelde rand of kloon en druk <flowSpan font-weight="bold">Shift+D</flowSpan> om het corresponderende originele pad, rand of kloon te selecteren.</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3031.1929141" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="3031.1929141" x="10">Indien het venster niet op het scherm staat</tspan>
+ </text>
+ <rect id="d0e432" display="none" height="1000px" width="288" y="3036.4" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e432"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Bij het verplaatsen van documenten tussen verschillende systemen met verschillende resoluties of aantal schermen, kan het gebeuren dat Inkscape een vensterpositie heeft bewaard dat buiten het bereik van je scherm valt. Maximaliseer dan het venster (zodat het terug in beeld komt, gebruik de taakbalk), bewaar en herlaad. Je kan dergelijk gedrag algemeen verhinderen door de globale optie voor het bewaren van de venstergeometrie uit te vinken (<flowSpan font-family="sans serif">Inkscape-voorkeuren</flowSpan>, tab <flowSpan font-family="sans serif">Vensters</flowSpan>).</flowDiv>
+ </flowRoot>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3140.9971361000003" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="3140.9971361000003" x="10">Transparantie, kleurverlopen en PostScript export</tspan>
+ </text>
+ <rect id="d0e447" display="none" height="1000px" width="288" y="3146.2" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e447"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">PostScript of EPS formaten ondersteunen geen <flowSpan font-style="italic">transparency</flowSpan> zodat je dit nooit zou mogen gebruiken indien je het naar PS/EPS gaat exporteren. In het geval van een egale transparantie over een egaal kleurvlak is het eenvoudig op te lossen: selecteer een van de transparante objecten, schakel over naar de pipet (<flowSpan font-weight="bold">F7</flowSpan>); zorg dat je in de modus “Zowel kleur als alfa onder de cursor nemen” bent, klik vervolgens op het geselecteerde object. Zo wordt de zichtbare kleur genomen en terug toegekend aan het object, maar dan zonder transparantie. Herhaal dit voor alle transparante objecten. Indien je transparant object over verschillende egale kleurvlakken ligt, moet je het in de overeenkomstige delen opbreken en de procedure voor elk deel toepasen.</flowDiv>
+ </flowRoot>
+ <rect id="d0e456" display="none" height="1000px" width="288" y="3281" x="10"/>
+ <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e456"/>
+ </flowRegion>
+ <flowDiv xml:space="preserve">Het exporteren van <flowSpan font-style="italic">kleurverlopen</flowSpan> naar PS of EPS werkt niet voor tekst (tenzij de tekst naar pad geconverteerd is) of voor de kleur van contouren. Aangezien ook transparantie verloren gaat bij export naar PS of EPS, kan je geen kleurverloop van <flowSpan font-style="italic">opaak</flowSpan> blauw naar <flowSpan font-style="italic">transparant</flowSpan> blauw gebruiken. Als tussenoplossing kan je daarvoor een kleurverloop van <flowSpan font-style="italic">opaak</flowSpan> blauw naar de <flowSpan font-style="italic">opake</flowSpan> achtergrondkleur gebruiken.</flowDiv>
+ </flowRoot>
+ <g transform="translate(0, 3362.6945051000002)">
+ <defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
+ <linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.149642,0.000000,0.000000,0.465194,-0.130153,3495.428)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
+ <radialGradient id="radialGradient2456" xlink:href="#linearGradient666" gradientUnits="userSpaceOnUse" cy="1036.5" cx="233.92" gradientTransform="scale(1.825742,0.547723)" r="98.26" inkscape:collect="always"/>
+ </defs>
+ <metadata id="metadata4" xmlns:cc="http://creativecommons.org/ns#">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g id="layer1" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Layer 1" inkscape:groupmode="layer">
+ <rect id="rect1494" transform="scale(1.000000,-1.000000)" fill-rule="evenodd" rx="0" ry="6.1828" height="69.248" width="319.99" y="-70.334" x="-0.11217" fill="url(#linearGradient2465)"/>
+ <path id="path1508" d="m80.493,57.976-4.9567,0,0,0.3171,0.14846,0c0.66805,0,0.74228,0.0338,0.74228,0.3172v0.1956,3.212,0.1957c0,0.2835-0.07423,0.3172-0.74228,0.3172h-0.14846v0.3171h5.0639l0.16495-1.8016h-0.36289c-0.10722,0.4723-0.29691,0.8907-0.49485,1.0864-0.25566,0.2699-0.72577,0.3981-1.4186,0.3981h-0.54433c-0.24742,0-0.45361-0.0405-0.52784-0.1012-0.05773-0.0406-0.06598-0.081-0.06598-0.2227v-1.7206h0.16495c0.5031,0,0.70928,0.0404,0.87423,0.1821,0.21443,0.1754,0.2969,0.3914,0.31341,0.7895h0.38763v-2.2133h-0.38763c-0.04124,0.6612-0.37114,0.9244-1.1546,0.9244h-0.19794v-1.5385c0-0.2901,0.07423-0.3374,0.51959-0.3374h0.42887c0.72578,0,1.0804,0.0608,1.3608,0.2497,0.27217,0.1754,0.47011,0.5533,0.59382,1.1606h0.35463l-0.11546-1.7274zm-10.944,2.7059,0.93196,0c0.74227,0,1.1299-0.0472,1.4598-0.1755,0.58558-0.2294,0.91547-0.6612,0.91547-1.1943,0-0.5129-0.28866-0.9043-0.833-1.1269-0.32166-0.135-0.833-0.2092-1.4021-0.2092h-2.8866v0.3171h0.14846c0.66804,0,0.74227,0.0338,0.74227,0.3172v0.1956,3.212,0.1957c0,0.2835-0.07422,0.3172-0.74227,0.3172h-0.14846v0.3171h2.7712v-0.3171h-0.21444c-0.66804,0-0.74227-0.0337-0.74227-0.3172v-0.1957-1.336zm0-0.3172,0-1.7274c0-0.3104,0.04948-0.3442,0.5031-0.3442h0.52784c0.85774,0,1.2619,0.3307,1.2619,1.046,0,0.695-0.42062,1.0256-1.2948,1.0256h-0.99794zm-7.1753-2.4832-0.34639,0-1.8969,3.9341c-0.16495,0.3508-0.19793,0.398-0.32164,0.506-0.13196,0.1281-0.36289,0.2092-0.58557,0.2092h-0.03299v0.3171h2.1856v-0.3171h-0.16495c-0.44536,0-0.66804-0.1282-0.66804-0.3846,0-0.081,0.02474-0.1755,0.07422-0.2835l0.27217-0.5938h2.1856l0.44536,0.9042c0.04948,0.1012,0.06598,0.1485,0.06598,0.1823,0,0.1079-0.20619,0.1754-0.51134,0.1754h-0.34639v0.3171h2.5567v-0.3171h-0.11546c-0.41238,0-0.5031-0.054-0.69279-0.4319l-2.1031-4.2174zm-0.40413,1.1067,0.93196,1.9164-1.8474,0,0.91547-1.9164zm-5.6907-1.0594-0.3134,0-0.3299,0.3981c-0.58557-0.3509-0.90722-0.4521-1.4598-0.4521-0.80001,0-1.4598,0.2632-2.0206,0.8097-0.52784,0.5129-0.77526,1.0797-0.77526,1.7747,0,1.4508,1.1629,2.4899,2.7876,2.4899,1.3196,0,2.1608-0.6342,2.3505-1.7678l-0.38763-0.054c-0.08248,0.3576-0.18145,0.6005-0.3299,0.803-0.33815,0.4655-0.86599,0.7017-1.534,0.7017-1.2206,0-1.798-0.695-1.798-2.1457,0-0.7626,0.12371-1.2754,0.40413-1.6804,0.25567-0.3778,0.76701-0.614,1.2949-0.614,0.57732,0,1.0887,0.2497,1.4021,0.6816,0.1567,0.2226,0.28041,0.4858,0.47011,1.0053h0.36288l-0.12371-1.95zm-8.2557,0.0067-0.30515,0-0.3299,0.4049c-0.38763-0.3036-0.91547-0.4656-1.501-0.4656-1.0804,0-1.8062,0.5668-1.8062,1.4102,0,0.7356,0.44536,1.1,1.6577,1.3564l0.7835,0.1619c0.61031,0.1283,0.66804,0.1418,0.84124,0.2496,0.24742,0.1553,0.37938,0.3779,0.37938,0.6411,0,0.2699-0.12371,0.4926-0.37113,0.6749-0.27217,0.1956-0.54434,0.2699-0.99795,0.2699-0.61031,0-1.0474-0.1552-1.435-0.5061-0.3464-0.3171-0.51959-0.6343-0.6433-1.1539h-0.35464l0.03299,1.9231h0.32165l0.37113-0.4588c0.55258,0.371,1.0144,0.506,1.732,0.506,1.2124,0,1.9876-0.5802,1.9876-1.4845,0-0.4183-0.1732-0.776-0.49485-1.0324-0.22268-0.1754-0.54433-0.2902-1.2041-0.4251l-0.88248-0.1822c-0.73402-0.1552-1.0804-0.4183-1.0804-0.83,0-0.4724,0.47011-0.7963,1.1711-0.7963,0.57732,0,1.0474,0.2026,1.3773,0.5871,0.23918,0.2767,0.38763,0.5601,0.49484,0.9042h0.35464l-0.09897-1.7544zm-11.151,2.7059,0-1.8355,0-0.1956c0-0.2834,0.07423-0.3172,0.74227-0.3172h0.1567v-0.3171h-2.7134v0.3171h0.14846c0.66804,0,0.74227,0.0338,0.74227,0.3172v0.1956,3.212,0.1957c0,0.2835-0.07423,0.3172-0.74227,0.3172h-0.14846v0.3171h2.7134v-0.3171h-0.1567c-0.66804,0-0.74227-0.0337-0.74227-0.3172v-0.1957-0.8569l0.9567-0.7894,1.4351,1.7206c0.13196,0.1619,0.16495,0.216,0.16495,0.2834,0,0.108-0.1567,0.1552-0.56083,0.1552h-0.25567v0.3171h2.8206v-0.3171h-0.1567c-0.45361,0-0.56907-0.0472-0.80826-0.3373l-1.9959-2.3551,1.2289-1.0054c0.39588-0.3442,0.89898-0.5399,1.3938-0.5399v-0.3171h-2.5402v0.3171h0.20619c0.37938,0,0.53609,0.0608,0.53609,0.2025,0,0.0944-0.16495,0.2901-0.40413,0.4858l-2.0206,1.66zm-9.2207-2.6654-1.699,0,0,0.3171,0.20618,0c0.42062,0,0.61032,0.054,0.75877,0.2227v2.8679c0,0.9245-0.16495,1.1201-0.9567,1.1471v0.3171h2.3505v-0.3171c-0.78353-0.027-0.94848-0.2226-0.94848-1.1471v-2.5035l3.6784,4.0622h0.3464v-3.5021c0-0.9245,0.16495-1.1202,0.95671-1.1472v-0.3171h-2.3505v0.3171c0.78351,0.027,0.94846,0.2227,0.94846,1.1472v2.1189l-3.2908-3.5832zm-5.3609,0.8299,0-0.1956c0-0.2834,0.07423-0.3172,0.73402-0.3172h0.16495v-0.3171h-2.7299v0.3171h0.16495c0.66804,0,0.74227,0.0338,0.74227,0.3172v0.1956,3.212,0.1957c0,0.2835-0.07423,0.3172-0.74227,0.3172h-0.16495v0.3171h2.7299v-0.3171h-0.16495c-0.65979,0-0.73402-0.0337-0.73402-0.3172v-0.1957-3.212z" inkscape:connector-curvature="0" stroke-width="1pt" fill="#FFF"/>
+ <path id="path1517" stroke-width="1.0000000pt" fill="#FFF" d="M305.97,58.204h1.35v2.817c0,0.532-0.02,0.862-0.05,0.989-0.13,0.485-0.42,0.819-0.87,1.003-0.31,0.127-0.77,0.19-1.38,0.19-1.43,0-2.15-0.428-2.15-1.285l1.43-0.007c0.1,0.268,0.36,0.402,0.81,0.402,0.32,0,0.55-0.101,0.68-0.303,0.1-0.155,0.15-0.41,0.15-0.763v-0.12c-0.43,0.344-0.9,0.516-1.41,0.516-0.56,0-1-0.177-1.34-0.53-0.33-0.358-0.5-0.814-0.5-1.37,0-0.485,0.19-0.889,0.57-1.214,0.36-0.301,0.79-0.452,1.29-0.452,0.64,0,1.12,0.209,1.42,0.628v-0.501zm-0.07,1.638c0-0.226-0.09-0.405-0.26-0.537-0.18-0.136-0.38-0.204-0.62-0.204-0.25,0-0.46,0.073-0.63,0.219-0.16,0.146-0.24,0.343-0.24,0.593,0,0.207,0.08,0.386,0.25,0.536,0.08,0.071,0.17,0.125,0.26,0.163,0.1,0.037,0.2,0.056,0.3,0.056,0.28,0,0.5-0.068,0.66-0.205,0.19-0.15,0.28-0.357,0.28-0.621zm-6.29-1.638h1.41v0.614c0.24-0.452,0.6-0.678,1.06-0.678l0.43,0.043v1.292c-0.21-0.038-0.4-0.057-0.56-0.057-0.6,0-0.9,0.356-0.9,1.067v1.37h-1.44v-3.651zm-2.67-0.127c0.62,0,1.14,0.165,1.56,0.494,0.43,0.353,0.65,0.84,0.65,1.462,0,0.607-0.21,1.09-0.64,1.447-0.41,0.33-0.92,0.495-1.54,0.495-0.68,0-1.23-0.153-1.64-0.459-0.46-0.339-0.69-0.841-0.69-1.504,0-0.622,0.23-1.109,0.7-1.462,0.42-0.315,0.96-0.473,1.6-0.473zm-0.04,2.867c0.24,0,0.44-0.09,0.59-0.269s0.22-0.393,0.22-0.642c0-0.25-0.07-0.464-0.21-0.643s-0.33-0.268-0.58-0.268-0.46,0.087-0.61,0.261c-0.08,0.09-0.13,0.186-0.17,0.29-0.04,0.099-0.06,0.219-0.06,0.36,0,0.259,0.07,0.475,0.21,0.649,0.14,0.175,0.35,0.262,0.61,0.262zm-4.05-0.516h1.45v1.427h-1.45v-1.427zm-3.56-0.014c0.15,0.377,0.4,0.565,0.74,0.565,0.36,0,0.58-0.099,0.68-0.297,0.08,0,0.3,0.015,0.63,0.043,0.34,0.028,0.64,0.042,0.89,0.042-0.24,0.466-0.54,0.791-0.91,0.975-0.33,0.16-0.77,0.24-1.32,0.24-0.65,0-1.17-0.167-1.56-0.502-0.42-0.353-0.63-0.847-0.63-1.483,0-0.607,0.23-1.087,0.69-1.44,0.41-0.311,0.93-0.466,1.57-0.466,0.63,0,1.14,0.16,1.54,0.48,0.4,0.316,0.63,0.782,0.69,1.398l0.01,0.445h-3.02zm1.52-0.861c-0.05-0.33-0.29-0.495-0.71-0.495-0.16,0-0.33,0.045-0.5,0.135-0.17,0.089-0.26,0.209-0.28,0.36h1.49zm-7.76-1.349h1.44l-0.01,0.459c0.4-0.381,0.84-0.572,1.34-0.572,0.56,0,1,0.174,1.32,0.523,0.33,0.343,0.5,0.795,0.5,1.355,0,0.579-0.16,1.052-0.48,1.419-0.34,0.391-0.79,0.587-1.35,0.587-0.31,0-0.55-0.036-0.73-0.106-0.17-0.071-0.37-0.215-0.59-0.431v1.687h-1.44v-4.921zm2.27,2.747c0.26,0,0.47-0.09,0.63-0.269,0.16-0.183,0.24-0.404,0.24-0.663,0-0.264-0.08-0.478-0.23-0.643-0.14-0.169-0.34-0.254-0.6-0.254-0.24,0-0.44,0.085-0.62,0.254-0.17,0.17-0.26,0.377-0.26,0.621,0,0.255,0.08,0.478,0.23,0.671,0.16,0.189,0.36,0.283,0.61,0.283zm-6.81-1.646c0.11-0.475,0.38-0.812,0.78-1.009,0.3-0.141,0.73-0.212,1.29-0.212,0.53,0,0.96,0.104,1.28,0.311,0.39,0.249,0.59,0.623,0.59,1.122v1.688c0,0.108,0.01,0.207,0.03,0.296,0.01,0.09,0.05,0.208,0.11,0.354h-1.49l-0.05-0.424c-0.34,0.353-0.76,0.529-1.24,0.529-0.39,0-0.72-0.091-1.01-0.275-0.31-0.216-0.47-0.513-0.47-0.89,0-0.409,0.13-0.713,0.4-0.911,0.2-0.141,0.5-0.244,0.93-0.31l1.02-0.12c0.22-0.038,0.33-0.097,0.33-0.177,0-0.183-0.14-0.275-0.41-0.275-0.16,0-0.29,0.019-0.39,0.056-0.1,0.033-0.18,0.116-0.23,0.247h-1.47zm1.27,1.356c0,0.198,0.17,0.297,0.5,0.297,0.21,0,0.39-0.066,0.55-0.198s0.25-0.297,0.25-0.494l-0.96,0.12c-0.06,0.005-0.14,0.035-0.22,0.092-0.08,0.051-0.12,0.113-0.12,0.183zm-1.58-1.038l-1.44,0.071c-0.09-0.193-0.17-0.332-0.26-0.417-0.11-0.099-0.27-0.148-0.46-0.148-0.27,0-0.47,0.094-0.62,0.282-0.14,0.184-0.21,0.412-0.21,0.685,0,0.236,0.08,0.436,0.24,0.601,0.16,0.16,0.36,0.24,0.59,0.24,0.38,0,0.62-0.21,0.74-0.629l1.45,0.064c-0.24,1.068-0.97,1.603-2.2,1.603-0.66,0-1.19-0.16-1.59-0.481-0.45-0.348-0.68-0.838-0.68-1.468,0-0.64,0.25-1.135,0.74-1.483,0.43-0.311,0.98-0.466,1.64-0.466,0.53,0,0.97,0.132,1.34,0.395,0.36,0.259,0.61,0.643,0.72,1.151zm-7.4,1.038c0.1,0.165,0.22,0.273,0.38,0.325,0.11,0.033,0.27,0.049,0.5,0.049,0.06,0,0.1-0.002,0.13-0.007,0.03-0.009,0.07-0.026,0.12-0.049,0.1-0.042,0.15-0.106,0.15-0.191,0-0.127-0.22-0.214-0.67-0.261-0.61-0.071-1.02-0.151-1.24-0.24-0.45-0.179-0.67-0.487-0.67-0.925,0-0.475,0.23-0.821,0.68-1.038,0.35-0.165,0.78-0.247,1.32-0.247,1.11,0,1.75,0.379,1.94,1.137l-1.37,0.091c-0.07-0.122-0.16-0.211-0.27-0.268-0.1-0.033-0.23-0.049-0.38-0.049-0.36,0-0.54,0.084-0.54,0.254,0,0.056,0.06,0.106,0.18,0.148,0.13,0.043,0.44,0.094,0.94,0.156,0.5,0.061,0.85,0.15,1.04,0.268,0.3,0.169,0.45,0.447,0.45,0.833,0,0.443-0.21,0.786-0.61,1.031-0.33,0.198-0.74,0.297-1.23,0.297-0.6,0-1.07-0.069-1.4-0.205-0.46-0.189-0.76-0.53-0.87-1.024l1.42-0.085zm-5.93-3.784h1.44v2.28l1.17-0.953h2l-1.75,1.37,1.76,2.288h-1.7l-1.08-1.49-0.4,0.289v1.194h-1.44v-4.978zm-4.85,1.32h1.45v0.48c0.37-0.386,0.83-0.579,1.36-0.579,0.43,0,0.78,0.12,1.04,0.36,0.27,0.236,0.4,0.57,0.4,1.003v2.408h-1.42l-0.01-2.055c0-0.188-0.06-0.341-0.18-0.459s-0.27-0.177-0.45-0.177c-0.24,0-0.42,0.092-0.55,0.276-0.13,0.183-0.19,0.398-0.19,0.642v1.759h-1.45v-3.658zm-1.98,0.007h1.44v3.636h-1.44v-3.636zm0-1.335h1.44v0.982h-1.44v-0.982zm-2.12,3.559h1.45v1.427h-1.45v-1.427zm-5.7-2.224l0.62,2.274c0.04-0.273,0.13-0.652,0.28-1.137,0.06-0.217,0.12-0.438,0.17-0.664,0.05-0.16,0.08-0.318,0.12-0.473l1.48,0.007,0.33,1.137c0.11,0.419,0.19,0.807,0.24,1.165,0.03-0.188,0.06-0.367,0.1-0.537,0.04-0.174,0.09-0.383,0.17-0.628,0.06-0.188,0.11-0.367,0.16-0.537,0.05-0.174,0.12-0.376,0.19-0.607h1.48l-1.29,3.658h-1.56l-0.55-2.098-0.6,2.098h-1.56l-1.28-3.658h1.5zm-6.53,0l0.61,2.274c0.05-0.273,0.14-0.652,0.29-1.137,0.06-0.217,0.12-0.438,0.17-0.664,0.04-0.16,0.08-0.318,0.12-0.473l1.48,0.007,0.33,1.137c0.11,0.419,0.19,0.807,0.24,1.165,0.03-0.188,0.06-0.367,0.1-0.537,0.04-0.174,0.09-0.383,0.17-0.628,0.06-0.188,0.11-0.367,0.16-0.537,0.05-0.174,0.12-0.376,0.19-0.607h1.48l-1.29,3.658h-1.56l-0.56-2.098-0.6,2.098h-1.55l-1.28-3.658h1.5zm-6.53,0l0.61,2.274c0.04-0.273,0.14-0.652,0.28-1.137,0.07-0.217,0.12-0.438,0.18-0.664,0.04-0.16,0.08-0.318,0.11-0.473l1.49,0.007,0.33,1.137c0.11,0.419,0.19,0.807,0.24,1.165,0.03-0.188,0.06-0.367,0.1-0.537,0.04-0.174,0.09-0.383,0.17-0.628,0.05-0.188,0.11-0.367,0.16-0.537,0.05-0.174,0.11-0.376,0.19-0.607h1.48l-1.29,3.658h-1.56l-0.56-2.098-0.6,2.098h-1.55l-1.29-3.658h1.51z"/>
+ <g id="g1495" fill-rule="evenodd" transform="matrix(0.500000,0.000000,0.000000,0.500000,2.541357,55.63388)">
+ <path id="path1496" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,5.149671,-45.83576)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient2456)"/>
+ <path id="path1497" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,2.022526,-44.58496)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient2456)"/>
+ <path id="path1498" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,-3.397884,-48.75451)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient2456)"/>
+ <path id="path1499" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,8.068429,-48.33756)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient2456)"/>
+ <path id="path1500" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,12.02955,-53.13256)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient2456)"/>
+ <path id="path1501" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,9.855679,-58.05951)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient2456)"/>
+ <path id="path1511" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,5.269166,-61.39511)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient2456)"/>
+ <path id="path1512" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,0.265717,-60.76966)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient2456)"/>
+ <path id="path1513" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,-3.903834,-56.18316)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient2456)"/>
+ <path id="path1514" sodipodi:rx="179.39815" sodipodi:ry="53.819443" sodipodi:type="arc" d="m606.48,567.71c0,29.724-80.319,53.819-179.4,53.819-99.079,0-179.4-24.096-179.4-53.819,0-29.724,80.319-53.819,179.4-53.819,99.079,0,179.4,24.096,179.4,53.819z" fill-opacity="0.75000000" transform="matrix(3.198050e-2,0.000000,0.000000,0.109292,-6.614049,-53.47301)" sodipodi:cy="567.70831" sodipodi:cx="427.08334" fill="url(#radialGradient2456)"/>
+ <g id="g1515" transform="matrix(5.883700e-2,0.000000,0.000000,5.883700e-2,-4.768899,-3.296641)">
+ <path id="path1516" d="M397.64,320.25l-117.25-37.73-29.65-157.69,94.34-95.683,48.52,17.52,90.3,88.953-86.26,184.63z" stroke="#000" stroke-width="0.93619299pt" fill="#FFF"/>
+ <path id="path1518" d="M476.96,339.17c18.82,3.77,22.59,16.94,18.82,20.71-3.76,3.76-13.17,7.53-20.7,1.88-7.54-5.65-7.54-18.82,1.88-22.59z" stroke-width="1.0000000pt" fill="#000"/>
+ <path id="path1519" d="M286.46,340.43c-1.83,0.49-17.16-12.72-29.29-6.6s-20.28,19.83-8.94,25.45c11.33,5.62,19.43-0.86,29.37-7.84s9.58-8.32,8.86-11.01z" stroke-width="1.0000000pt" fill="#000"/>
+ <path id="path1520" d="M510.36,306.93c10.23-2.56,33.88,0,30.12,15.06-3.77,15.06-35.77,9.41-56.48,1.88-1.88-15.06,21.53-15.74,26.36-16.94z" stroke-width="1.0000000pt" fill="#000"/>
+ <path id="path1521" d="M359.24,21.363c-11.31,0-22.61,4.32-31.27,12.989l-154.1,154.06c-8.49,8.5-12.76,19.55-12.93,30.64h-0.06c0,0.04,0.06,0.07,0.06,0.11,0,0.19-0.06,0.37-0.06,0.56h0.27c2.95,11.22,79.15,25.52,87.65,34.02,12.84,12.84-49.23,22.27-36.4,35.11,12.84,12.84,77.59,24.84,90.43,37.68s-26.23,26.51-13.39,39.35c12.83,12.84,55.96-3.21,48.15,30.28,17.34,17.34,53.51,9.06,77.73-8.28,12.84-12.84-24.63-11.7-11.79-24.54s45.25-12.91,72.56-43.62c-10.99-17.1-46.98-24.38-34.14-37.22s37.8-6.32,91.66-30.78c26.29-11.94,24.12-21.01,24.02-32-0.01-0.23,0-0.44,0-0.67h-0.06c-0.17-11.09-4.47-22.14-12.96-30.64l-154.07-154.06c-8.66-8.669-19.99-12.989-31.3-12.989zm-1.32,20.04c5.03,0.131,9.1,3.965,17.06,9.128l72.79,53.979c0.8,0.51,1.55,1.05,2.25,1.61,0.7,0.55,1.34,1.14,1.93,1.72,0.6,0.59,1.14,1.18,1.64,1.79s0.95,1.24,1.35,1.87c0.4,0.64,0.75,1.28,1.05,1.93s0.53,1.33,0.73,1.99,0.37,1.32,0.47,1.99,0.15,1.35,0.15,2.02l-43.13-20.831-4.3,32.561-23.72-11.12-36.63,24.46-14.02-48.33-18.05,42.28-50.41,5.03,0.56-22.44c0-5.39,29.06-43.124,46.75-52.107l32.39-23.259c4.78-3.097,8.13-4.35,11.14-4.271zm-66.99,220.21c22.94,5.95,48.47,13.76,68.95,13.9l0.88,9.22c-17.54-1.81-54.65-10.28-63.4-14.75l-6.43-8.37z" stroke-width="1.0000000pt" fill="#000"/>
+ </g>
+ </g>
+ <use id="use1328" style="color:#000000;" fill-rule="nonzero" xlink:href="#path1508" transform="matrix(5.176729,0,0,5.176729,-102.7023,-256.6246)" height="1052.3622" fill-opacity="0.06461535" width="744.09448" y="0" x="0" font-family="Bitstream Vera Sans" fill="#ffffff"/>
+ <text id="text7519" opacity="0.5" style="writing-mode:lr-tb;text-anchor:start;text-align:start;" line-height="125%" font-weight="normal" xml:space="preserve" transform="matrix(0,-1,1,0,0,0)" font-style="normal" font-stretch="normal" font-size="6.96932268px" font-variant="normal" y="-6.5672836" x="-70.83046" font-family="sans" sodipodi:linespacing="125%" fill="#000000"><tspan id="tspan7521" sodipodi:role="line" x="-70.83046" style="letter-spacing:0.29056421;" y="-6.5672836">Gebruik <tspan id="tspan7523" font-weight="bold">Ctrl+pijl omhoog</tspan> om te scrollen </tspan></text>
+ <path id="path7527" opacity="0.5" style="color:#000000;" sodipodi:type="star" sodipodi:sides="3" fill-rule="evenodd" fill="#000" sodipodi:r1="7.6034532" sodipodi:r2="3.8017266" sodipodi:arg1="0.62024949" sodipodi:arg2="1.667447" transform="matrix(-0.614962,-0.04549602,-0.06191898,0.451855,207.7892,-164.55389)" inkscape:randomized="0" sodipodi:cy="193.40422" sodipodi:cx="332.34018" inkscape:rounded="0" inkscape:flatsided="true" d="m338.53,197.82-13.108-1.2709,7.6547-10.717,5.4534,11.987z"/>
+ </g>
+ </g>
+</svg>
diff --git a/share/tutorials/tutorial-tips.svg b/share/tutorials/tutorial-tips.svg
index 616c2cbc6..176f9c753 100644
--- a/share/tutorials/tutorial-tips.svg
+++ b/share/tutorials/tutorial-tips.svg
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- DO NOT EDIT THIS FILE. It is produced automatically from a DocBook source (*.xml) by tutorial-svg.xsl. -->
<svg id="svg1" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" sodipodi:docname="tutorial-basic.svg" xmlns:string="http://www.jclark.com/xt/java/java.lang.String" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" sodipodi:version="0.32" height="3170pt" width="256pt" version="1.1" xmlns:cc="http://web.resource.org/cc/" xmlns:xlink="http://www.w3.org/1999/xlink" inkscape:version="0.48" xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview id="base" inkscape:window-x="0" inkscape:window-y="0" snaptoguides="true" inkscape:zoom="2.0000000" inkscape:cx="160.00000" inkscape:cy="3864.0000" inkscape:window-width="780" showborder="false" inkscape:window-height="580" showguides="true"/>
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
@@ -50,12 +51,12 @@
<path id="path7527" opacity="0.5" style="marker-end:none;color:black;marker-start:none;marker-mid:none;" sodipodi:type="star" sodipodi:sides="3" fill-rule="evenodd" fill="#000" sodipodi:r1="7.6034532" sodipodi:r2="3.8017266" sodipodi:arg1="0.62024949" sodipodi:arg2="1.667447" transform="matrix(0.614962,4.549602e-2,6.191898e-2,-0.451855,112.4558,201.6044)" inkscape:randomized="0" sodipodi:cy="193.40422" sodipodi:cx="332.34018" inkscape:rounded="0" inkscape:flatsided="true" d="M338.53,197.82l-13.11-1.27,7.65-10.71,5.46,11.98z"/>
</g>
<text id="text1920" style="writing-mode:lr-tb;text-anchor:start;" font-family="sans" font-size="7.0000000" font-style="normal" transform="scale(1.130730,1.130730)" font-stretch="normal" font-variant="normal" y="18.25828" x="176.24451" font-weight="normal" fill="#ffffff">
- <tspan id="tspan1668" style="letter-spacing:2.1813099;" dx="0 -0.57057059 0 0 0 0 0" fill="#ffffff">::TIPS AND TRICKS</tspan>
+ <tspan id="tspan1668" style="letter-spacing:2.1813099;" dx="0 -0.57057059 0 0 0 0 0" fill="#ffffff">::</tspan>
</text>
- <rect id="d0e10" display="none" height="1000px" width="264" y="36" x="35"/>
+ <rect id="d0e12" display="none" height="1000px" width="264" y="36" x="35"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;" font-family="sans" font-size="7.2" line-height="150%" font-weight="normal" font-style="italic" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e10"/>
+ <use y="0" x="0" xlink:href="#d0e12"/>
</flowRegion>
<flowDiv xml:space="preserve">This tutorial will demonstrate various tips and tricks that users have learned through
the use of Inkscape and some “hidden” features that can help you speed up production
@@ -65,37 +66,37 @@ tasks.
<text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="89.367967" x="10" font-family="sans" font-style="normal" fill="#000000">
<tspan y="89.367967" x="10">Radial placement with Tile Clones</tspan>
</text>
- <rect id="d0e19" display="none" height="1000px" width="288" y="94.568" x="10"/>
+ <rect id="d0e21" display="none" height="1000px" width="288" y="94.568" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e19"/>
+ <use y="0" x="0" xlink:href="#d0e21"/>
</flowRegion>
- <flowDiv xml:space="preserve">It's easy to see how to use the <flowSpan font-family="sans serif">Tile Clones</flowSpan> dialog for rectangular grids and
+ <flowDiv xml:space="preserve">It&apos;s easy to see how to use the <flowSpan font-family="sans serif">Tile Clones</flowSpan> dialog for rectangular grids and
patterns. But what if you need <flowSpan font-style="italic">radial</flowSpan> placement, where objects
-share a common center of rotation? It's possible too!
+share a common center of rotation? It&apos;s possible too!
</flowDiv>
</flowRoot>
- <rect id="d0e28" display="none" height="1000px" width="288" y="133.59" x="10"/>
+ <rect id="d0e30" display="none" height="1000px" width="288" y="133.59" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e28"/>
+ <use y="0" x="0" xlink:href="#d0e30"/>
</flowRegion>
<flowDiv xml:space="preserve">If your radial pattern need only have 3, 4, 6, 8, or 12 elements, then you can try the
P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These would work nicely for snowflakes
and the like. A more general method, however, is as follows.
</flowDiv>
</flowRoot>
- <rect id="d0e31" display="none" height="1000px" width="288" y="182.68" x="10"/>
+ <rect id="d0e33" display="none" height="1000px" width="288" y="182.68" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e31"/>
+ <use y="0" x="0" xlink:href="#d0e33"/>
</flowRegion>
<flowDiv xml:space="preserve">Choose the P1 symmetry (simple translation) and then <flowSpan font-style="italic">compensate</flowSpan> for
that translation by going to the <flowSpan font-family="sans serif">Shift</flowSpan> tab and setting <flowSpan font-family="sans serif">Per
row/Shift Y</flowSpan> and <flowSpan font-family="sans serif">Per column/Shift X</flowSpan> both to -100%. Now all
clones will be stacked exactly on top of the original. All that remains to do is to go
to the <flowSpan font-family="sans serif">Rotation</flowSpan> tab and set some rotation angle per column, then
-create the pattern with one row and multiple columns. For example, here's a pattern made
+create the pattern with one row and multiple columns. For example, here&apos;s a pattern made
out of a horizontal line, with 30 columns, each column rotated 6 degrees:
</flowDiv>
</flowRoot>
@@ -129,21 +130,21 @@ out of a horizontal line, with 30 columns, each column rotated 6 degrees:
<use id="tips-f01-en.svguse81" xlink:href="#tips-f01-en.svgpath25" transform="translate(10, 283.013598) matrix(-0.951057,0.309017,-0.309017,-0.951057,291.8368,71.57745) translate(-10, -283.013598)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
<use id="tips-f01-en.svguse82" xlink:href="#tips-f01-en.svgpath25" transform="translate(10, 283.013598) matrix(-0.978148,0.207912,-0.207912,-0.978148,289.6811,87.35318) translate(-10, -283.013598)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
<use id="tips-f01-en.svguse83" xlink:href="#tips-f01-en.svgpath25" transform="translate(10, 283.013598) matrix(-0.994522,0.104528,-0.104528,-0.994522,285.8885,102.8173) translate(-10, -283.013598)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#path25" y="0.0000000" x="0.0000000"/>
- <rect id="d0e59" display="none" height="1000px" width="288" y="412.81" x="10"/>
+ <rect id="d0e61" display="none" height="1000px" width="288" y="412.81" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e59"/>
+ <use y="0" x="0" xlink:href="#d0e61"/>
</flowRegion>
<flowDiv xml:space="preserve">To get a clock dial out of this, all you need to do is cut out or simply overlay the
central part by a white circle (to do boolean operations on clones, unlink them first).
</flowDiv>
</flowRoot>
- <rect id="d0e62" display="none" height="1000px" width="288" y="451.42" x="10"/>
+ <rect id="d0e64" display="none" height="1000px" width="288" y="451.42" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e62"/>
+ <use y="0" x="0" xlink:href="#d0e64"/>
</flowRegion>
- <flowDiv xml:space="preserve">More interesting effects can be created by using both rows and columns. Here's a pattern
+ <flowDiv xml:space="preserve">More interesting effects can be created by using both rows and columns. Here&apos;s a pattern
with 10 columns and 8 rows, with rotation of 2 degrees per row and 18 degrees per
column. Each group of lines here is a “column”, so the groups are 18 degrees from each
other; within each column, individual lines are 2 degrees apart:
@@ -229,10 +230,10 @@ other; within each column, individual lines are 2 degrees apart:
<use id="tips-f02-en.svguse1549" xlink:href="#tips-f02-en.svgpath92" transform="translate(10, 519.833287) matrix(-0.983255,0.182236,-0.182236,-0.983255,298.6455,115.8555) translate(-10, -519.833287)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
<use id="tips-f02-en.svguse1550" xlink:href="#tips-f02-en.svgpath92" transform="translate(10, 519.833287) matrix(-0.987688,0.156434,-0.156434,-0.987688,297.4360,119.8908) translate(-10, -519.833287)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
<use id="tips-f02-en.svguse1551" xlink:href="#tips-f02-en.svgpath92" transform="translate(10, 519.833287) matrix(-0.991445,0.130526,-0.130526,-0.991445,296.1201,123.8925) translate(-10, -519.833287)" height="2150.5000" width="320.00000" inkscape:tiled-clone-of="#path92" y="0.0000000" x="0.0000000"/>
- <rect id="d0e75" display="none" height="1000px" width="288" y="675.13" x="10"/>
+ <rect id="d0e77" display="none" height="1000px" width="288" y="675.13" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e75"/>
+ <use y="0" x="0" xlink:href="#d0e77"/>
</flowRegion>
<flowDiv xml:space="preserve">In the above examples, the line was rotated around its center. But what if you want the
center to be outside of your shape? Just create an invisible (no fill, no stroke)
@@ -318,35 +319,36 @@ scale, rotation, and possibly opacity:
<use id="tips-f03-en.svguse5896" xlink:href="#tips-f03-en.svgg1768" transform="translate(10, 764.8287560000001) matrix(1.521722,-0.574611,0.574611,1.521722,-116.7675,39.69527) translate(-10, -764.8287560000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
<use id="tips-f03-en.svguse5897" xlink:href="#tips-f03-en.svgg1768" transform="translate(10, 764.8287560000001) matrix(0.546248,-0.904563,0.904563,0.546248,-6.585200,160.6755) translate(-10, -764.8287560000001)" height="1052.3622" width="744.09448" inkscape:tiled-clone-of="#g1768" y="0.0000000" x="0.0000000"/>
<text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="943.6395160000001" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="943.6395160000001" x="10">How to do slicing (multiple rectangluar export areas)?</tspan>
+ <tspan y="943.6395160000001" x="10">How to do slicing (multiple rectangular export areas)?</tspan>
</text>
- <rect id="d0e97" display="none" height="1000px" width="288" y="948.84" x="10"/>
+ <rect id="d0e99" display="none" height="1000px" width="288" y="948.84" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e97"/>
+ <use y="0" x="0" xlink:href="#d0e99"/>
</flowRegion>
<flowDiv xml:space="preserve">Create a new layer, in that layer create invisible rectangles covering parts of your
image. Make sure your document uses the px unit (default), turn on grid and snap the
rects to the grid so that each one spans a whole number of px units. Assign meaningful
-ids to the rects, and export each one to its own file. Then the rects will remember
-their export filenames. After that, it's very easy to re-export some of the rects:
+ids to the rects, and export each one to its own file (<flowSpan font-family="sans serif">File
+&gt; Export Bitmap</flowSpan> (<flowSpan font-weight="bold">Shift+Ctrl+E</flowSpan>)). Then the rects will remember
+their export filenames. After that, it&apos;s very easy to re-export some of the rects:
switch to the export layer, use Tab to select the one you need (or use Find by id), and
-click Export in the dialog. Or, you can write a shell script or batch file to export all
-of your areas, with a command like:
+click Export in the dialog. Or, you can write a shell script or batch file to export
+all of your areas, with a command like:
</flowDiv>
</flowRoot>
- <rect id="d0e100" display="none" height="1000px" width="288" y="1060.8" x="10"/>
+ <rect id="d0e108" display="none" height="1000px" width="288" y="1062.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e100"/>
+ <use y="0" x="0" xlink:href="#d0e108"/>
</flowRegion>
<flowDiv xml:space="preserve">inkscape -i area-id -t filename.svg
</flowDiv>
</flowRoot>
- <rect id="d0e103" display="none" height="1000px" width="288" y="1078.6" x="10"/>
+ <rect id="d0e111" display="none" height="1000px" width="288" y="1080.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e103"/>
+ <use y="0" x="0" xlink:href="#d0e111"/>
</flowRegion>
<flowDiv xml:space="preserve">for each exported area. The -t switch tells it to use the remembered filename hint,
otherwise you can provide the export filename with the -e switch. Alternatively, you can
@@ -354,28 +356,28 @@ use the <flowSpan font-weight="bold" font-family="sans serif">svgslice</flowSpan
automate exporting from Inkscape SVG documents, using either a slice layer or guides.
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1151.8618648" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1151.8618648" x="10">Non-linear gradients</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1153.5653447999998" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1153.5653447999998" x="10">Non-linear gradients</tspan>
</text>
- <rect id="d0e115" display="none" height="1000px" width="288" y="1157.1" x="10"/>
+ <rect id="d0e123" display="none" height="1000px" width="288" y="1158.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e115"/>
+ <use y="0" x="0" xlink:href="#d0e123"/>
</flowRegion>
<flowDiv xml:space="preserve">The version 1.1 of SVG does not support non-linear gradients (i.e. those which have a
non-linear translations between colors). You can, however, emulate them by
<flowSpan font-style="italic">multistop</flowSpan> gradients. </flowDiv>
</flowRoot>
- <rect id="d0e121" display="none" height="1000px" width="288" y="1196.2" x="10"/>
+ <rect id="d0e129" display="none" height="1000px" width="288" y="1197.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e121"/>
+ <use y="0" x="0" xlink:href="#d0e129"/>
</flowRegion>
<flowDiv xml:space="preserve">Start with a simple two-stop gradient. Open the Gradient editor (e.g. by
double-clicking on any gradient handle in the Gradient tool). Add a new gradient stop in
the middle; drag it a bit. Then add more stops before and after the middle stop and drag
them too, so that the gradient is smooth. The more stops you add, the smoother you can
-make the resulting gradient. Here's the initial black-white gradient with two stops:
+make the resulting gradient. Here&apos;s the initial black-white gradient with two stops:
</flowDiv>
</flowRoot>
<defs id="tips-f04-en.svgdefs3">
@@ -384,11 +386,11 @@ make the resulting gradient. Here's the initial black-white gradient with two st
<stop id="tips-f04-en.svgstop843" stop-color="#FFF" offset="1"/>
</linearGradient>
</defs>
- <rect id="tips-f04-en.svgrect1511" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1285.7795218) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-16.125" fill="url(#tips-f04-en.svglinearGradient844)"/>
- <rect id="d0e134" display="none" height="1000px" width="288" y="1313.9" x="10"/>
+ <rect id="tips-f04-en.svgrect1511" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1287.4830018) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-16.125" fill="url(#tips-f04-en.svglinearGradient844)"/>
+ <rect id="d0e142" display="none" height="1000px" width="288" y="1315.6" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e134"/>
+ <use y="0" x="0" xlink:href="#d0e142"/>
</flowRegion>
<flowDiv xml:space="preserve">And here are various “non-linear” multi-stop gradients (examine them in the Gradient
Editor):
@@ -475,25 +477,25 @@ Editor):
<stop id="tips-f05-en.svgstop3630" stop-color="#fff" offset="1"/>
</linearGradient>
</defs>
- <rect id="tips-f05-en.svgrect3632" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1349.8683938000001) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-79.393" fill="url(#tips-f05-en.svglinearGradient4000)"/>
- <rect id="tips-f05-en.svgrect836" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1349.8683938000001) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-63.336" fill="url(#tips-f05-en.svglinearGradient3997)"/>
- <rect id="tips-f05-en.svgrect847" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1349.8683938000001) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-47.28" fill="url(#tips-f05-en.svglinearGradient3994)"/>
- <rect id="tips-f05-en.svgrect858" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1349.8683938000001) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-95.45" fill="url(#tips-f05-en.svglinearGradient3991)"/>
- <rect id="tips-f05-en.svgrect869" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1349.8683938000001) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-111.51" fill="url(#tips-f05-en.svglinearGradient3988)"/>
- <rect id="tips-f05-en.svgrect879" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1349.8683938000001) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-31.223" fill="url(#tips-f05-en.svglinearGradient3985)"/>
- <rect id="tips-f05-en.svgrect890" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1349.8683938000001) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-15.167" fill="url(#tips-f05-en.svglinearGradient3982)"/>
- <rect id="tips-f05-en.svgrect901" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1349.8683938000001) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-127.56" fill="url(#tips-f05-en.svglinearGradient3979)"/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1503.1892938" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1503.1892938" x="10">Excentric radial gradients</tspan>
+ <rect id="tips-f05-en.svgrect3632" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1351.5718738) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-79.393" fill="url(#tips-f05-en.svglinearGradient4000)"/>
+ <rect id="tips-f05-en.svgrect836" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1351.5718738) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-63.336" fill="url(#tips-f05-en.svglinearGradient3997)"/>
+ <rect id="tips-f05-en.svgrect847" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1351.5718738) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-47.28" fill="url(#tips-f05-en.svglinearGradient3994)"/>
+ <rect id="tips-f05-en.svgrect858" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1351.5718738) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-95.45" fill="url(#tips-f05-en.svglinearGradient3991)"/>
+ <rect id="tips-f05-en.svgrect869" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1351.5718738) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-111.51" fill="url(#tips-f05-en.svglinearGradient3988)"/>
+ <rect id="tips-f05-en.svgrect879" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1351.5718738) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-31.223" fill="url(#tips-f05-en.svglinearGradient3985)"/>
+ <rect id="tips-f05-en.svgrect890" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1351.5718738) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-15.167" fill="url(#tips-f05-en.svglinearGradient3982)"/>
+ <rect id="tips-f05-en.svgrect901" fill-opacity="0.75" fill-rule="evenodd" transform="translate(10, 1351.5718738) matrix(9.027671e-18,-1.000000,-1.000000,-5.333410e-18,0.000000,0.000000)" height="286.4" width="16.125" y="-305.42" x="-127.56" fill="url(#tips-f05-en.svglinearGradient3979)"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1504.8927738" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1504.8927738" x="10">Excentric radial gradients</tspan>
</text>
- <rect id="d0e153" display="none" height="1000px" width="288" y="1508.4" x="10"/>
+ <rect id="d0e161" display="none" height="1000px" width="288" y="1510.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e153"/>
+ <use y="0" x="0" xlink:href="#d0e161"/>
</flowRegion>
- <flowDiv xml:space="preserve">Radial gradients don't have to be symmetric. In Gradient tool, drag the central handle
+ <flowDiv xml:space="preserve">Radial gradients don&apos;t have to be symmetric. In Gradient tool, drag the central handle
of an elliptic gradient with <flowSpan font-weight="bold">Shift</flowSpan>. This will move the x-shaped
-<flowSpan font-style="italic">focus handle</flowSpan> of the gradient away from its center. When you don't
+<flowSpan font-style="italic">focus handle</flowSpan> of the gradient away from its center. When you don&apos;t
need it, you can snap the focus back by dragging it close to the center.
</flowDiv>
</flowRoot>
@@ -507,28 +509,28 @@ need it, you can snap the focus back by dragging it close to the center.
<stop id="tips-f06-en.svgstop1079" stop-color="#000" stop-opacity="0" offset="1"/>
</radialGradient>
</defs>
- <rect id="tips-f06-en.svgrect1569" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1575.1604118) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="70.82" stroke-width="0.89427pt" fill="url(#tips-f06-en.svgradialGradient4034)"/>
- <rect id="tips-f06-en.svgrect1570" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1575.1604118) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="153.67" stroke-width="0.89427pt" fill="url(#tips-f06-en.svgradialGradient4031)"/>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1669.2648708" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1669.2648708" x="10">Aligning to the center of the page</tspan>
+ <rect id="tips-f06-en.svgrect1569" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1576.8638918000001) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="70.82" stroke-width="0.89427pt" fill="url(#tips-f06-en.svgradialGradient4034)"/>
+ <rect id="tips-f06-en.svgrect1570" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10, 1576.8638918000001) " height="68.187" width="74.385" stroke="#000" y="0.55902" x="153.67" stroke-width="0.89427pt" fill="url(#tips-f06-en.svgradialGradient4031)"/>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1670.9683508" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1670.9683508" x="10">Aligning to the center of the page</tspan>
</text>
- <rect id="d0e178" display="none" height="1000px" width="288" y="1674.5" x="10"/>
+ <rect id="d0e186" display="none" height="1000px" width="288" y="1676.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e178"/>
+ <use y="0" x="0" xlink:href="#d0e186"/>
</flowRegion>
<flowDiv xml:space="preserve">To align something to the center or side of a page, select the object or group and then
choose <flowSpan font-family="sans serif">Page</flowSpan> from the <flowSpan font-family="sans serif">Relative to:</flowSpan> list in the
-Align dialog (<flowSpan font-weight="bold">Ctrl+Shift+A</flowSpan>).
+Align and Distribute dialog (<flowSpan font-weight="bold">Ctrl+Shift+A</flowSpan>).
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1726.4200508" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1726.4200508" x="10">Cleaning up the document</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1728.1235308" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1728.1235308" x="10">Cleaning up the document</tspan>
</text>
- <rect id="d0e196" display="none" height="1000px" width="288" y="1731.6" x="10"/>
+ <rect id="d0e204" display="none" height="1000px" width="288" y="1733.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e196"/>
+ <use y="0" x="0" xlink:href="#d0e204"/>
</flowRegion>
<flowDiv xml:space="preserve">Many of the no-longer-used gradients, patterns, and markers (more precisely, those which
you edited manually) remain in the corresponding palettes and can be reused for new
@@ -537,47 +539,30 @@ Defs</flowSpan> command in File menu. It will remove any gradients, patterns, or
which are not used by anything in the document, making the file smaller.
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1815.4755208" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1815.4755208" x="10">Clipping or masking a bitmap</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1817.1790008" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1817.1790008" x="10">Hidden features and the XML editor</tspan>
</text>
- <rect id="d0e208" display="none" height="1000px" width="288" y="1820.7" x="10"/>
+ <rect id="d0e216" display="none" height="1000px" width="288" y="1822.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e208"/>
+ <use y="0" x="0" xlink:href="#d0e216"/>
</flowRegion>
- <flowDiv xml:space="preserve">By default, an imported bitmap (e.g. a photo) is an image element which is not
-editable by the Node tool. To work around this, convert the image into a rectangle with
-pattern fill by <flowSpan font-family="sans serif">Object to Pattern</flowSpan> (<flowSpan font-weight="bold">Alt+I</flowSpan>). This will
-give you a rectangle <flowSpan font-style="italic">filled</flowSpan> with your bitmap. Now this object can
-be converted to path, node-edited, intersected with other shapes etc. In
-<flowSpan font-family="sans serif">Inkscape Preferences</flowSpan> (<flowSpan font-family="sans serif">Misc</flowSpan> tab), you can set the
-option of always importing bitmaps as pattern-filled rectangles.
+ <flowDiv xml:space="preserve">The XML editor (<flowSpan font-weight="bold">Shift+Ctrl+X</flowSpan>) allows you to change almost all aspects
+of the document without using an external text editor. Also, Inkscape usually supports
+more SVG features than are accessible from the GUI. The XML editor is one way to get
+access to these features (if you know SVG).
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1915.2104147999999" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1915.2104147999999" x="10">Hidden features and the XML editor</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1895.5944708" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1895.5944708" x="10">Changing the rulers&apos; unit of measure</tspan>
</text>
- <rect id="d0e232" display="none" height="1000px" width="288" y="1920.4" x="10"/>
+ <rect id="d0e228" display="none" height="1000px" width="288" y="1900.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e232"/>
- </flowRegion>
- <flowDiv xml:space="preserve">The XML editor allows you to change almost all aspects of the document without using an
-external text editor. Also, Inkscape usually supports more SVG features than are
-accessible from the GUI. The XML editor is one way to get access to these features (if
-you know SVG).
-</flowDiv>
- </flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1993.0946347999998" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="1993.0946347999998" x="10">Changing the rulers' unit of measure</tspan>
- </text>
- <rect id="d0e241" display="none" height="1000px" width="288" y="1998.3" x="10"/>
- <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
- <flowRegion>
- <use y="0" x="0" xlink:href="#d0e241"/>
+ <use y="0" x="0" xlink:href="#d0e228"/>
</flowRegion>
<flowDiv xml:space="preserve">In the default template, the unit of measure used by the rulers is px (“SVG user unit”,
-in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in
+in Inkscape it&apos;s equal to 0.8pt or 1/90 of the inch). This is also the unit used in
displaying coordinates at the lower-left corner and preselected in all units menus. (You
can always hover your mouse over a ruler to see the tooltip with the units it uses.) To
change this, open <flowSpan font-family="sans serif">Document Preferences</flowSpan>
@@ -585,13 +570,13 @@ change this, open <flowSpan font-family="sans serif">Document Preferences</flowS
<flowSpan font-family="sans serif">Page</flowSpan> tab.
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2092.6965328" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2092.6965328" x="10">Stamping</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="1995.1963687999998" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="1995.1963687999998" x="10">Stamping</tspan>
</text>
- <rect id="d0e262" display="none" height="1000px" width="288" y="2097.9" x="10"/>
+ <rect id="d0e249" display="none" height="1000px" width="288" y="2000.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e262"/>
+ <use y="0" x="0" xlink:href="#d0e249"/>
</flowRegion>
<flowDiv xml:space="preserve">To quickly create many copies of an object, use <flowSpan font-style="italic">stamping</flowSpan>. Just
drag an object (or scale or rotate it), and while holding the mouse button down, press
@@ -599,57 +584,57 @@ drag an object (or scale or rotate it), and while holding the mouse button down,
repeat it as many times as you wish.
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2160.4917138" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2160.4917138" x="10">Pen tool tricks</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2062.9915498" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2062.9915498" x="10">Pen tool tricks</tspan>
</text>
- <rect id="d0e277" display="none" height="1000px" width="288" y="2165.7" x="10"/>
+ <rect id="d0e264" display="none" height="1000px" width="288" y="2068.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e277"/>
+ <use y="0" x="0" xlink:href="#d0e264"/>
</flowRegion>
<flowDiv xml:space="preserve">In the Pen (Bezier) tool, you have the following options to finish the current line:
</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2198.5231208)"/>
- <rect id="d0e283" display="none" height="1000px" width="258" y="2192.5" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2101.0229568)"/>
+ <rect id="d0e270" display="none" height="1000px" width="258" y="2095" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e283"/>
+ <use y="0" x="0" xlink:href="#d0e270"/>
</flowRegion>
<flowDiv xml:space="preserve">Press <flowSpan font-weight="bold">Enter</flowSpan>
</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2214.4684333)"/>
- <rect id="d0e290" display="none" height="1000px" width="258" y="2208.5" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2116.9682693)"/>
+ <rect id="d0e277" display="none" height="1000px" width="258" y="2111" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e290"/>
+ <use y="0" x="0" xlink:href="#d0e277"/>
</flowRegion>
<flowDiv xml:space="preserve">Double click with the left mouse button
</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2230.6598395)"/>
- <rect id="d0e294" display="none" height="1000px" width="258" y="2224.7" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2133.1596755)"/>
+ <rect id="d0e281" display="none" height="1000px" width="258" y="2127.2" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e294"/>
+ <use y="0" x="0" xlink:href="#d0e281"/>
</flowRegion>
<flowDiv xml:space="preserve">Select the Pen tool again
</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15, 2248.5153083)"/>
- <rect id="d0e298" display="none" height="1000px" width="258" y="2242.5" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15, 2151.0151443)"/>
+ <rect id="d0e285" display="none" height="1000px" width="258" y="2145" x="20"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e298"/>
+ <use y="0" x="0" xlink:href="#d0e285"/>
</flowRegion>
<flowDiv xml:space="preserve">Select another tool
</flowDiv>
</flowRoot>
- <rect id="d0e302" display="none" height="1000px" width="288" y="2258.7" x="10"/>
+ <rect id="d0e289" display="none" height="1000px" width="288" y="2161.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e302"/>
+ <use y="0" x="0" xlink:href="#d0e289"/>
</flowRegion>
<flowDiv xml:space="preserve">Note that while the path is unfinished (i.e. is shown green, with the current segment
red) it does not yet exist as an object in the document. Therefore, to cancel it, use
@@ -657,10 +642,10 @@ either <flowSpan font-weight="bold">Esc</flowSpan> (cancel the whole path) or <f
(remove the last segment of the unfinished path) instead of <flowSpan font-family="sans serif">Undo</flowSpan>.
</flowDiv>
</flowRoot>
- <rect id="d0e314" display="none" height="1000px" width="288" y="2317.5" x="10"/>
+ <rect id="d0e301" display="none" height="1000px" width="288" y="2220" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e314"/>
+ <use y="0" x="0" xlink:href="#d0e301"/>
</flowRegion>
<flowDiv xml:space="preserve">To add a new subpath to an existing path, select that path and start drawing with
<flowSpan font-weight="bold">Shift</flowSpan> from an arbitrary point. If, however, what you want is to simply
@@ -668,13 +653,13 @@ either <flowSpan font-weight="bold">Esc</flowSpan> (cancel the whole path) or <f
drawing from one of the end anchors of the selected path.
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2380.0927285000002" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2380.0927285000002" x="10">Entering Unicode values</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2282.5925645" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2282.5925645" x="10">Entering Unicode values</tspan>
</text>
- <rect id="d0e329" display="none" height="1000px" width="288" y="2385.3" x="10"/>
+ <rect id="d0e316" display="none" height="1000px" width="288" y="2287.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e329"/>
+ <use y="0" x="0" xlink:href="#d0e316"/>
</flowRegion>
<flowDiv xml:space="preserve">While in the Text tool, pressing <flowSpan font-weight="bold">Ctrl+U</flowSpan> toggles between Unicode and
normal mode. In Unicode mode, each group of 4 hexadecimal digits you type becomes a
@@ -685,13 +670,13 @@ an em-dash (—). To quit the Unicode mode without inserting anything press
<flowSpan font-weight="bold">Esc</flowSpan>.
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2479.8276225000004" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2479.8276225000004" x="10">Using the grid for drawing icons</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2382.3274585000004" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2382.3274585000004" x="10">Using the grid for drawing icons</tspan>
</text>
- <rect id="d0e350" display="none" height="1000px" width="288" y="2485" x="10"/>
+ <rect id="d0e337" display="none" height="1000px" width="288" y="2387.5" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e350"/>
+ <use y="0" x="0" xlink:href="#d0e337"/>
</flowRegion>
<flowDiv xml:space="preserve">Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the
<flowSpan font-family="sans serif">Document Preferences</flowSpan>) and set the grid to 0.5 px (48x48 gridlines).
@@ -701,13 +686,13 @@ number, and export it at the default 90dpi (so that 1 px becomes 1 bitmap pixel)
get a crisp bitmap image without unneeded antialiasing.
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2579.5230915" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2579.5230915" x="10">Object rotation</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2482.0229275" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2482.0229275" x="10">Object rotation</tspan>
</text>
- <rect id="d0e368" display="none" height="1000px" width="288" y="2584.7" x="10"/>
+ <rect id="d0e355" display="none" height="1000px" width="288" y="2487.2" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e368"/>
+ <use y="0" x="0" xlink:href="#d0e355"/>
</flowRegion>
<flowDiv xml:space="preserve">When in the Select tool, <flowSpan font-weight="bold">click</flowSpan> on an object to see the scaling arrows,
then <flowSpan font-weight="bold">click again</flowSpan> on the object to see the rotation and shift arrows. If
@@ -717,10 +702,10 @@ doing this, the rotation will occur around the opposite corner. You can also dra
rotation center to any place.
</flowDiv>
</flowRoot>
- <rect id="d0e380" display="none" height="1000px" width="288" y="2655.8" x="10"/>
+ <rect id="d0e367" display="none" height="1000px" width="288" y="2558.3" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e380"/>
+ <use y="0" x="0" xlink:href="#d0e367"/>
</flowRegion>
<flowDiv xml:space="preserve">Or, you can rotate from keyboard by pressing <flowSpan font-weight="bold">[</flowSpan> and <flowSpan font-weight="bold">]</flowSpan>
(by 15 degrees) or <flowSpan font-weight="bold">Ctrl+[</flowSpan> and <flowSpan font-weight="bold">Ctrl+]</flowSpan> (by 90
@@ -728,43 +713,28 @@ degrees). The same <flowSpan font-weight="bold">[]</flowSpan> keys with <flowSpa
pixel-size rotation.
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2707.6598815" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2707.6598815" x="10">Open dialog as an object palette</tspan>
- </text>
- <rect id="d0e407" display="none" height="1000px" width="288" y="2712.9" x="10"/>
- <flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
- <flowRegion>
- <use y="0" x="0" xlink:href="#d0e407"/>
- </flowRegion>
- <flowDiv xml:space="preserve">If you have a number of small SVG files whose contents you often reuse in other
-documents, you can conveniently use the Open dialog as a palette. Add the directory with
-your SVG sources into the bookmarks list so you can open it quickly. Then browse that
-directory looking at the previews. Once you found the file you need, simply drag it to
-the canvas and it will be imported into your current document.
-</flowDiv>
- </flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2796.7153515" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2796.7153515" x="10">Drop shadows</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2610.1597175" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2610.1597175" x="10">Drop shadows</tspan>
</text>
- <rect id="d0e416" display="none" height="1000px" width="288" y="2801.9" x="10"/>
+ <rect id="d0e394" display="none" height="1000px" width="288" y="2615.4" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e416"/>
+ <use y="0" x="0" xlink:href="#d0e394"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape supports the Gaussian blur SVG filter, so you can easily create blurred drop
shadows for objects. Select an object, duplicate it by <flowSpan font-weight="bold">Ctrl+D</flowSpan>, press
<flowSpan font-weight="bold">PgDown</flowSpan> to put it beneath original object, place it a little to the right
and lower than original object. Now open Fill And Stroke dialog and change Blur value to,
-say, 5.0. That's it!
+say, 5.0. That&apos;s it!
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2875.1505325" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2875.1505325" x="10">Placing text on a path</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2688.5948985" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2688.5948985" x="10">Placing text on a path</tspan>
</text>
- <rect id="d0e431" display="none" height="1000px" width="288" y="2880.4" x="10"/>
+ <rect id="d0e409" display="none" height="1000px" width="288" y="2693.8" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e431"/>
+ <use y="0" x="0" xlink:href="#d0e409"/>
</flowRegion>
<flowDiv xml:space="preserve">To place text along a curve, select the text and the curve together and choose
<flowSpan font-family="sans serif">Put on Path</flowSpan> from the Text menu. The text will start at the beginning
@@ -773,13 +743,13 @@ be fitted to, rather than fitting it to some other drawing element — this will
more control without screwing over your drawing.
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2964.2060024999996" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="2964.2060024999996" x="10">Selecting the original</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2777.6503685" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2777.6503685" x="10">Selecting the original</tspan>
</text>
- <rect id="d0e443" display="none" height="1000px" width="288" y="2969.4" x="10"/>
+ <rect id="d0e421" display="none" height="1000px" width="288" y="2782.9" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e443"/>
+ <use y="0" x="0" xlink:href="#d0e421"/>
</flowRegion>
<flowDiv xml:space="preserve">When you have a text on path, a linked offset, or a clone, their source object/path may
be difficult to select because it may be directly underneath, or made invisible and/or
@@ -788,13 +758,13 @@ offset, or clone, and press <flowSpan font-weight="bold">Shift+D</flowSpan> to m
corresponding path, offset source, or clone original.
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3053.3206115" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3053.3206115" x="10">Window off-screen recovery</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2866.7649775" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2866.7649775" x="10">Window off-screen recovery</tspan>
</text>
- <rect id="d0e458" display="none" height="1000px" width="288" y="3058.5" x="10"/>
+ <rect id="d0e436" display="none" height="1000px" width="288" y="2872" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e458"/>
+ <use y="0" x="0" xlink:href="#d0e436"/>
</flowRegion>
<flowDiv xml:space="preserve">When moving documents between systems with different resolutions or number of displays,
you may find Inkscape has saved a window position that places the window out of reach on
@@ -804,18 +774,18 @@ option to save window geometry (<flowSpan font-family="sans serif">Inkscape Pref
<flowSpan font-family="sans serif">Windows</flowSpan> tab).
</flowDiv>
</flowRoot>
- <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="3152.4848304999996" x="10" font-family="sans" font-style="normal" fill="#000000">
- <tspan y="3152.4848304999996" x="10">Transparency, gradients, and PostScript export</tspan>
+ <text style="writing-mode:lr;text-anchor:start;" font-weight="bold" font-size="8" y="2965.9291965" x="10" font-family="sans" font-style="normal" fill="#000000">
+ <tspan y="2965.9291965" x="10">Transparency, gradients, and PostScript export</tspan>
</text>
- <rect id="d0e473" display="none" height="1000px" width="288" y="3157.7" x="10"/>
+ <rect id="d0e451" display="none" height="1000px" width="288" y="2971.1" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e473"/>
+ <use y="0" x="0" xlink:href="#d0e451"/>
</flowRegion>
<flowDiv xml:space="preserve">PostScript or EPS formats do not support <flowSpan font-style="italic">transparency</flowSpan>, so you
should never use it if you are going to export to PS/EPS. In the case of flat
-transparency which overlays flat color, it's easy to fix it: Select one of the
-transparent objects; switch to the Dropper tool (<flowSpan font-weight="bold">F7</flowSpan>); make sure it's in
+transparency which overlays flat color, it&apos;s easy to fix it: Select one of the
+transparent objects; switch to the Dropper tool (<flowSpan font-weight="bold">F7</flowSpan>); make sure it&apos;s in
the “pick visible color without alpha” mode; click on that same object. That will pick
the visible color and assign it back to the object, but this time without
transparency. Repeat for all transparent objects. If your transparent object overlays
@@ -823,19 +793,19 @@ several flat color areas, you will need to break it correspondingly into pieces
apply this procedure to each piece.
</flowDiv>
</flowRoot>
- <rect id="d0e482" display="none" height="1000px" width="288" y="3271.2" x="10"/>
+ <rect id="d0e460" display="none" height="1000px" width="288" y="3084.7" x="10"/>
<flowRoot style="writing-mode:lr-tb;text-anchor:start;text-align:start;" font-weight="normal" font-size="8" font-style="normal" font-stretch="normal" font-variant="normal" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e482"/>
+ <use y="0" x="0" xlink:href="#d0e460"/>
</flowRegion>
<flowDiv xml:space="preserve">Exporting <flowSpan font-style="italic">gradients</flowSpan> to PS or EPS does not work for text
(unless text is converted to path) or for stroke paint. Also, since transparency is lost
-on PS or EPS export, you can't use e.g. a gradient from an <flowSpan font-style="italic">opaque</flowSpan>
+on PS or EPS export, you can&apos;t use e.g. a gradient from an <flowSpan font-style="italic">opaque</flowSpan>
blue to <flowSpan font-style="italic">transparent</flowSpan> blue; as a workaround, replace it by a gradient
from <flowSpan font-style="italic">opaque</flowSpan> blue to <flowSpan font-style="italic">opaque</flowSpan> background
color.</flowDiv>
</flowRoot>
- <g transform="translate(0, 3331.6222004999995)">
+ <g transform="translate(0, 3145.0665665)">
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
<linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.149642,0.000000,0.000000,0.465194,-0.130153,3495.428)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
<radialGradient id="radialGradient2456" xlink:href="#linearGradient666" gradientUnits="userSpaceOnUse" cy="1036.5" cx="233.92" gradientTransform="scale(1.825742,0.547723)" r="98.26" inkscape:collect="always"/>
diff --git a/src/arc-context.cpp b/src/arc-context.cpp
index b485dd183..1c480ecbc 100644
--- a/src/arc-context.cpp
+++ b/src/arc-context.cpp
@@ -6,6 +6,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <johan@shouraizou.nl>
+ * Abhishek Sharma
*
* Copyright (C) 2000-2006 Authors
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -45,6 +46,8 @@
#include "arc-context.h"
+using Inkscape::DocumentUndo;
+
static void sp_arc_context_class_init(SPArcContextClass *klass);
static void sp_arc_context_init(SPArcContext *arc_context);
static void sp_arc_context_dispose(GObject *object);
@@ -410,17 +413,17 @@ static void sp_arc_drag(SPArcContext *ac, Geom::Point pt, guint state)
return;
}
- /* Create object */
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ // Create object
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
repr->setAttribute("sodipodi:type", "arc");
- /* Set style */
+ // Set style
sp_desktop_apply_style_tool(desktop, repr, "/tools/shapes/arc", false);
ac->item = SP_ITEM(desktop->currentLayer()->appendChildRepr(repr));
Inkscape::GC::release(repr);
- ac->item->transform = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
+ ac->item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
ac->item->updateRepr();
sp_canvas_force_full_redraw_after_interruptions(desktop->canvas, 5);
@@ -444,7 +447,7 @@ static void sp_arc_drag(SPArcContext *ac, Geom::Point pt, guint state)
Geom::Point c = r.midpoint();
if (!ctrl_save) {
if (fabs(dir[Geom::X]) > 1E-6 && fabs(dir[Geom::Y]) > 1E-6) {
- Geom::Matrix const i2d (sp_item_i2d_affine (ac->item));
+ Geom::Matrix const i2d ((ac->item)->i2d_affine ());
Geom::Point new_dir = pt * i2d - c;
new_dir[Geom::X] *= dir[Geom::Y] / dir[Geom::X];
double lambda = new_dir.length() / dir[Geom::Y];
@@ -503,7 +506,7 @@ static void sp_arc_finish(SPArcContext *ac)
sp_canvas_end_forced_full_redraws(desktop->canvas);
sp_desktop_selection(desktop)->set(ac->item);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_ARC,
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_ARC,
_("Create ellipse"));
ac->item = NULL;
@@ -529,7 +532,7 @@ static void sp_arc_cancel(SPArcContext *ac)
sp_canvas_end_forced_full_redraws(desktop->canvas);
- sp_document_cancel(sp_desktop_document(desktop));
+ DocumentUndo::cancel(sp_desktop_document(desktop));
}
diff --git a/src/box3d-context.cpp b/src/box3d-context.cpp
index 14f4470bc..f23e4d883 100644
--- a/src/box3d-context.cpp
+++ b/src/box3d-context.cpp
@@ -1,11 +1,11 @@
-#define __SP_BOX3D_CONTEXT_C__
-
/*
* 3D box drawing context
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Maximilian Albert <Anhalter42@gmx.de>
* Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
@@ -49,6 +49,8 @@
#include "line-geometry.h"
#include "shape-editor.h"
+using Inkscape::DocumentUndo;
+
static void sp_box3d_context_class_init(Box3DContextClass *klass);
static void sp_box3d_context_init(Box3DContext *box3d_context);
static void sp_box3d_context_dispose(GObject *object);
@@ -188,10 +190,10 @@ static void sp_box3d_context_selection_changed(Inkscape::Selection *selection, g
* circumstances, after 'vacuum defs' or when a pre-0.46 file is opened).
*/
static void sp_box3d_context_ensure_persp_in_defs(SPDocument *document) {
- SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+ SPDefs *defs = reinterpret_cast<SPDefs *>(SP_DOCUMENT_DEFS(document));
bool has_persp = false;
- for (SPObject *child = sp_object_first_child(defs); child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) {
if (SP_IS_PERSP3D(child)) {
has_persp = true;
break;
@@ -436,42 +438,42 @@ static gint sp_box3d_context_root_handler(SPEventContext *event_context, GdkEven
case GDK_bracketright:
persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::X, -180/snaps, MOD__ALT);
- sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
+ DocumentUndo::done(document, SP_VERB_CONTEXT_3DBOX,
_("Change perspective (angle of PLs)"));
ret = true;
break;
case GDK_bracketleft:
persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::X, 180/snaps, MOD__ALT);
- sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
+ DocumentUndo::done(document, SP_VERB_CONTEXT_3DBOX,
_("Change perspective (angle of PLs)"));
ret = true;
break;
case GDK_parenright:
persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::Y, -180/snaps, MOD__ALT);
- sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
+ DocumentUndo::done(document, SP_VERB_CONTEXT_3DBOX,
_("Change perspective (angle of PLs)"));
ret = true;
break;
case GDK_parenleft:
persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::Y, 180/snaps, MOD__ALT);
- sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
+ DocumentUndo::done(document, SP_VERB_CONTEXT_3DBOX,
_("Change perspective (angle of PLs)"));
ret = true;
break;
case GDK_braceright:
persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::Z, -180/snaps, MOD__ALT);
- sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
+ DocumentUndo::done(document, SP_VERB_CONTEXT_3DBOX,
_("Change perspective (angle of PLs)"));
ret = true;
break;
case GDK_braceleft:
persp3d_rotate_VP (document->getCurrentPersp3D(), Proj::Z, 180/snaps, MOD__ALT);
- sp_document_done(document, SP_VERB_CONTEXT_3DBOX,
+ DocumentUndo::done(document, SP_VERB_CONTEXT_3DBOX,
_("Change perspective (angle of PLs)"));
ret = true;
break;
@@ -573,7 +575,7 @@ static gint sp_box3d_context_root_handler(SPEventContext *event_context, GdkEven
static void sp_box3d_drag(Box3DContext &bc, guint /*state*/)
{
- SPDesktop *desktop = SP_EVENT_CONTEXT(&bc)->desktop;
+ SPDesktop *desktop = bc.desktop;
if (!bc.item) {
@@ -581,25 +583,19 @@ static void sp_box3d_drag(Box3DContext &bc, guint /*state*/)
return;
}
- /* Create object */
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_EVENT_CONTEXT_DOCUMENT(&bc));
- Inkscape::XML::Node *repr = xml_doc->createElement("svg:g");
- repr->setAttribute("sodipodi:type", "inkscape:box3d");
+ // Create object
+ SPBox3D *box3d = 0;
+ box3d = SPBox3D::createBox3D((SPItem *)desktop->currentLayer());
- /* Set style */
- sp_desktop_apply_style_tool (desktop, repr, "/tools/shapes/3dbox", false);
+ // Set style
+ desktop->applyCurrentOrToolStyle(box3d, "/tools/shapes/3dbox", false);
+
+ bc.item = box3d;
- bc.item = (SPItem *) desktop->currentLayer()->appendChildRepr(repr);
- Inkscape::GC::release(repr);
- Inkscape::XML::Node *repr_side;
// TODO: Incorporate this in box3d-side.cpp!
for (int i = 0; i < 6; ++i) {
- repr_side = xml_doc->createElement("svg:path");
- repr_side->setAttribute("sodipodi:type", "inkscape:box3dside");
- repr->addChild(repr_side, NULL);
-
- Box3DSide *side = SP_BOX3D_SIDE(inkscape_active_document()->getObjectByRepr (repr_side));
-
+ Box3DSide *side = Box3DSide::createBox3DSide(box3d);
+
guint desc = Box3D::int_to_face(i);
Box3D::Axis plane = (Box3D::Axis) (desc & 0x7);
@@ -608,10 +604,27 @@ static void sp_box3d_drag(Box3DContext &bc, guint /*state*/)
side->dir2 = Box3D::extract_second_axis_direction(plane);
side->front_or_rear = (Box3D::FrontOrRear) (desc & 0x8);
- /* Set style */
- box3d_side_apply_style(side);
+ // Set style
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+
+ Glib::ustring descr = "/desktop/";
+ descr += box3d_side_axes_string(side);
+ descr += "/style";
+ Glib::ustring cur_style = prefs->getString(descr);
+
+ bool use_current = prefs->getBool("/tools/shapes/3dbox/usecurrent", false);
+ if (use_current && !cur_style.empty()) {
+ // use last used style
+ side->setAttribute("style", cur_style.data());
+
+ } else {
+ // use default style
+ GString *pstring = g_string_new("");
+ g_string_printf (pstring, "/tools/shapes/3dbox/%s", box3d_side_axes_string(side));
+ desktop->applyCurrentOrToolStyle (side, pstring->str, false);
+ }
- SP_OBJECT(side)->updateRepr(); // calls box3d_side_write() and updates, e.g., the axes string description
+ side->updateRepr(); // calls box3d_side_write() and updates, e.g., the axes string description
}
box3d_set_z_orders(SP_BOX3D(bc.item));
@@ -667,7 +680,7 @@ static void sp_box3d_finish(Box3DContext *bc)
sp_canvas_end_forced_full_redraws(desktop->canvas);
sp_desktop_selection(desktop)->set(bc->item);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_3DBOX,
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_3DBOX,
_("Create 3D box"));
bc->item = NULL;
diff --git a/src/box3d-side.cpp b/src/box3d-side.cpp
index 057d8f7df..72a479ca4 100644
--- a/src/box3d-side.cpp
+++ b/src/box3d-side.cpp
@@ -1,10 +1,9 @@
-#define __BOX3D_SIDE_C__
-
/*
* 3D box face implementation
*
* Authors:
* Maximilian Albert <Anhalter42@gmx.de>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Authors
*
@@ -93,13 +92,13 @@ box3d_side_init (Box3DSide * side)
side->front_or_rear = Box3D::FRONT;
}
-static void
-box3d_side_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * repr)
+static void box3d_side_build(SPObject * object, SPDocument * document, Inkscape::XML::Node * repr)
{
- if (((SPObjectClass *) parent_class)->build)
- ((SPObjectClass *) parent_class)->build (object, document, repr);
+ if (((SPObjectClass *) parent_class)->build) {
+ ((SPObjectClass *) parent_class)->build(object, document, repr);
+ }
- sp_object_read_attr(object, "inkscape:box3dsidetype");
+ object->readAttr( "inkscape:box3dsidetype" );
}
static Inkscape::XML::Node *
@@ -117,7 +116,7 @@ box3d_side_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::
sp_repr_set_int(repr, "inkscape:box3dsidetype", side->dir1 ^ side->dir2 ^ side->front_or_rear);
}
- sp_shape_set_shape ((SPShape *) object);
+ static_cast<SPShape *>(object)->setShape();
/* Duplicate the path */
SPCurve const *curve = ((SPShape *) object)->curve;
@@ -179,13 +178,33 @@ box3d_side_update (SPObject *object, SPCtx *ctx, guint flags)
if (flags & (SP_OBJECT_MODIFIED_FLAG |
SP_OBJECT_STYLE_MODIFIED_FLAG |
SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
- sp_shape_set_shape ((SPShape *) object);
+ static_cast<SPShape *>(object)->setShape ();
}
if (((SPObjectClass *) parent_class)->update)
((SPObjectClass *) parent_class)->update (object, ctx, flags);
}
+/* Create a new Box3DSide and append it to the parent box */
+Box3DSide * Box3DSide::createBox3DSide(SPBox3D *box)
+{
+ Box3DSide *box3d_side = 0;
+ Inkscape::XML::Document *xml_doc = box->document->rdoc;
+ Inkscape::XML::Node *repr_side = xml_doc->createElement("svg:path");
+ repr_side->setAttribute("sodipodi:type", "inkscape:box3dside");
+ box3d_side = static_cast<Box3DSide *>(box->appendChildRepr(repr_side));
+ return box3d_side;
+}
+
+/*
+ * Function which return the type attribute for Box3D.
+ * Acts as a replacement for directly accessing the XML Tree directly.
+ */
+long long int Box3DSide::getFaceId()
+{
+ return this->getIntAttribute("inkscape:box3dsidetype", -1);
+}
+
void
box3d_side_position_set (Box3DSide *side) {
box3d_side_set_shape (SP_SHAPE (side));
@@ -243,43 +262,19 @@ box3d_side_set_shape (SPShape *shape)
/* 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);
+ shape->setCurveInsync( 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);
+ shape->setCurveInsync( c_lpe, TRUE);
}
c_lpe->unref();
}
c->unref();
}
-void
-box3d_side_apply_style (Box3DSide *side) {
- Inkscape::XML::Node *repr_face = SP_OBJECT_REPR(SP_OBJECT(side));
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-
- Glib::ustring descr = "/desktop/";
- descr += box3d_side_axes_string(side);
- descr += "/style";
- Glib::ustring cur_style = prefs->getString(descr);
-
- SPDesktop *desktop = inkscape_active_desktop();
- bool use_current = prefs->getBool("/tools/shapes/3dbox/usecurrent", false);
- if (use_current && !cur_style.empty()) {
- /* use last used style */
- repr_face->setAttribute("style", cur_style.data());
- } else {
- /* use default style */
- GString *pstring = g_string_new("");
- g_string_printf (pstring, "/tools/shapes/3dbox/%s", box3d_side_axes_string(side));
- sp_desktop_apply_style_tool (desktop, repr_face, pstring->str, false);
- }
-}
-
-gchar *
-box3d_side_axes_string(Box3DSide *side)
+gchar *box3d_side_axes_string(Box3DSide *side)
{
GString *pstring = g_string_new("");
g_string_printf (pstring, "%s", Box3D::string_from_axes ((Box3D::Axis) (side->dir1 ^ side->dir2)));
@@ -314,15 +309,14 @@ box3d_side_perspective(Box3DSide *side) {
return SP_BOX3D(SP_OBJECT(side)->parent)->persp_ref->getObject();
}
-Inkscape::XML::Node *
-box3d_side_convert_to_path(Box3DSide *side) {
+Inkscape::XML::Node *box3d_side_convert_to_path(Box3DSide *side) {
// TODO: Copy over all important attributes (see sp_selected_item_to_curved_repr() for an example)
SPDocument *doc = SP_OBJECT_DOCUMENT(side);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
- repr->setAttribute("d", SP_OBJECT_REPR(side)->attribute("d"));
- repr->setAttribute("style", SP_OBJECT_REPR(side)->attribute("style"));
+ repr->setAttribute("d", side->getAttribute("d"));
+ repr->setAttribute("style", side->getAttribute("style"));
return repr;
}
diff --git a/src/box3d-side.h b/src/box3d-side.h
index 18c815073..a8d692b01 100644
--- a/src/box3d-side.h
+++ b/src/box3d-side.h
@@ -1,11 +1,12 @@
-#ifndef __BOX3D_SIDE_H__
-#define __BOX3D_SIDE_H__
+#ifndef SEEN_BOX3D_SIDE_H
+#define SEEN_BOX3D_SIDE_H
/*
* 3D box face implementation
*
* Authors:
* Maximilian Albert <Anhalter42@gmx.de>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Authors
*
@@ -31,6 +32,8 @@ struct Box3DSide : public SPPolygon {
Box3D::Axis dir1;
Box3D::Axis dir2;
Box3D::FrontOrRear front_or_rear;
+ long long int getFaceId();
+ static Box3DSide * createBox3DSide(SPBox3D *box);
};
struct Box3DSideClass {
@@ -40,13 +43,15 @@ struct Box3DSideClass {
GType box3d_side_get_type (void);
void box3d_side_position_set (Box3DSide *side); // FIXME: Replace this by box3d_side_set_shape??
-void box3d_side_apply_style (Box3DSide *side);
+
gchar *box3d_side_axes_string(Box3DSide *side);
+
Persp3D *box3d_side_perspective(Box3DSide *side);
+
Inkscape::XML::Node *box3d_side_convert_to_path(Box3DSide *side);
-#endif /* __BOX3D_SIDE_H__ */
+#endif // SEEN_BOX3D_SIDE_H
/*
Local Variables:
diff --git a/src/box3d.cpp b/src/box3d.cpp
index 2c932b87c..b6bebc141 100644
--- a/src/box3d.cpp
+++ b/src/box3d.cpp
@@ -1,5 +1,3 @@
-#define __SP_BOX3D_C__
-
/*
* SVG <box3d> implementation
*
@@ -7,6 +5,7 @@
* Maximilian Albert <Anhalter42@gmx.de>
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Authors
* Copyright (C) 1999-2002 Lauris Kaplinski
@@ -132,9 +131,9 @@ box3d_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
box->persp_ref->changedSignal().connect(sigc::bind(sigc::ptr_fun(box3d_ref_changed), box));
- sp_object_read_attr(object, "inkscape:perspectiveID");
- sp_object_read_attr(object, "inkscape:corner0");
- sp_object_read_attr(object, "inkscape:corner7");
+ object->readAttr( "inkscape:perspectiveID" );
+ object->readAttr( "inkscape:corner0" );
+ object->readAttr( "inkscape:corner7" );
}
/**
@@ -227,7 +226,7 @@ box3d_set(SPObject *object, unsigned int key, const gchar *value)
box3d_position_set(box);
}
break;
- default:
+ default:
if (((SPObjectClass *) (parent_class))->set) {
((SPObjectClass *) (parent_class))->set(object, key, value);
}
@@ -268,7 +267,7 @@ box3d_update(SPObject *object, SPCtx *ctx, guint flags)
}
-static Inkscape::XML::Node *box3d_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+static Inkscape::XML::Node * box3d_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
SPBox3D *box = SP_BOX3D(object);
@@ -290,11 +289,9 @@ static Inkscape::XML::Node *box3d_write(SPObject *object, Inkscape::XML::Documen
repr->setAttribute("inkscape:perspectiveID", uri_string);
g_free(uri_string);
} else {
- Inkscape::XML::Node *persp_repr = SP_OBJECT_REPR(doc->getCurrentPersp3D());
- const gchar *persp_id = persp_repr->attribute("id");
- gchar *href = g_strdup_printf("#%s", persp_id);
- repr->setAttribute("inkscape:perspectiveID", href);
- g_free(href);
+ Glib::ustring href = "#";
+ href += doc->getCurrentPersp3D()->getId();
+ repr->setAttribute("inkscape:perspectiveID", href.c_str());
}
}
@@ -327,14 +324,14 @@ box3d_description(SPItem *item)
return g_strdup(_("<b>3D Box</b>"));
}
-void
-box3d_position_set (SPBox3D *box)
+void box3d_position_set(SPBox3D *box)
{
/* This draws the curve and calls requestDisplayUpdate() for each side (the latter is done in
box3d_side_position_set() to avoid update conflicts with the parent box) */
- for (SPObject *child = sp_object_first_child(SP_OBJECT (box)); child != NULL; child = SP_OBJECT_NEXT(child) ) {
- if (SP_IS_BOX3D_SIDE(child))
+ for ( SPObject *child = box->firstChild(); child; child = child->getNext() ) {
+ if (SP_IS_BOX3D_SIDE(child)) {
box3d_side_position_set(SP_BOX3D_SIDE(child));
+ }
}
}
@@ -350,21 +347,21 @@ box3d_set_transform(SPItem *item, Geom::Matrix const &xform)
gdouble const sw = hypot(ret[0], ret[1]);
gdouble const sh = hypot(ret[2], ret[3]);
- for (SPObject *child = sp_object_first_child(box); child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for ( SPObject *child = box->firstChild(); child; child = child->getNext() ) {
if (SP_IS_ITEM(child)) {
SPItem *childitem = SP_ITEM(child);
// Adjust stroke width
- sp_item_adjust_stroke(childitem, sqrt(fabs(sw * sh)));
+ childitem->adjust_stroke(sqrt(fabs(sw * sh)));
// Adjust pattern fill
- sp_item_adjust_pattern(childitem, xform);
+ childitem->adjust_pattern(xform);
// Adjust gradient fill
- sp_item_adjust_gradient(childitem, xform);
+ childitem->adjust_gradient(xform);
// Adjust LPE
- sp_item_adjust_livepatheffect(childitem, xform);
+ childitem->adjust_livepatheffect(xform);
}
}
@@ -393,7 +390,7 @@ box3d_get_corner_screen (SPBox3D const *box, guint id, bool item_coords) {
if (!box3d_get_perspective(box)) {
return Geom::Point (Geom::infinity(), Geom::infinity());
}
- Geom::Matrix const i2d (sp_item_i2d_affine (SP_ITEM(box)));
+ Geom::Matrix const i2d (SP_ITEM(box)->i2d_affine ());
if (item_coords) {
return box3d_get_perspective(box)->perspective_impl->tmat.image(proj_corner).affine() * i2d.inverse();
} else {
@@ -417,7 +414,7 @@ box3d_get_center_screen (SPBox3D *box) {
if (!box3d_get_perspective(box)) {
return Geom::Point (Geom::infinity(), Geom::infinity());
}
- Geom::Matrix const i2d (sp_item_i2d_affine (SP_ITEM(box)));
+ Geom::Matrix const i2d (SP_ITEM(box)->i2d_affine ());
return box3d_get_perspective(box)->perspective_impl->tmat.image(proj_center).affine() * i2d.inverse();
}
@@ -509,6 +506,16 @@ box3d_snap (SPBox3D *box, int id, Proj::Pt3 const &pt_proj, Proj::Pt3 const &sta
return box3d_get_perspective(box)->perspective_impl->tmat.preimage (result, z_coord, Proj::Z);
}
+SPBox3D * SPBox3D::createBox3D(SPItem * parent)
+{
+ SPBox3D *box3d = 0;
+ Inkscape::XML::Document *xml_doc = parent->document->rdoc;
+ Inkscape::XML::Node *repr = xml_doc->createElement("svg:g");
+ repr->setAttribute("sodipodi:type", "inkscape:box3d");
+ box3d = reinterpret_cast<SPBox3D *>(parent->appendChildRepr(repr));
+ return box3d;
+}
+
void
box3d_set_corner (SPBox3D *box, const guint id, Geom::Point const &new_pos, const Box3D::Axis movement, bool constrained) {
g_return_if_fail ((movement != Box3D::NONE) && (movement != Box3D::XYZ));
@@ -672,15 +679,15 @@ box3d_half_line_crosses_joining_line (Geom::Point const &A, Geom::Point const &B
Geom::Line lineCD(C,D);
Geom::OptCrossing inters = Geom::OptCrossing(); // empty by default
- try
- {
- inters = Geom::intersection(lineAB, lineCD);
- }
- catch (Geom::InfiniteSolutions e)
- {
- // We're probably dealing with parallel lines, so they don't really cross
- return false;
- }
+ try
+ {
+ inters = Geom::intersection(lineAB, lineCD);
+ }
+ catch (Geom::InfiniteSolutions e)
+ {
+ // We're probably dealing with parallel lines, so they don't really cross
+ return false;
+ }
if (!inters) {
return false;
@@ -1148,13 +1155,14 @@ box3d_recompute_z_orders (SPBox3D *box) {
return false;
}
-static std::map<int, Box3DSide *>
-box3d_get_sides (SPBox3D *box) {
+static std::map<int, Box3DSide *> box3d_get_sides(SPBox3D *box)
+{
std::map<int, Box3DSide *> sides;
- for (SPObject *side = sp_object_first_child(box); side != NULL; side = SP_OBJECT_NEXT(side)) {
- if (SP_IS_BOX3D_SIDE(side))
- sides[Box3D::face_to_int(sp_repr_get_int_attribute(SP_OBJECT_REPR(side),
- "inkscape:box3dsidetype", -1))] = SP_BOX3D_SIDE(side);
+ for ( SPObject *side = box->firstChild(); side; side = side->getNext() ) {
+ if (SP_IS_BOX3D_SIDE(side)){
+ Box3DSide *bside = SP_BOX3D_SIDE(side);
+ sides[Box3D::face_to_int(bside->getFaceId())] = bside;
+ }
}
sides.erase(-1);
return sides;
@@ -1288,12 +1296,11 @@ box3d_check_for_swapped_coords(SPBox3D *box) {
box3d_exchange_coords(box);
}
-static void
-box3d_extract_boxes_rec(SPObject *obj, std::list<SPBox3D *> &boxes) {
+static void box3d_extract_boxes_rec(SPObject *obj, std::list<SPBox3D *> &boxes) {
if (SP_IS_BOX3D(obj)) {
boxes.push_back(SP_BOX3D(obj));
} else if (SP_IS_GROUP(obj)) {
- for (SPObject *child = sp_object_first_child(obj); child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = obj->firstChild(); child; child = child->getNext() ) {
box3d_extract_boxes_rec(child, boxes);
}
}
@@ -1328,35 +1335,33 @@ box3d_switch_perspectives(SPBox3D *box, Persp3D *old_persp, Persp3D *new_persp,
persp3d_remove_box (old_persp, box);
persp3d_add_box (new_persp, box);
- gchar *href = g_strdup_printf("#%s", SP_OBJECT_REPR(new_persp)->attribute("id"));
- SP_OBJECT_REPR(box)->setAttribute("inkscape:perspectiveID", href);
- g_free(href);
+ Glib::ustring href = "#";
+ href += new_persp->getId();
+ box->setAttribute("inkscape:perspectiveID", href.c_str());
}
/* Converts the 3D box to an ordinary SPGroup, adds it to the XML tree at the same position as
the original box and deletes the latter */
-SPGroup *
-box3d_convert_to_group(SPBox3D *box) {
+SPGroup *box3d_convert_to_group(SPBox3D *box)
+{
SPDocument *doc = SP_OBJECT_DOCUMENT(box);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
// remember position of the box
- int pos = SP_OBJECT_REPR(box)->position();
+ int pos = box->getPosition();
// remember important attributes
- Inkscape::XML::Node *repr_source = SP_OBJECT_REPR(box);
- gchar const *id = repr_source->attribute("id");
- gchar const *style = repr_source->attribute("style");
- gchar const *mask = repr_source->attribute("mask");
- gchar const *clip_path = repr_source->attribute("clip-path");
+ gchar const *id = box->getAttribute("id");
+ gchar const *style = box->getAttribute("style");
+ gchar const *mask = box->getAttribute("mask");
+ gchar const *clip_path = box->getAttribute("clip-path");
// create a new group and add the sides (converted to ordinary paths) as its children
Inkscape::XML::Node *grepr = xml_doc->createElement("svg:g");
- Inkscape::XML::Node *repr;
- for (SPObject *child = sp_object_first_child(SP_OBJECT(box)); child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = box->firstChild(); child; child = child->getNext() ) {
if (SP_IS_BOX3D_SIDE(child)) {
- repr = box3d_side_convert_to_path(SP_BOX3D_SIDE(child));
+ Inkscape::XML::Node *repr = box3d_side_convert_to_path(SP_BOX3D_SIDE(child));
grepr->appendChild(repr);
} else {
g_warning("Non-side item encountered as child of a 3D box.");
@@ -1365,7 +1370,7 @@ box3d_convert_to_group(SPBox3D *box) {
// add the new group to the box's parent and set remembered position
SPObject *parent = SP_OBJECT_PARENT(box);
- SP_OBJECT_REPR(parent)->appendChild(grepr);
+ parent->appendChild(grepr);
grepr->setPosition(pos);
grepr->setAttribute("style", style);
if (mask)
@@ -1392,7 +1397,7 @@ box3d_convert_to_guides(SPItem *item) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (!prefs->getBool("/tools/shapes/3dbox/convertguides", true)) {
- sp_item_convert_to_guides(SP_ITEM(box));
+ box->convert_to_guides();
return;
}
diff --git a/src/box3d.h b/src/box3d.h
index 8273e3542..5dbf0cf5e 100644
--- a/src/box3d.h
+++ b/src/box3d.h
@@ -1,5 +1,5 @@
-#ifndef __SP_BOX3D_H__
-#define __SP_BOX3D_H__
+#ifndef SEEN_SP_BOX3D_H
+#define SEEN_SP_BOX3D_H
/*
* SVG <box3d> implementation
@@ -7,6 +7,7 @@
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Maximilian Albert <Anhalter42@gmx.de>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Authors
* Copyright (C) 1999-2002 Lauris Kaplinski
@@ -29,7 +30,8 @@ class Box3DSide;
class Persp3D;
class Persp3DReference;
-struct SPBox3D : public SPGroup {
+class SPBox3D : public SPGroup {
+public:
gint z_orders[6]; // z_orders[i] holds the ID of the face at position #i in the group (from top to bottom)
gchar *persp_href;
@@ -44,9 +46,15 @@ struct SPBox3D : public SPGroup {
Box3D::Axis swapped; // to indicate which coordinates are swapped during dragging
gint my_counter; // for debugging only
+
+ /**
+ * Create a SPBox3D and append it to the parent.
+ */
+ static SPBox3D * createBox3D(SPItem * parent);
};
-struct SPBox3DClass {
+class SPBox3DClass {
+public:
SPGroupClass parent_class;
};
@@ -78,7 +86,7 @@ void box3d_switch_perspectives(SPBox3D *box, Persp3D *old_persp, Persp3D *new_pe
SPGroup *box3d_convert_to_group(SPBox3D *box);
-#endif /* __SP_BOX3D_H__ */
+#endif // SEEN_SP_BOX3D_H
/*
Local Variables:
diff --git a/src/color-profile-test.h b/src/color-profile-test.h
index 42893039a..4b679e5b7 100644
--- a/src/color-profile-test.h
+++ b/src/color-profile-test.h
@@ -25,7 +25,7 @@ public:
{
if ( _doc )
{
- sp_document_unref( _doc );
+ _doc->doUnref();
}
}
@@ -80,7 +80,7 @@ public:
for ( size_t i = 0; i < G_N_ELEMENTS( cases ); i++ ) {
std::string descr(cases[i].attr);
- sp_object_set(SP_OBJECT(prof), SP_ATTR_RENDERING_INTENT, cases[i].attr);
+ SP_OBJECT(prof)->setKeyValue( SP_ATTR_RENDERING_INTENT, cases[i].attr);
TSM_ASSERT_EQUALS( descr, prof->rendering_intent, (guint)cases[i].intVal );
}
@@ -99,13 +99,13 @@ public:
SP_OBJECT(prof)->document = _doc;
for ( size_t i = 0; i < G_N_ELEMENTS( cases ); i++ ) {
- sp_object_set(SP_OBJECT(prof), SP_ATTR_LOCAL, cases[i]);
+ SP_OBJECT(prof)->setKeyValue( SP_ATTR_LOCAL, cases[i]);
TS_ASSERT( prof->local );
if ( prof->local ) {
TS_ASSERT_EQUALS( std::string(prof->local), std::string(cases[i]) );
}
}
- sp_object_set(SP_OBJECT(prof), SP_ATTR_LOCAL, NULL);
+ SP_OBJECT(prof)->setKeyValue( SP_ATTR_LOCAL, NULL);
TS_ASSERT_EQUALS( prof->local, (gchar*)0 );
g_object_unref(prof);
@@ -123,13 +123,13 @@ public:
SP_OBJECT(prof)->document = _doc;
for ( size_t i = 0; i < G_N_ELEMENTS( cases ); i++ ) {
- sp_object_set(SP_OBJECT(prof), SP_ATTR_NAME, cases[i]);
+ SP_OBJECT(prof)->setKeyValue( SP_ATTR_NAME, cases[i]);
TS_ASSERT( prof->name );
if ( prof->name ) {
TS_ASSERT_EQUALS( std::string(prof->name), std::string(cases[i]) );
}
}
- sp_object_set(SP_OBJECT(prof), SP_ATTR_NAME, NULL);
+ SP_OBJECT(prof)->setKeyValue( SP_ATTR_NAME, NULL);
TS_ASSERT_EQUALS( prof->name, (gchar*)0 );
g_object_unref(prof);
diff --git a/src/color-profile.cpp b/src/color-profile.cpp
index 1189a7c29..e08a416d3 100644
--- a/src/color-profile.cpp
+++ b/src/color-profile.cpp
@@ -180,9 +180,8 @@ void ColorProfile::init( ColorProfile *cprof )
void ColorProfile::release( SPObject *object )
{
// Unregister ourselves
- SPDocument* document = SP_OBJECT_DOCUMENT(object);
- if ( document ) {
- sp_document_remove_resource (SP_OBJECT_DOCUMENT (object), "iccprofile", SP_OBJECT (object));
+ if ( object->document ) {
+ object->document->removeResource("iccprofile", object);
}
ColorProfile *cprof = COLORPROFILE(object);
@@ -249,14 +248,14 @@ void ColorProfile::build( SPObject *object, SPDocument *document, Inkscape::XML:
if (cprof_parent_class->build) {
(* cprof_parent_class->build)(object, document, repr);
}
- sp_object_read_attr( object, "xlink:href" );
- sp_object_read_attr( object, "local" );
- sp_object_read_attr( object, "name" );
- sp_object_read_attr( object, "rendering-intent" );
+ object->readAttr( "xlink:href" );
+ object->readAttr( "local" );
+ object->readAttr( "name" );
+ object->readAttr( "rendering-intent" );
// Register
if ( document ) {
- sp_document_add_resource( document, "iccprofile", object );
+ document->addResource( "iccprofile", object );
}
}
@@ -290,7 +289,7 @@ void ColorProfile::set( SPObject *object, unsigned key, gchar const *value )
g_warning("object has no document. using active");
}
//# 1. Get complete URI of document
- gchar const *docbase = SP_DOCUMENT_URI( doc );
+ gchar const *docbase = doc->getURI();
if (!docbase)
{
// Normal for files that have not yet been saved.
@@ -477,7 +476,7 @@ static int getLcmsIntent( guint svgIntent )
static SPObject* bruteFind( SPDocument* document, gchar const* name )
{
SPObject* result = 0;
- const GSList * current = sp_document_get_resource_list(document, "iccprofile");
+ const GSList * current = document->getResourceList("iccprofile");
while ( current && !result ) {
if ( IS_COLORPROFILE(current->data) ) {
ColorProfile* prof = COLORPROFILE(current->data);
@@ -722,6 +721,18 @@ static bool isIccFile( gchar const *filepath )
}
close(fd);
+#if ENABLE_LCMS
+ if (isIccFile) {
+ cmsHPROFILE prof = cmsOpenProfileFromFile( filepath, "r" );
+ if ( prof ) {
+ icProfileClassSignature profClass = cmsGetDeviceClass(prof);
+ if ( profClass == icSigNamedColorClass ) {
+ isIccFile = false; // Ignore named color profiles for now.
+ }
+ cmsCloseProfile( prof );
+ }
+ }
+#endif // ENABLE_LCMS
}
}
return isIccFile;
diff --git a/src/conditions.cpp b/src/conditions.cpp
index 8d1770d6a..d35f18cf1 100644
--- a/src/conditions.cpp
+++ b/src/conditions.cpp
@@ -1,10 +1,9 @@
-#define __SP_CONDITIONS_CPP__
-
/*
* SVG conditional attribute evaluation
*
* Authors:
* Andrius R. <knutux@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006 authors
*
@@ -39,20 +38,16 @@ static Condition _condition_handlers[] = {
{ "requiredExtensions", evaluateRequiredExtensions },
};
-/* function which evaluates if item should be displayed */
+// function which evaluates if item should be displayed
bool sp_item_evaluate(SPItem const *item) {
- Inkscape::XML::Node *grepr = SP_OBJECT_REPR (item);
-
- for ( unsigned int i = 0 ; i < sizeof(_condition_handlers)/sizeof(_condition_handlers[0]) ; i++ ) {
- gchar const *value = grepr->attribute(_condition_handlers[i].attribute);
- if ( NULL == value )
- continue;
-
- if (!_condition_handlers[i].evaluator(item, value))
- return false;
+ bool needDisplay = true;
+ for ( unsigned int i = 0 ; needDisplay && (i < sizeof(_condition_handlers) / sizeof(_condition_handlers[0])) ; i++ ) {
+ gchar const *value = item->getAttribute(_condition_handlers[i].attribute);
+ if ( value && !_condition_handlers[i].evaluator(item, value) ) {
+ needDisplay = false;
+ }
}
-
- return true;
+ return needDisplay;
}
#define ISALNUM(c) (((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z') || ((c) >= '0' && (c) <= '9'))
diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp
index fe25fa418..21ef2deab 100644
--- a/src/conn-avoid-ref.cpp
+++ b/src/conn-avoid-ref.cpp
@@ -3,6 +3,7 @@
*
* Authors:
* Michael Wybrow <mjwybrow@users.sourceforge.net>
+ * Abhishek Sharma
*
* Copyright (C) 2005 Michael Wybrow
*
@@ -38,7 +39,7 @@
#include "inkscape.h"
#include <glibmm/i18n.h>
-
+using Inkscape::DocumentUndo;
using Avoid::Router;
@@ -195,10 +196,10 @@ void SPAvoidRef::setConnectionPointsAttrUndoable(const gchar* value, const gchar
{
SPDocument* doc = SP_OBJECT_DOCUMENT(item);
- sp_object_setAttribute( SP_OBJECT(item), "inkscape:connection-points", value, 0 );
+ item->setAttribute( "inkscape:connection-points", value, 0 );
item->updateRepr();
- sp_document_ensure_up_to_date(doc);
- sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR, action);
+ doc->ensureUpToDate();
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_CONNECTOR, action);
}
void SPAvoidRef::addConnectionPoint(ConnectionPoint &cp)
@@ -295,7 +296,7 @@ void SPAvoidRef::handleSettingChange(void)
// isn't the same as the document that this item is part of. This
// case can happen if a new document is loaded from the file chooser
// or via the recent file menu. In this case, we can end up here
- // as a rersult of a sp_document_ensure_up_to_date performed on a
+ // as a rersult of a ensureUpToDate performed on a
// document not yet attached to the active desktop.
return;
}
@@ -315,7 +316,7 @@ void SPAvoidRef::handleSettingChange(void)
_transformed_connection = item->connectTransformed(
sigc::ptr_fun(&avoid_item_move));
- const char *id = SP_OBJECT_REPR(item)->attribute("id");
+ char const *id = item->getAttribute("id");
g_assert(id != NULL);
// Get a unique ID for the item.
@@ -389,12 +390,12 @@ Geom::Point SPAvoidRef::getConnectionPointPos(const int type, const int id)
{
g_assert(item);
Geom::Point pos;
- const Geom::Matrix& transform = sp_item_i2doc_affine(item);
+ const Geom::Matrix& transform = item->i2doc_affine();
if ( type == ConnPointDefault )
{
// For now, just default to the centre of the item
- Geom::OptRect bbox = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect bbox = item->getBounds(item->i2doc_affine());
pos = (bbox) ? bbox->midpoint() : Geom::Point(0, 0);
}
else
@@ -491,7 +492,7 @@ static std::vector<Geom::Point> approxItemWithPoints(SPItem const *item, const G
}
else if (SP_IS_SHAPE(item))
{
- SPCurve* item_curve = sp_shape_get_curve(SP_SHAPE(item));
+ SPCurve* item_curve = SP_SHAPE(item)->getCurve();
// make sure it has an associated curve
if (item_curve)
{
@@ -511,7 +512,7 @@ static Avoid::Polygon avoid_item_poly(SPItem const *item)
g_assert(desktop != NULL);
double spacing = desktop->namedview->connector_spacing;
- Geom::Matrix itd_mat = sp_item_i2doc_affine(item);
+ Geom::Matrix itd_mat = item->i2doc_affine();
std::vector<Geom::Point> hull_points;
hull_points = approxItemWithPoints(item, itd_mat);
@@ -557,8 +558,7 @@ static Avoid::Polygon avoid_item_poly(SPItem const *item)
GSList *get_avoided_items(GSList *list, SPObject *from, SPDesktop *desktop,
bool initialised)
{
- for (SPObject *child = sp_object_first_child(SP_OBJECT(from)) ;
- child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = from->firstChild() ; child != NULL; child = child->next ) {
if (SP_IS_ITEM(child) &&
!desktop->isLayer(SP_ITEM(child)) &&
!SP_ITEM(child)->isLocked() &&
@@ -596,8 +596,8 @@ void init_avoided_shape_geometry(SPDesktop *desktop)
// Don't count this as changes to the document,
// it is basically just late initialisation.
SPDocument *document = sp_desktop_document(desktop);
- bool saved = sp_document_get_undo_sensitive(document);
- sp_document_set_undo_sensitive(document, false);
+ bool saved = DocumentUndo::getUndoSensitive(document);
+ DocumentUndo::setUndoSensitive(document, false);
bool initialised = false;
GSList *items = get_avoided_items(NULL, desktop->currentRoot(), desktop,
@@ -611,7 +611,7 @@ void init_avoided_shape_geometry(SPDesktop *desktop)
if (items) {
g_slist_free(items);
}
- sp_document_set_undo_sensitive(document, saved);
+ DocumentUndo::setUndoSensitive(document, saved);
}
diff --git a/src/connector-context.cpp b/src/connector-context.cpp
index adc54a1ae..b1061c124 100644
--- a/src/connector-context.cpp
+++ b/src/connector-context.cpp
@@ -3,6 +3,7 @@
*
* Authors:
* Michael Wybrow <mjwybrow@users.sourceforge.net>
+ * Abhishek Sharma
*
* Copyright (C) 2005-2008 Michael Wybrow
* Copyright (C) 2009 Monash University
@@ -188,6 +189,8 @@
#include "sp-flowtext.h"
#include "display/curve.h"
+using Inkscape::DocumentUndo;
+
static void sp_connector_context_class_init(SPConnectorContextClass *klass);
static void sp_connector_context_init(SPConnectorContext *conn_context);
static void sp_connector_context_dispose(GObject *object);
@@ -971,7 +974,7 @@ connector_handle_motion_notify(SPConnectorContext *const cc, GdkEventMotion cons
m.unSetup();
// Update the hidden path
- Geom::Matrix i2d = sp_item_i2d_affine(cc->clickeditem);
+ Geom::Matrix i2d = (cc->clickeditem)->i2d_affine();
Geom::Matrix d2i = i2d.inverse();
SPPath *path = SP_PATH(cc->clickeditem);
SPCurve *curve = path->original_curve ? path->original_curve : path->curve;
@@ -1075,7 +1078,7 @@ connector_handle_button_release(SPConnectorContext *const cc, GdkEventButton con
m.unSetup();
cc_connector_rerouting_finish(cc, &p);
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
cc->state = SP_CONNECTOR_CONTEXT_IDLE;
return TRUE;
break;
@@ -1101,7 +1104,7 @@ connector_handle_button_release(SPConnectorContext *const cc, GdkEventButton con
m.unSetup();
sp_knot_set_position(cc->selected_handle, p, 0);
ConnectionPoint& cp = cc->connpthandles[cc->selected_handle];
- cp.pos = p * sp_item_dt2i_affine(cc->active_shape);
+ cp.pos = p * (cc->active_shape)->dt2i_affine();
cc->active_shape->avoidRef->updateConnectionPoint(cp);
}
@@ -1119,11 +1122,11 @@ connector_handle_button_release(SPConnectorContext *const cc, GdkEventButton con
ConnectionPoint cp;
cp.type = ConnPointUserDefined;
- cp.pos = p * sp_item_dt2i_affine(cc->active_shape);
+ cp.pos = p * (cc->active_shape)->dt2i_affine();
cp.dir = Avoid::ConnDirAll;
g_object_unref(cc->selected_handle);
cc->active_shape->avoidRef->addConnectionPoint(cp);
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
for (ConnectionPointMap::iterator it = cc->connpthandles.begin(); it != cc->connpthandles.end(); ++it)
if (it->second.type == ConnPointUserDefined && it->second.id == cp.id)
{
@@ -1167,7 +1170,7 @@ connector_handle_key_press(SPConnectorContext *const cc, guint const keyval)
cc_connector_rerouting_finish(cc, NULL);
- sp_document_undo(doc);
+ DocumentUndo::undo(doc);
cc->state = SP_CONNECTOR_CONTEXT_IDLE;
desktop->messageStack()->flash( Inkscape::NORMAL_MESSAGE,
@@ -1197,7 +1200,7 @@ connector_handle_key_press(SPConnectorContext *const cc, guint const keyval)
// Obtain original position
ConnectionPoint const& cp = cc->connpthandles[cc->selected_handle];
SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
- const Geom::Matrix& i2doc = sp_item_i2doc_affine(cc->active_shape);
+ const Geom::Matrix& i2doc = (cc->active_shape)->i2doc_affine();
sp_knot_set_position(cc->selected_handle, cp.pos * i2doc * desktop->doc2dt(), 0);
cc->state = SP_CONNECTOR_CONTEXT_IDLE;
desktop->messageStack()->flash( Inkscape::NORMAL_MESSAGE,
@@ -1219,7 +1222,7 @@ connector_handle_key_press(SPConnectorContext *const cc, guint const keyval)
m.unSetup();
sp_knot_set_position(cc->selected_handle, p, 0);
ConnectionPoint& cp = cc->connpthandles[cc->selected_handle];
- cp.pos = p * sp_item_dt2i_affine(cc->active_shape);
+ cp.pos = p * (cc->active_shape)->dt2i_affine();
cc->active_shape->avoidRef->updateConnectionPoint(cp);
}
@@ -1249,11 +1252,11 @@ connector_handle_key_press(SPConnectorContext *const cc, guint const keyval)
ConnectionPoint cp;
cp.type = ConnPointUserDefined;
- cp.pos = p * sp_item_dt2i_affine(cc->active_shape);
+ cp.pos = p * (cc->active_shape)->dt2i_affine();
cp.dir = Avoid::ConnDirAll;
g_object_unref(cc->selected_handle);
cc->active_shape->avoidRef->addConnectionPoint(cp);
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
for (ConnectionPointMap::iterator it = cc->connpthandles.begin(); it != cc->connpthandles.end(); ++it)
if (it->second.type == ConnPointUserDefined && it->second.id == cp.id)
{
@@ -1300,16 +1303,12 @@ cc_connector_rerouting_finish(SPConnectorContext *const cc, Geom::Point *const p
if (found) {
if (cc->clickedhandle == cc->endpt_handle[0]) {
- sp_object_setAttribute(cc->clickeditem,
- "inkscape:connection-start", shape_label, false);
- sp_object_setAttribute(cc->clickeditem,
- "inkscape:connection-start-point", cpid, false);
+ cc->clickeditem->setAttribute("inkscape:connection-start", shape_label, false);
+ cc->clickeditem->setAttribute("inkscape:connection-start-point", cpid, false);
}
else {
- sp_object_setAttribute(cc->clickeditem,
- "inkscape:connection-end", shape_label, false);
- sp_object_setAttribute(cc->clickeditem,
- "inkscape:connection-end-point", cpid, false);
+ cc->clickeditem->setAttribute("inkscape:connection-end", shape_label, false);
+ cc->clickeditem->setAttribute("inkscape:connection-end-point", cpid, false);
}
g_free(shape_label);
}
@@ -1317,7 +1316,7 @@ cc_connector_rerouting_finish(SPConnectorContext *const cc, Geom::Point *const p
cc->clickeditem->setHidden(false);
sp_conn_reroute_path_immediate(SP_PATH(cc->clickeditem));
cc->clickeditem->updateRepr();
- sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_CONNECTOR,
_("Reroute connector"));
cc_set_active_conn(cc, cc->clickeditem);
}
@@ -1429,7 +1428,7 @@ spcc_flush_white(SPConnectorContext *cc, SPCurve *gc)
SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc);
SPDocument *doc = sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
if ( c && !c->is_empty() ) {
/* We actually have something to write */
@@ -1445,35 +1444,33 @@ spcc_flush_white(SPConnectorContext *cc, SPCurve *gc)
/* Attach repr */
cc->newconn = SP_ITEM(desktop->currentLayer()->appendChildRepr(repr));
- cc->newconn->transform = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
+ cc->newconn->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
bool connection = false;
- sp_object_setAttribute(cc->newconn, "inkscape:connector-type",
- cc->isOrthogonal ? "orthogonal" : "polyline", false);
- sp_object_setAttribute(cc->newconn, "inkscape:connector-curvature",
- Glib::Ascii::dtostr(cc->curvature).c_str(), false);
+ cc->newconn->setAttribute( "inkscape:connector-type",
+ cc->isOrthogonal ? "orthogonal" : "polyline", false );
+ cc->newconn->setAttribute( "inkscape:connector-curvature",
+ Glib::Ascii::dtostr(cc->curvature).c_str(), false );
if (cc->shref)
{
- sp_object_setAttribute(cc->newconn, "inkscape:connection-start",
- cc->shref, false);
- if (cc->scpid)
- sp_object_setAttribute(cc->newconn, "inkscape:connection-start-point",
- cc->scpid, false);
+ cc->newconn->setAttribute( "inkscape:connection-start", cc->shref, false);
+ if (cc->scpid) {
+ cc->newconn->setAttribute( "inkscape:connection-start-point", cc->scpid, false);
+ }
connection = true;
}
if (cc->ehref)
{
- sp_object_setAttribute(cc->newconn, "inkscape:connection-end",
- cc->ehref, false);
- if (cc->ecpid)
- sp_object_setAttribute(cc->newconn, "inkscape:connection-end-point",
- cc->ecpid, false);
+ cc->newconn->setAttribute( "inkscape:connection-end", cc->ehref, false);
+ if (cc->ecpid) {
+ cc->newconn->setAttribute( "inkscape:connection-end-point", cc->ecpid, false);
+ }
connection = true;
}
// Process pending updates.
cc->newconn->updateRepr();
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
if (connection) {
// Adjust endpoints to shape edge.
@@ -1491,7 +1488,7 @@ spcc_flush_white(SPConnectorContext *cc, SPCurve *gc)
c->unref();
- sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR, _("Create connector"));
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_CONNECTOR, _("Create connector"));
}
@@ -1607,7 +1604,7 @@ endpt_handler(SPKnot */*knot*/, GdkEvent *event, SPConnectorContext *cc)
// Show the red path for dragging.
cc->red_curve = SP_PATH(cc->clickeditem)->original_curve ? SP_PATH(cc->clickeditem)->original_curve->copy() : SP_PATH(cc->clickeditem)->curve->copy();
- Geom::Matrix i2d = sp_item_i2d_affine(cc->clickeditem);
+ Geom::Matrix i2d = (cc->clickeditem)->i2d_affine();
cc->red_curve->transform(i2d);
sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(cc->red_bpath), cc->red_curve);
@@ -1707,7 +1704,7 @@ static void cc_set_active_shape(SPConnectorContext *cc, SPItem *item)
// Ensure the item's connection_points map
// has been updated
- sp_document_ensure_up_to_date(SP_OBJECT_DOCUMENT(item));
+ item->document->ensureUpToDate();
std::set<int> seen;
for ( ConnectionPointMap::iterator it = cc->connpthandles.begin(); it != cc->connpthandles.end() ;)
@@ -1766,7 +1763,7 @@ cc_set_active_conn(SPConnectorContext *cc, SPItem *item)
g_assert( SP_IS_PATH(item) );
SPCurve *curve = SP_PATH(item)->original_curve ? SP_PATH(item)->original_curve : SP_PATH(item)->curve;
- Geom::Matrix i2d = sp_item_i2d_affine(item);
+ Geom::Matrix i2d = item->i2d_affine();
if (cc->active_conn == item)
{
@@ -1950,8 +1947,7 @@ void cc_selection_set_avoid(bool const set_avoid)
char const *value = (set_avoid) ? "true" : NULL;
if (cc_item_is_shape(item)) {
- sp_object_setAttribute(item, "inkscape:connector-avoid",
- value, false);
+ item->setAttribute("inkscape:connector-avoid", value, false);
item->avoidRef->handleSettingChange();
changes++;
}
@@ -1968,7 +1964,7 @@ void cc_selection_set_avoid(bool const set_avoid)
char *event_desc = (set_avoid) ?
_("Make connectors avoid selected objects") :
_("Make connectors ignore selected objects");
- sp_document_done(document, SP_VERB_CONTEXT_CONNECTOR, event_desc);
+ DocumentUndo::done(document, SP_VERB_CONTEXT_CONNECTOR, event_desc);
}
diff --git a/src/console-output-undo-observer.cpp b/src/console-output-undo-observer.cpp
index 18782c163..2cbac74f8 100644
--- a/src/console-output-undo-observer.cpp
+++ b/src/console-output-undo-observer.cpp
@@ -1,9 +1,10 @@
/**
* Inkscape::ConsoleOutputUndoObserver - observer for tracing calls to
- * sp_document_undo, sp_document_redo, sp_document_maybe_done
+ * SPDocumentUndo::undo, SPDocumentUndo::redo, SPDocumentUndo::maybe_done
*
* Authors:
* David Yip <yipdw@alumni.rose-hulman.edu>
+ * Abhishek Sharma
*
* Copyright (c) 2006 Authors
*
@@ -19,31 +20,31 @@ namespace Inkscape {
void
ConsoleOutputUndoObserver::notifyUndoEvent(Event* /*log*/)
{
- // g_message("notifyUndoEvent (sp_document_undo) called; log=%p\n", log->event);
+ // g_message("notifyUndoEvent(SPDocumentUndo::undo) called; log=%p\n", log->event);
}
void
ConsoleOutputUndoObserver::notifyRedoEvent(Event* /*log*/)
{
- // g_message("notifyRedoEvent (sp_document_redo) called; log=%p\n", log->event);
+ // g_message("notifyRedoEvent(SPDocumentUndo::redo) called; log=%p\n", log->event);
}
void
ConsoleOutputUndoObserver::notifyUndoCommitEvent(Event* /*log*/)
{
- //g_message("notifyUndoCommitEvent (sp_document_maybe_done) called; log=%p\n", log->event);
+ //g_message("notifyUndoCommitEvent(SPDocumentUndo::maybe_done) called; log=%p\n", log->event);
}
void
ConsoleOutputUndoObserver::notifyClearUndoEvent()
{
- //g_message("notifyClearUndoEvent (sp_document_clear_undo) called);
+ //g_message("notifyClearUndoEvent(sp_document_clear_undo) called);
}
void
ConsoleOutputUndoObserver::notifyClearRedoEvent()
{
- //g_message("notifyClearRedoEvent (sp_document_clear_redo) called);
+ //g_message("notifyClearRedoEvent(sp_document_clear_redo) called);
}
}
diff --git a/src/console-output-undo-observer.h b/src/console-output-undo-observer.h
index f7d1c7d29..b5c08a8b5 100644
--- a/src/console-output-undo-observer.h
+++ b/src/console-output-undo-observer.h
@@ -1,17 +1,18 @@
/**
* Inkscape::ConsoleOutputUndoObserver - observer for tracing calls to
- * sp_document_undo, sp_document_redo, sp_document_maybe_done
+ * SPDocumentUndo::undo, SPDocumentUndo::redo, SPDocumentUndo::maybe_done
*
* Authors:
* David Yip <yipdw@alumni.rose-hulman.edu>
+ * Abhishek Sharma
*
* Copyright (c) 2006 Authors
*
* Released under GNU GPL, see the file 'COPYING' for more information
*/
-#ifndef __INKSCAPE_CONSOLE_OUTPUT_UNDO_OBSERVER_H__
-#define __INKSCAPE_CONSOLE_OUTPUT_UNDO_OBSERVER_H__
+#ifndef SEEN_INKSCAPE_CONSOLE_OUTPUT_UNDO_OBSERVER_H
+#define SEEN_INKSCAPE_CONSOLE_OUTPUT_UNDO_OBSERVER_H
#include "undo-stack-observer.h"
@@ -31,7 +32,7 @@ public:
};
}
-#endif
+#endif // SEEN_INKSCAPE_CONSOLE_OUTPUT_UNDO_OBSERVER_H
/*
Local Variables:
diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp
index f7697a6c0..71c865879 100644
--- a/src/desktop-events.cpp
+++ b/src/desktop-events.cpp
@@ -3,6 +3,7 @@
*/
/* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 1999-2010 Others
@@ -41,6 +42,8 @@
#include "widgets/desktop-widget.h"
#include "xml/repr.h"
+using Inkscape::DocumentUndo;
+
static void snoop_extended(GdkEvent* event, SPDesktop *desktop);
static void init_extended();
@@ -75,7 +78,6 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
int wx, wy;
SPDesktop *desktop = dtw->desktop;
- Inkscape::XML::Node *repr = SP_OBJECT_REPR(desktop->namedview);
gdk_window_get_pointer(GTK_WIDGET(dtw->canvas)->window, &wx, &wy, NULL);
Geom::Point const event_win(wx, wy);
@@ -92,8 +94,7 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
Geom::Point const event_dt(desktop->w2d(event_w));
// explicitly show guidelines; if I draw a guide, I want them on
- sp_repr_set_boolean(repr, "showguides", TRUE);
- sp_repr_set_boolean(repr, "inkscape:guide-bbox", TRUE);
+ desktop->namedview->setGuides(true);
// calculate the normal of the guidelines when dragged from the edges of rulers.
Geom::Point normal_bl_to_tr(-1.,1.); //bottomleft to topright
@@ -181,13 +182,13 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge
gtk_object_destroy(GTK_OBJECT(guide));
guide = NULL;
if ((horiz ? wy : wx) >= 0) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("sodipodi:guide");
sp_repr_set_point(repr, "orientation", normal);
sp_repr_set_point(repr, "position", from_2geom(event_dt));
- SP_OBJECT_REPR(desktop->namedview)->appendChild(repr);
+ desktop->namedview->appendChild(repr);
Inkscape::GC::release(repr);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_NONE,
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_NONE,
_("Create guide"));
}
desktop->set_coordinate_status(from_2geom(event_dt));
@@ -400,14 +401,14 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
g_assert_not_reached();
break;
}
- sp_document_done(sp_desktop_document(desktop), SP_VERB_NONE,
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_NONE,
_("Move guide"));
} else {
/* Undo movement of any attached shapes. */
sp_guide_moveto(*guide, guide->point_on_line, false);
sp_guide_set_normal(*guide, guide->normal_to_line, false);
sp_guide_remove(guide);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_NONE,
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_NONE,
_("Delete guide"));
}
moved = false;
@@ -454,7 +455,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data)
{
SPDocument *doc = SP_OBJECT_DOCUMENT(guide);
sp_guide_remove(guide);
- sp_document_done(doc, SP_VERB_NONE, _("Delete guide"));
+ DocumentUndo::done(doc, SP_VERB_NONE, _("Delete guide"));
ret = TRUE;
sp_event_context_discard_delayed_snap_event(desktop->event_context);
break;
diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp
index 75b2f8eca..d26752d33 100644
--- a/src/desktop-style.cpp
+++ b/src/desktop-style.cpp
@@ -1,11 +1,11 @@
-#define __SP_DESKTOP_STYLE_C__
-
/** \file
* Desktop style management
*
* Authors:
* bulia byak
* verbalshadow
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004, 2006 authors
*
@@ -103,7 +103,7 @@ sp_desktop_apply_css_recursive(SPObject *o, SPCSSAttr *css, bool skip_lines)
|| SP_IS_FLOWDIV(o)
|| SP_IS_FLOWPARA(o)
|| SP_IS_TEXTPATH(o))
- && !SP_OBJECT_REPR(o)->attribute("style"))
+ && !o->getAttribute("style"))
&&
!(SP_IS_FLOWREGION(o) ||
SP_IS_FLOWREGIONEXCLUDE(o) ||
@@ -121,7 +121,7 @@ sp_desktop_apply_css_recursive(SPObject *o, SPCSSAttr *css, bool skip_lines)
// Scale the style by the inverse of the accumulated parent transform in the paste context.
{
- Geom::Matrix const local(sp_item_i2doc_affine(SP_ITEM(o)));
+ Geom::Matrix const local(SP_ITEM(o)->i2doc_affine());
double const ex(local.descrim());
if ( ( ex != 0. )
&& ( ex != 1. ) ) {
@@ -129,7 +129,7 @@ sp_desktop_apply_css_recursive(SPObject *o, SPCSSAttr *css, bool skip_lines)
}
}
- sp_repr_css_change(SP_OBJECT_REPR(o), css_set, "style");
+ o->changeCSS(css_set,"style");
sp_repr_css_attr_unref(css_set);
}
@@ -138,7 +138,7 @@ sp_desktop_apply_css_recursive(SPObject *o, SPCSSAttr *css, bool skip_lines)
if (SP_IS_USE(o))
return;
- for (SPObject *child = sp_object_first_child(SP_OBJECT(o)) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = o->firstChild() ; child ; child = child->getNext() ) {
if (sp_repr_css_property(css, "opacity", NULL) != NULL) {
// Unset properties which are accumulating and thus should not be set recursively.
// For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group.
@@ -420,7 +420,7 @@ stroke_average_width (GSList const *objects)
if (!SP_IS_ITEM (l->data))
continue;
- Geom::Matrix i2d = sp_item_i2d_affine (SP_ITEM(l->data));
+ Geom::Matrix i2d = SP_ITEM(l->data)->i2d_affine();
SPObject *object = SP_OBJECT(l->data);
@@ -702,11 +702,11 @@ objects_query_strokewidth (GSList *objects, SPStyle *style_res)
if (!style) continue;
if ( style->stroke.isNone() && !(
- style->marker[SP_MARKER_LOC].set || // stroke width affects markers, so if there's no stroke but only markers then we should
- style->marker[SP_MARKER_LOC_START].set || // still calculate the stroke width
- style->marker[SP_MARKER_LOC_MID].set ||
- style->marker[SP_MARKER_LOC_END].set))
- {
+ style->marker[SP_MARKER_LOC].set || // stroke width affects markers, so if there's no stroke but only markers then we should
+ style->marker[SP_MARKER_LOC_START].set || // still calculate the stroke width
+ style->marker[SP_MARKER_LOC_MID].set ||
+ style->marker[SP_MARKER_LOC_END].set))
+ {
continue;
}
@@ -714,7 +714,7 @@ objects_query_strokewidth (GSList *objects, SPStyle *style_res)
noneSet &= style->stroke.isNone();
- Geom::Matrix i2d = sp_item_i2d_affine (SP_ITEM(obj));
+ Geom::Matrix i2d = SP_ITEM(obj)->i2d_affine();
double sw = style->stroke_width.computed * i2d.descrim();
if (prev_sw != -1 && fabs(sw - prev_sw) > 1e-3)
@@ -932,7 +932,7 @@ objects_query_fontnumbers (GSList *objects, SPStyle *style_res)
if (!style) continue;
texts ++;
- size += style->font_size.computed * Geom::Matrix(sp_item_i2d_affine(SP_ITEM(obj))).descrim(); /// \todo FIXME: we assume non-% units here
+ size += style->font_size.computed * Geom::Matrix(SP_ITEM(obj)->i2d_affine()).descrim(); /// \todo FIXME: we assume non-% units here
if (style->letter_spacing.normal) {
if (!different && (letterspacing_prev == 0 || letterspacing_prev == letterspacing))
@@ -1180,11 +1180,12 @@ objects_query_fontfamily (GSList *objects, SPStyle *style_res)
for (GSList const *i = objects; i != NULL; i = i->next) {
SPObject *obj = SP_OBJECT (i->data);
- // std::cout << " " << SP_OBJECT_ID (i->data) << std::endl;
+ // std::cout << " " << reinterpret_cast<SPObject*>(i->data)->getId() << std::endl;
if (!SP_IS_TEXT(obj) && !SP_IS_FLOWTEXT(obj)
&& !SP_IS_TSPAN(obj) && !SP_IS_TREF(obj) && !SP_IS_TEXTPATH(obj)
- && !SP_IS_FLOWDIV(obj) && !SP_IS_FLOWPARA(obj) && !SP_IS_FLOWTSPAN(obj))
+ && !SP_IS_FLOWDIV(obj) && !SP_IS_FLOWPARA(obj) && !SP_IS_FLOWTSPAN(obj)) {
continue;
+ }
SPStyle *style = SP_OBJECT_STYLE (obj);
if (!style) continue;
@@ -1234,11 +1235,12 @@ objects_query_fontspecification (GSList *objects, SPStyle *style_res)
for (GSList const *i = objects; i != NULL; i = i->next) {
SPObject *obj = SP_OBJECT (i->data);
- // std::cout << " " << SP_OBJECT_ID (i->data) << std::endl;
+ // std::cout << " " << reinterpret_cast<SPObject*>(i->data)->getId() << std::endl;
if (!SP_IS_TEXT(obj) && !SP_IS_FLOWTEXT(obj)
&& !SP_IS_TSPAN(obj) && !SP_IS_TREF(obj) && !SP_IS_TEXTPATH(obj)
- && !SP_IS_FLOWDIV(obj) && !SP_IS_FLOWPARA(obj) && !SP_IS_FLOWTSPAN(obj))
+ && !SP_IS_FLOWDIV(obj) && !SP_IS_FLOWPARA(obj) && !SP_IS_FLOWTSPAN(obj)) {
continue;
+ }
SPStyle *style = SP_OBJECT_STYLE (obj);
if (!style) continue;
@@ -1378,7 +1380,7 @@ objects_query_blur (GSList *objects, SPStyle *style_res)
if (!style) continue;
if (!SP_IS_ITEM(obj)) continue;
- Geom::Matrix i2d = sp_item_i2d_affine (SP_ITEM(obj));
+ Geom::Matrix i2d = SP_ITEM(obj)->i2d_affine();
items ++;
@@ -1483,7 +1485,7 @@ sp_desktop_query_style(SPDesktop *desktop, SPStyle *style, int property)
// otherwise, do querying and averaging over selection
if (desktop->selection != NULL) {
- return sp_desktop_query_style_from_list ((GSList *) desktop->selection->itemList(), style, property);
+ return sp_desktop_query_style_from_list ((GSList *) desktop->selection->itemList(), style, property);
}
return QUERY_STYLE_NOTHING;
diff --git a/src/desktop.cpp b/src/desktop.cpp
index c98a974a8..c52a33e9c 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -1,5 +1,3 @@
-#define __SP_DESKTOP_C__
-
/** \file
* Editable view implementation
*
@@ -10,6 +8,8 @@
* Ralf Stephan <ralf@ark.in-berlin.de>
* John Bintz <jcoswell@coswellproductions.org>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Jon A. Cruz
* Copyright (C) 2006-2008 Johan Engelen
@@ -90,6 +90,7 @@
#include "display/canvas-grid.h"
#include "widgets/desktop-widget.h"
#include "box3d-context.h"
+#include "desktop-style.h"
// TODO those includes are only for node tool quick zoom. Remove them after fixing it.
#include "ui/tool/node-tool.h"
@@ -185,12 +186,12 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid
SPDocument *document = SP_OBJECT_DOCUMENT (namedview);
/* Kill flicker */
- sp_document_ensure_up_to_date (document);
+ document->ensureUpToDate();
/* Setup Dialog Manager */
_dlg_mgr = &Inkscape::UI::Dialog::DialogManager::getInstance();
- dkey = sp_item_display_key_new (1);
+ dkey = SPItem::display_key_new(1);
/* Connect document */
setDocument (document);
@@ -255,7 +256,7 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid
// display rect and zoom are now handled in sp_desktop_widget_realize()
Geom::Rect const d(Geom::Point(0.0, 0.0),
- Geom::Point(sp_document_width(document), sp_document_height(document)));
+ Geom::Point(document->getWidth(), document->getHeight()));
SP_CTRLRECT(page)->setRectangle(d);
SP_CTRLRECT(page_border)->setRectangle(d);
@@ -272,12 +273,12 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid
/* Connect event for page resize */
- _doc2dt[5] = sp_document_height (document);
+ _doc2dt[5] = document->getHeight();
sp_canvas_item_affine_absolute (SP_CANVAS_ITEM (drawing), _doc2dt);
_modified_connection = namedview->connectModified(sigc::bind<2>(sigc::ptr_fun(&_namedview_modified), this));
- NRArenaItem *ai = sp_item_invoke_show (SP_ITEM (sp_document_root (document)),
+ NRArenaItem *ai = SP_ITEM(document->getRoot())->invoke_show(
SP_CANVAS_ARENA (drawing)->arena,
dkey,
SP_ITEM_SHOW_DISPLAY);
@@ -394,7 +395,7 @@ void SPDesktop::destroy()
}
if (drawing) {
- sp_item_invoke_hide (SP_ITEM (sp_document_root (doc())), dkey);
+ SP_ITEM(doc()->getRoot())->invoke_hide(dkey);
drawing = NULL;
}
@@ -450,7 +451,7 @@ void SPDesktop::_setDisplayMode(Inkscape::RenderMode mode) {
canvas->rendermode = mode;
_display_mode = mode;
sp_canvas_item_affine_absolute (SP_CANVAS_ITEM (main), _d2w); // redraw
- _widget->setTitle(SP_DOCUMENT_NAME(sp_desktop_document(this)));
+ _widget->setTitle( sp_desktop_document(this)->getName() );
}
void SPDesktop::displayModeToggle() {
@@ -494,7 +495,7 @@ SPObject *SPDesktop::currentLayer() const
void SPDesktop::setCurrentLayer(SPObject *object) {
g_return_if_fail(SP_IS_GROUP(object));
g_return_if_fail( currentRoot() == object || (currentRoot() && currentRoot()->isAncestorOf(object)) );
- // printf("Set Layer to ID: %s\n", SP_OBJECT_ID(object));
+ // printf("Set Layer to ID: %s\n", object->getId());
_layer_hierarchy->setBottom(object);
}
@@ -552,7 +553,7 @@ bool SPDesktop::isLayer(SPObject *object) const {
bool SPDesktop::isWithinViewport (SPItem *item) const
{
Geom::Rect const viewport = get_display_area();
- Geom::OptRect const bbox = sp_item_bbox_desktop(item);
+ Geom::OptRect const bbox = item->getBboxDesktop();
if (bbox) {
return viewport.contains(*bbox);
} else {
@@ -684,33 +685,30 @@ SPDesktop::set_coordinate_status (Geom::Point p) {
}
/**
- * \see sp_document_item_from_list_at_point_bottom()
+ * \see SPDocument::getItemFromListAtPointBottom()
*/
-SPItem *
-SPDesktop::item_from_list_at_point_bottom (const GSList *list, Geom::Point const p) const
+SPItem *SPDesktop::getItemFromListAtPointBottom(const GSList *list, Geom::Point const p) const
{
g_return_val_if_fail (doc() != NULL, NULL);
- return sp_document_item_from_list_at_point_bottom (dkey, SP_GROUP (doc()->root), list, p);
+ return SPDocument::getItemFromListAtPointBottom(dkey, SP_GROUP (doc()->root), list, p);
}
/**
- * \see sp_document_item_at_point()
+ * \see SPDocument::getItemAtPoint()
*/
-SPItem *
-SPDesktop::item_at_point (Geom::Point const p, bool into_groups, SPItem *upto) const
+SPItem *SPDesktop::getItemAtPoint(Geom::Point const p, bool into_groups, SPItem *upto) const
{
g_return_val_if_fail (doc() != NULL, NULL);
- return sp_document_item_at_point (doc(), dkey, p, into_groups, upto);
+ return doc()->getItemAtPoint( dkey, p, into_groups, upto);
}
/**
- * \see sp_document_group_at_point()
+ * \see SPDocument::getGroupAtPoint()
*/
-SPItem *
-SPDesktop::group_at_point (Geom::Point const p) const
+SPItem *SPDesktop::getGroupAtPoint(Geom::Point const p) const
{
g_return_val_if_fail (doc() != NULL, NULL);
- return sp_document_group_at_point (doc(), dkey, p);
+ return doc()->getGroupAtPoint(dkey, p);
}
/**
@@ -967,6 +965,26 @@ SPDesktop::zoom_absolute_keep_point (double cx, double cy, double px, double py,
}
/**
+ * Apply the desktop's current style or the tool style to the object.
+ */
+void SPDesktop::applyCurrentOrToolStyle(SPObject *obj, Glib::ustring const &tool_path, bool with_text)
+{
+ SPCSSAttr *css_current = sp_desktop_get_style(this, with_text);
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+
+ if (prefs->getBool(tool_path + "/usecurrent") && css_current) {
+ obj->setCSS(css_current,"style");
+ } else {
+ SPCSSAttr *css = prefs->getInheritedStyle(tool_path + "/style");
+ obj->setCSS(css,"style");
+ sp_repr_css_attr_unref(css);
+ }
+ if (css_current) {
+ sp_repr_css_attr_unref(css_current);
+ }
+}
+
+/**
* Zoom to center with absolute zoom factor.
*/
void
@@ -1020,7 +1038,7 @@ void
SPDesktop::zoom_page()
{
Geom::Rect d(Geom::Point(0, 0),
- Geom::Point(sp_document_width(doc()), sp_document_height(doc())));
+ Geom::Point(doc()->getWidth(), doc()->getHeight()));
if (d.minExtent() < 1.0) {
return;
@@ -1037,12 +1055,12 @@ SPDesktop::zoom_page_width()
{
Geom::Rect const a = get_display_area();
- if (sp_document_width(doc()) < 1.0) {
+ if (doc()->getWidth() < 1.0) {
return;
}
Geom::Rect d(Geom::Point(0, a.midpoint()[Geom::Y]),
- Geom::Point(sp_document_width(doc()), a.midpoint()[Geom::Y]));
+ Geom::Point(doc()->getWidth(), a.midpoint()[Geom::Y]));
set_display_area(d, 10);
}
@@ -1078,10 +1096,10 @@ void
SPDesktop::zoom_drawing()
{
g_return_if_fail (doc() != NULL);
- SPItem *docitem = SP_ITEM (sp_document_root (doc()));
+ SPItem *docitem = SP_ITEM(doc()->getRoot());
g_return_if_fail (docitem != NULL);
- Geom::OptRect d = sp_item_bbox_desktop(docitem);
+ Geom::OptRect d = docitem->getBboxDesktop();
/* Note that the second condition here indicates that
** there are no items in the drawing.
@@ -1416,8 +1434,7 @@ void SPDesktop::toggleGrids()
}
} else {
//there is no grid present at the moment. add a rectangular grid and make it visible
- Inkscape::XML::Node *repr = SP_OBJECT_REPR(namedview);
- Inkscape::CanvasGrid::writeNewGridToRepr(repr, sp_desktop_document(this), Inkscape::GRID_RECTANGULAR);
+ namedview->writeNewGrid(sp_desktop_document(this), Inkscape::GRID_RECTANGULAR);
showGrids(true);
}
}
@@ -1435,9 +1452,8 @@ void SPDesktop::showGrids(bool show, bool dirty_document)
void SPDesktop::toggleSnapGlobal()
{
- bool v = namedview->snap_manager.snapprefs.getSnapEnabledGlobally();
- Inkscape::XML::Node *repr = SP_OBJECT_REPR(namedview);
- sp_repr_set_boolean(repr, "inkscape:snap-global", !v);
+ bool v = namedview->getSnapGlobal();
+ namedview->setSnapGlobal(!v);
}
//----------------------------------------------------------------------
@@ -1480,7 +1496,7 @@ SPDesktop::setDocument (SPDocument *doc)
{
if (this->doc() && doc) {
namedview->hide(this);
- sp_item_invoke_hide (SP_ITEM (sp_document_root (this->doc())), dkey);
+ SP_ITEM(this->doc()->getRoot())->invoke_hide(dkey);
}
if (_layer_hierarchy) {
@@ -1491,7 +1507,7 @@ SPDesktop::setDocument (SPDocument *doc)
_layer_hierarchy->connectAdded(sigc::bind(sigc::ptr_fun(_layer_activated), this));
_layer_hierarchy->connectRemoved(sigc::bind(sigc::ptr_fun(_layer_deactivated), this));
_layer_hierarchy->connectChanged(sigc::bind(sigc::ptr_fun(_layer_hierarchy_changed), this));
- _layer_hierarchy->setTop(SP_DOCUMENT_ROOT(doc));
+ _layer_hierarchy->setTop(doc->getRoot());
/* setup EventLog */
event_log = new Inkscape::EventLog(doc);
@@ -1511,7 +1527,7 @@ SPDesktop::setDocument (SPDocument *doc)
_modified_connection = namedview->connectModified(sigc::bind<2>(sigc::ptr_fun(&_namedview_modified), this));
number = namedview->getViewCount();
- ai = sp_item_invoke_show (SP_ITEM (sp_document_root (doc)),
+ ai = SP_ITEM(doc->getRoot())->invoke_show(
SP_CANVAS_ARENA (drawing)->arena,
dkey,
SP_ITEM_SHOW_DISPLAY);
diff --git a/src/desktop.h b/src/desktop.h
index af2473baf..957c3b342 100644
--- a/src/desktop.h
+++ b/src/desktop.h
@@ -11,6 +11,8 @@
* Ralf Stephan <ralf@ark.in-berlin.de>
* John Bintz <jcoswell@coswellproductions.org>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ * Jon A. Cruz <jon@joncruz.org>get
+ * Abhishek Sharma
*
* Copyright (C) 2007 Johan Engelen
* Copyright (C) 2006 John Bintz
@@ -84,8 +86,9 @@ namespace Inkscape {
*
* @see \ref desktop-handles.h for desktop macros.
*/
-struct SPDesktop : public Inkscape::UI::View::View
+class SPDesktop : public Inkscape::UI::View::View
{
+public:
Inkscape::UI::Dialog::DialogManager *_dlg_mgr;
SPNamedView *namedview;
SPCanvas *canvas;
@@ -229,9 +232,9 @@ struct SPDesktop : public Inkscape::UI::View::View
void push_event_context (GtkType type, const gchar *config, unsigned int key);
void set_coordinate_status (Geom::Point p);
- SPItem *item_from_list_at_point_bottom (const GSList *list, Geom::Point const p) const;
- SPItem *item_at_point (Geom::Point const p, bool into_groups, SPItem *upto = NULL) const;
- SPItem *group_at_point (Geom::Point const p) const;
+ SPItem *getItemFromListAtPointBottom(const GSList *list, Geom::Point const p) const;
+ SPItem *getItemAtPoint(Geom::Point const p, bool into_groups, SPItem *upto = NULL) const;
+ SPItem *getGroupAtPoint(Geom::Point const p) const;
Geom::Point point() const;
Geom::Rect get_display_area() const;
@@ -255,8 +258,9 @@ struct SPDesktop : public Inkscape::UI::View::View
void prev_zoom();
void next_zoom();
void zoom_quick(bool enable = true);
- /** \brief Returns whether the desktop is in quick zoom mode or not */
- bool quick_zoomed(void) { return _quick_zoom_enabled; }
+
+ /** \brief Returns whether the desktop is in quick zoom mode or not */
+ bool quick_zoomed(void) { return _quick_zoom_enabled; }
bool scroll_to_point (Geom::Point const &s_dt, gdouble autoscrollspeed = 0);
void scroll_world (double dx, double dy, bool is_scrolling = false);
@@ -324,6 +328,8 @@ struct SPDesktop : public Inkscape::UI::View::View
virtual bool onDeleteUI (GdkEventAny*);
virtual bool onWindowStateEvent (GdkEventWindowState* event);
+ void applyCurrentOrToolStyle(SPObject *obj, Glib::ustring const &tool_path, bool with_text);
+
private:
Inkscape::UI::View::EditWidgetInterface *_widget;
Inkscape::Application *_inkscape;
diff --git a/src/dialogs/clonetiler.cpp b/src/dialogs/clonetiler.cpp
index c89a92ead..6e03f87e3 100644
--- a/src/dialogs/clonetiler.cpp
+++ b/src/dialogs/clonetiler.cpp
@@ -4,6 +4,8 @@
/* Authors:
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <goejendaagh@zonnet.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2006 Authors
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -46,6 +48,8 @@
#include "widgets/icon.h"
#include "xml/repr.h"
+using Inkscape::DocumentUndo;
+
#define MIN_ONSCREEN_DISTANCE 50
static GtkWidget *dlg = NULL;
@@ -111,11 +115,6 @@ clonetiler_dialog_delete (GtkObject */*object*/, GdkEvent * /*event*/, gpointer
}
-static void on_delete()
-{
- (void)clonetiler_dialog_delete (0, 0, NULL);
-}
-
static void
on_picker_color_changed (guint rgba)
{
@@ -840,9 +839,9 @@ clonetiler_trace_hide_tiled_clones_recursively (SPObject *from)
if (!trace_arena)
return;
- for (SPObject *o = sp_object_first_child(from); o != NULL; o = SP_OBJECT_NEXT(o)) {
+ for (SPObject *o = from->firstChild(); o != NULL; o = o->next) {
if (SP_IS_ITEM(o) && clonetiler_is_a_clone_of (o, NULL))
- sp_item_invoke_hide(SP_ITEM(o), trace_visionkey); // FIXME: hide each tiled clone's original too!
+ SP_ITEM(o)->invoke_hide(trace_visionkey); // FIXME: hide each tiled clone's original too!
clonetiler_trace_hide_tiled_clones_recursively (o);
}
}
@@ -852,17 +851,16 @@ clonetiler_trace_setup (SPDocument *doc, gdouble zoom, SPItem *original)
{
trace_arena = NRArena::create();
/* Create ArenaItem and set transform */
- trace_visionkey = sp_item_display_key_new(1);
+ trace_visionkey = SPItem::display_key_new(1);
trace_doc = doc;
- trace_root = sp_item_invoke_show( SP_ITEM(SP_DOCUMENT_ROOT (trace_doc)),
- (NRArena *) trace_arena, trace_visionkey, SP_ITEM_SHOW_DISPLAY);
+ trace_root = SP_ITEM(trace_doc->getRoot())->invoke_show((NRArena *) trace_arena, trace_visionkey, SP_ITEM_SHOW_DISPLAY);
// hide the (current) original and any tiled clones, we only want to pick the background
- sp_item_invoke_hide(original, trace_visionkey);
- clonetiler_trace_hide_tiled_clones_recursively (SP_OBJECT(SP_DOCUMENT_ROOT (trace_doc)));
+ original->invoke_hide(trace_visionkey);
+ clonetiler_trace_hide_tiled_clones_recursively(SP_OBJECT(trace_doc->getRoot()));
- sp_document_root (trace_doc)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
- sp_document_ensure_up_to_date(trace_doc);
+ trace_doc->getRoot()->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ trace_doc->ensureUpToDate();
trace_zoom = zoom;
}
@@ -910,7 +908,7 @@ static void
clonetiler_trace_finish ()
{
if (trace_doc) {
- sp_item_invoke_hide(SP_ITEM(sp_document_root(trace_doc)), trace_visionkey);
+ SP_ITEM(trace_doc->getRoot())->invoke_hide(trace_visionkey);
}
if (trace_arena) {
((NRObject *) trace_arena)->unreference();
@@ -938,20 +936,20 @@ clonetiler_unclump( GtkWidget */*widget*/, void * )
GSList *to_unclump = NULL; // not including the original
- for (SPObject *child = sp_object_first_child(parent); child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) {
if (clonetiler_is_a_clone_of (child, obj)) {
to_unclump = g_slist_prepend (to_unclump, child);
}
}
- sp_document_ensure_up_to_date(sp_desktop_document(desktop));
+ sp_desktop_document(desktop)->ensureUpToDate();
unclump (to_unclump);
g_slist_free (to_unclump);
- sp_document_done (sp_desktop_document (desktop), SP_VERB_DIALOG_CLONETILER,
- _("Unclump tiled clones"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_DIALOG_CLONETILER,
+ _("Unclump tiled clones"));
}
static guint
@@ -961,7 +959,7 @@ clonetiler_number_of_clones (SPObject *obj)
guint n = 0;
- for (SPObject *child = sp_object_first_child(parent); child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) {
if (clonetiler_is_a_clone_of (child, obj)) {
n ++;
}
@@ -990,7 +988,7 @@ clonetiler_remove( GtkWidget */*widget*/, void *, bool do_undo = true )
// remove old tiling
GSList *to_delete = NULL;
- for (SPObject *child = sp_object_first_child(parent); child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) {
if (clonetiler_is_a_clone_of (child, obj)) {
to_delete = g_slist_prepend (to_delete, child);
}
@@ -1002,9 +1000,10 @@ clonetiler_remove( GtkWidget */*widget*/, void *, bool do_undo = true )
clonetiler_change_selection (NULL, selection, dlg);
- if (do_undo)
- sp_document_done (sp_desktop_document (desktop), SP_VERB_DIALOG_CLONETILER,
- _("Delete tiled clones"));
+ if (do_undo) {
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_DIALOG_CLONETILER,
+ _("Delete tiled clones"));
+ }
}
static Geom::Rect
@@ -1188,7 +1187,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 );
- Geom::OptRect r = SP_ITEM(obj)->getBounds(sp_item_i2doc_affine(SP_ITEM(obj)),
+ Geom::OptRect r = SP_ITEM(obj)->getBounds(SP_ITEM(obj)->i2doc_affine(),
bbox_type);
if (r) {
w = r->dimensions()[Geom::X];
@@ -1437,7 +1436,7 @@ clonetiler_apply( GtkWidget */*widget*/, void * )
double radius = blur * perimeter;
// this is necessary for all newly added clones to have correct bboxes,
// otherwise filters won't work:
- sp_document_ensure_up_to_date(sp_desktop_document(desktop));
+ sp_desktop_document(desktop)->ensureUpToDate();
// it's hard to figure out exact width/height of the tile without having an object
// that we can take bbox of; however here we only need a lower bound so that blur
// margins are not too small, and the perimeter should work
@@ -1467,8 +1466,8 @@ clonetiler_apply( GtkWidget */*widget*/, void * )
desktop->clearWaitingCursor();
- sp_document_done(sp_desktop_document(desktop), SP_VERB_DIALOG_CLONETILER,
- _("Create tiled clones"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_DIALOG_CLONETILER,
+ _("Create tiled clones"));
}
static GtkWidget *
diff --git a/src/dialogs/export.cpp b/src/dialogs/export.cpp
index 82e2d45e1..7e99c2496 100644
--- a/src/dialogs/export.cpp
+++ b/src/dialogs/export.cpp
@@ -5,6 +5,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2007 Authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -66,6 +68,8 @@
#include <gdk/gdkwin32.h>
#endif
+using Inkscape::DocumentUndo;
+
#define SP_EXPORT_MIN_SIZE 1.0
#define DPI_BASE PX_PER_IN
@@ -362,9 +366,9 @@ gchar* create_filepath_from_id (const gchar *id, const gchar *file_entry_text) {
if (directory == NULL) {
/* Grab document directory */
- if (SP_DOCUMENT_URI(SP_ACTIVE_DOCUMENT)) {
+ if ( SP_ACTIVE_DOCUMENT->getURI() ) {
// std::cout << "Directory from document" << std::endl;
- directory = g_dirname(SP_DOCUMENT_URI(SP_ACTIVE_DOCUMENT));
+ directory = g_dirname( SP_ACTIVE_DOCUMENT->getURI() );
}
}
@@ -535,11 +539,11 @@ sp_export_dialog (void)
* this code sets the name first, it may not be the one users
* really see.
*/
- if (SP_ACTIVE_DOCUMENT && SP_DOCUMENT_URI (SP_ACTIVE_DOCUMENT))
+ if ( SP_ACTIVE_DOCUMENT && SP_ACTIVE_DOCUMENT->getURI() )
{
gchar *name;
SPDocument * doc = SP_ACTIVE_DOCUMENT;
- const gchar *uri = SP_DOCUMENT_URI (doc);
+ const gchar *uri = doc->getURI();
const gchar *text_extension = get_file_save_extension (Inkscape::Extension::FILE_SAVE_METHOD_SAVE_AS).c_str();
Inkscape::Extension::Output * oextension = NULL;
@@ -780,7 +784,7 @@ sp_export_selection_modified ( Inkscape::Application */*inkscape*/,
if ( SP_ACTIVE_DESKTOP ) {
SPDocument *doc;
doc = sp_desktop_document (SP_ACTIVE_DESKTOP);
- Geom::OptRect bbox = sp_item_bbox_desktop (SP_ITEM (SP_DOCUMENT_ROOT (doc)), SPItem::RENDERING_BBOX);
+ Geom::OptRect bbox = SP_ITEM(doc->root)->getBboxDesktop(SPItem::RENDERING_BBOX);
if (bbox) {
sp_export_set_area (base, bbox->min()[Geom::X],
bbox->min()[Geom::Y],
@@ -861,7 +865,7 @@ sp_export_area_toggled (GtkToggleButton *tb, GtkObject *base)
/** \todo
* This returns wrong values if the document has a viewBox.
*/
- bbox = sp_item_bbox_desktop (SP_ITEM (SP_DOCUMENT_ROOT (doc)), SPItem::RENDERING_BBOX);
+ bbox = SP_ITEM(doc->root)->getBboxDesktop(SPItem::RENDERING_BBOX);
/* If the drawing is valid, then we'll use it and break
otherwise we drop through to the page settings */
if (bbox) {
@@ -871,7 +875,7 @@ sp_export_area_toggled (GtkToggleButton *tb, GtkObject *base)
}
case SELECTION_PAGE:
bbox = Geom::Rect(Geom::Point(0.0, 0.0),
- Geom::Point(sp_document_width(doc), sp_document_height(doc)));
+ Geom::Point(doc->getWidth(), doc->getHeight()));
// std::cout << "Using selection: PAGE" << std::endl;
key = SELECTION_PAGE;
@@ -1064,8 +1068,8 @@ gchar *absolutize_path_from_document_location (SPDocument *doc, const gchar *fil
{
gchar *path = 0;
//Make relative paths go from the document location, if possible:
- if (!g_path_is_absolute(filename) && doc->uri) {
- gchar *dirname = g_path_get_dirname(doc->uri);
+ if (!g_path_is_absolute(filename) && doc->getURI()) {
+ gchar *dirname = g_path_get_dirname(doc->getURI());
if (dirname) {
path = g_build_filename(dirname, filename, NULL);
g_free(dirname);
@@ -1105,10 +1109,10 @@ sp_export_export_clicked (GtkButton */*button*/, GtkObject *base)
for (GSList *i = (GSList *) sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList();
i != NULL;
i = i->next) {
- SPItem *item = (SPItem *) i->data;
+ SPItem *item = reinterpret_cast<SPItem *>(i->data);
// retrieve export filename hint
- const gchar *filename = SP_OBJECT_REPR(item)->attribute("inkscape:export-filename");
+ const gchar *filename = item->getRepr()->attribute("inkscape:export-filename");
gchar *path = 0;
if (!filename) {
path = create_filepath_from_id(item->getId(), NULL);
@@ -1117,7 +1121,7 @@ sp_export_export_clicked (GtkButton */*button*/, GtkObject *base)
}
// retrieve export dpi hints
- const gchar *dpi_hint = SP_OBJECT_REPR(item)->attribute("inkscape:export-xdpi"); // only xdpi, ydpi is always the same now
+ const gchar *dpi_hint = item->getRepr()->attribute("inkscape:export-xdpi"); // only xdpi, ydpi is always the same now
gdouble dpi = 0.0;
if (dpi_hint) {
dpi = atof(dpi_hint);
@@ -1127,7 +1131,7 @@ sp_export_export_clicked (GtkButton */*button*/, GtkObject *base)
}
Geom::OptRect area;
- sp_item_invoke_bbox(item, area, sp_item_i2d_affine((SPItem *) item), TRUE);
+ item->invoke_bbox( area, item->i2d_affine(), 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);
@@ -1239,14 +1243,13 @@ sp_export_export_clicked (GtkButton */*button*/, GtkObject *base)
case SELECTION_PAGE:
case SELECTION_DRAWING: {
SPDocument * doc = SP_ACTIVE_DOCUMENT;
- Inkscape::XML::Node * repr = sp_document_repr_root(doc);
+ Inkscape::XML::Node * repr = doc->getReprRoot();
bool modified = false;
- const gchar * temp_string;
- bool saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, false);
+ bool saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false);
- temp_string = repr->attribute("inkscape:export-filename");
+ gchar const *temp_string = repr->attribute("inkscape:export-filename");
if (temp_string == NULL || strcmp(temp_string, filename_ext)) {
repr->setAttribute("inkscape:export-filename", filename_ext);
modified = true;
@@ -1261,7 +1264,7 @@ sp_export_export_clicked (GtkButton */*button*/, GtkObject *base)
sp_repr_set_svg_double(repr, "inkscape:export-ydpi", ydpi);
modified = true;
}
- sp_document_set_undo_sensitive(doc, saved);
+ DocumentUndo::setUndoSensitive(doc, saved);
if (modified) {
doc->setModifiedSinceSave();
@@ -1273,8 +1276,8 @@ sp_export_export_clicked (GtkButton */*button*/, GtkObject *base)
SPDocument * doc = SP_ACTIVE_DOCUMENT;
bool modified = false;
- bool saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, false);
+ bool saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false);
reprlst = sp_desktop_selection(SP_ACTIVE_DESKTOP)->reprList();
for(; reprlst != NULL; reprlst = reprlst->next) {
@@ -1283,8 +1286,8 @@ sp_export_export_clicked (GtkButton */*button*/, GtkObject *base)
if (repr->attribute("id") == NULL ||
!(g_strrstr(filename_ext, repr->attribute("id")) != NULL &&
- (!SP_DOCUMENT_URI(SP_ACTIVE_DOCUMENT) ||
- strcmp(g_dirname(filename), g_dirname(SP_DOCUMENT_URI(SP_ACTIVE_DOCUMENT))) == 0))) {
+ ( !SP_ACTIVE_DOCUMENT->getURI() ||
+ strcmp(g_dirname(filename), g_dirname(SP_ACTIVE_DOCUMENT->getURI())) == 0))) {
temp_string = repr->attribute("inkscape:export-filename");
if (temp_string == NULL || strcmp(temp_string, filename_ext)) {
repr->setAttribute("inkscape:export-filename", filename_ext);
@@ -1302,7 +1305,7 @@ sp_export_export_clicked (GtkButton */*button*/, GtkObject *base)
modified = true;
}
}
- sp_document_set_undo_sensitive(doc, saved);
+ DocumentUndo::setUndoSensitive(doc, saved);
if (modified) {
doc->setModifiedSinceSave();
@@ -1498,7 +1501,7 @@ sp_export_detect_size(GtkObject * base) {
case SELECTION_DRAWING: {
SPDocument *doc = sp_desktop_document (SP_ACTIVE_DESKTOP);
- Geom::OptRect bbox = sp_item_bbox_desktop (SP_ITEM (SP_DOCUMENT_ROOT (doc)), SPItem::RENDERING_BBOX);
+ Geom::OptRect bbox = SP_ITEM(doc->root)->getBboxDesktop(SPItem::RENDERING_BBOX);
// std::cout << "Drawing " << bbox2;
if ( bbox && sp_export_bbox_equal(*bbox,current_bbox) ) {
@@ -1513,8 +1516,8 @@ sp_export_detect_size(GtkObject * base) {
doc = sp_desktop_document (SP_ACTIVE_DESKTOP);
Geom::Point x(0.0, 0.0);
- Geom::Point y(sp_document_width(doc),
- sp_document_height(doc));
+ Geom::Point y(doc->getWidth(),
+ doc->getHeight());
Geom::Rect bbox(x, y);
// std::cout << "Page " << bbox;
diff --git a/src/dialogs/find.cpp b/src/dialogs/find.cpp
index a3612f60e..fe264892a 100644
--- a/src/dialogs/find.cpp
+++ b/src/dialogs/find.cpp
@@ -3,6 +3,8 @@
*/
/* Authors:
* bulia byak <bulia@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004 Authors
*
@@ -292,7 +294,7 @@ all_items (SPObject *r, GSList *l, bool hidden, bool locked)
if (!strcmp (SP_OBJECT_REPR (r)->name(), "svg:metadata"))
return l; // we're not interested in metadata
- for (SPObject *child = sp_object_first_child(r); child; child = SP_OBJECT_NEXT (child)) {
+ for (SPObject *child = r->firstChild(); child; child = child->next) {
if (SP_IS_ITEM (child) && !SP_OBJECT_IS_CLONED (child) && !desktop->isLayer(SP_ITEM(child))) {
if ((hidden || !desktop->itemIsHidden(SP_ITEM(child))) && (locked || !SP_ITEM(child)->isLocked())) {
l = g_slist_prepend (l, child);
@@ -342,7 +344,7 @@ void sp_find_dialog_find(GObject *, GObject *dlg)
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (gtk_object_get_data (GTK_OBJECT (dlg), "inlayer")))) {
l = all_items (desktop->currentLayer(), l, hidden, locked);
} else {
- l = all_items (SP_DOCUMENT_ROOT (sp_desktop_document (desktop)), l, hidden, locked);
+ l = all_items(sp_desktop_document(desktop)->getRoot(), l, hidden, locked);
}
}
guint all = g_slist_length (l);
@@ -606,8 +608,8 @@ sp_find_types ()
{
GtkWidget *c = sp_find_types_checkbox_indented (vb, "clones", TRUE, tt, _("Search clones"),
- //TRANSLATORS: "Clones" is a noun indicating type of object to find
- C_("Find dialog","Clones"), NULL, 10);
+ //TRANSLATORS: "Clones" is a noun indicating type of object to find
+ C_("Find dialog","Clones"), NULL, 10);
gtk_box_pack_start (GTK_BOX (vb_all), c, FALSE, FALSE, 0);
}
diff --git a/src/dialogs/item-properties.cpp b/src/dialogs/item-properties.cpp
index 40665e08e..8b5ac1784 100644
--- a/src/dialogs/item-properties.cpp
+++ b/src/dialogs/item-properties.cpp
@@ -5,6 +5,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <goejendaagh@zonnet.nl>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2006 Authors
* Copyright (C) 2001 Ximian, Inc.
@@ -41,6 +42,8 @@
#include "../widgets/sp-attribute-widget.h"
#include "../widgets/sp-widget.h"
+using Inkscape::DocumentUndo;
+
#define MIN_ONSCREEN_DISTANCE 50
static GtkWidget *dlg = NULL;
@@ -398,8 +401,8 @@ sp_item_widget_sensitivity_toggled (GtkWidget *widget, SPWidget *spw)
item->setLocked(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)));
- sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))? _("Lock object") : _("Unlock object"));
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))? _("Lock object") : _("Unlock object"));
gtk_object_set_data (GTK_OBJECT (spw), "blocked", GUINT_TO_POINTER (FALSE));
}
@@ -417,8 +420,8 @@ sp_item_widget_hidden_toggled(GtkWidget *widget, SPWidget *spw)
item->setExplicitlyHidden(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));
- sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))? _("Hide object") : _("Unhide object"));
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))? _("Hide object") : _("Unhide object"));
gtk_object_set_data (GTK_OBJECT (spw), "blocked", GUINT_TO_POINTER (FALSE));
}
@@ -449,9 +452,9 @@ sp_item_widget_label_changed( GtkWidget */*widget*/, SPWidget *spw )
SPException ex;
gtk_label_set_markup_with_mnemonic (GTK_LABEL (id_label), _("_ID:"));
SP_EXCEPTION_INIT (&ex);
- sp_object_setAttribute (SP_OBJECT (item), "id", id, &ex);
- sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
- _("Set object ID"));
+ item->setAttribute("id", id, &ex);
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+ _("Set object ID"));
}
/* Retrieve the label widget for the object's label */
@@ -465,16 +468,16 @@ sp_item_widget_label_changed( GtkWidget */*widget*/, SPWidget *spw )
SPObject *obj = (SPObject*)item;
if (strcmp (label, obj->defaultLabel())) {
obj->setLabel(label);
- sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
- _("Set object label"));
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+ _("Set object label"));
}
/* Retrieve the title */
GtkWidget *w = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(spw), "title"));
gchar *title = (gchar *)gtk_entry_get_text(GTK_ENTRY (w));
if (obj->setTitle(title))
- sp_document_done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
- _("Set object title"));
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+ _("Set object title"));
/* Retrieve the description */
GtkTextView *tv = GTK_TEXT_VIEW(gtk_object_get_data(GTK_OBJECT(spw), "desc"));
@@ -483,8 +486,8 @@ sp_item_widget_label_changed( GtkWidget */*widget*/, SPWidget *spw )
gtk_text_buffer_get_bounds(buf, &start, &end);
gchar *desc = gtk_text_buffer_get_text(buf, &start, &end, TRUE);
if (obj->setDesc(desc))
- sp_document_done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
- _("Set object description"));
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_DIALOG_ITEM,
+ _("Set object description"));
g_free(desc);
gtk_object_set_data (GTK_OBJECT (spw), "blocked", GUINT_TO_POINTER (FALSE));
diff --git a/src/dialogs/spellcheck.cpp b/src/dialogs/spellcheck.cpp
index 476a551f1..4712d9926 100644
--- a/src/dialogs/spellcheck.cpp
+++ b/src/dialogs/spellcheck.cpp
@@ -3,6 +3,8 @@
*/
/* Authors:
* bulia byak <bulia@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2009 Authors
*
@@ -37,6 +39,7 @@
#include <xml/repr.h>
#include "display/canvas-bpath.h"
#include "display/curve.h"
+#include "document-undo.h"
#ifdef HAVE_ASPELL
#include <aspell.h>
@@ -45,6 +48,8 @@
#include <windows.h>
#endif
+using Inkscape::DocumentUndo;
+
#define MIN_ONSCREEN_DISTANCE 50
static GtkWidget *dlg = NULL;
@@ -200,10 +205,11 @@ all_text_items (SPObject *r, GSList *l, bool hidden, bool locked)
if (SP_IS_DEFS(r))
return l; // we're not interested in items in defs
- if (!strcmp (SP_OBJECT_REPR (r)->name(), "svg:metadata"))
+ if (!strcmp(r->getRepr()->name(), "svg:metadata")) {
return l; // we're not interested in metadata
+ }
- for (SPObject *child = sp_object_first_child(r); child; child = SP_OBJECT_NEXT (child)) {
+ for (SPObject *child = r->firstChild(); child; child = child->next) {
if (SP_IS_ITEM (child) && !SP_OBJECT_IS_CLONED (child) && !_desktop->isLayer(SP_ITEM(child))) {
if ((hidden || !_desktop->itemIsHidden(SP_ITEM(child))) && (locked || !SP_ITEM(child)->isLocked())) {
if (SP_IS_TEXT(child) || SP_IS_FLOWTEXT(child))
@@ -236,8 +242,8 @@ gint compare_text_bboxes (gconstpointer a, gconstpointer b)
SPItem *i1 = SP_ITEM(a);
SPItem *i2 = SP_ITEM(b);
- Geom::OptRect bbox1 = i1->getBounds(sp_item_i2d_affine(i1));
- Geom::OptRect bbox2 = i2->getBounds(sp_item_i2d_affine(i2));
+ Geom::OptRect bbox1 = i1->getBounds(i1->i2d_affine());
+ Geom::OptRect bbox2 = i2->getBounds(i2->i2d_affine());
if (!bbox1 || !bbox2) {
return 0;
}
@@ -392,7 +398,7 @@ spellcheck_init(SPDesktop *desktop)
_speller3 = to_aspell_speller(ret);
}
- _root = SP_DOCUMENT_ROOT (sp_desktop_document (desktop));
+ _root = sp_desktop_document(desktop)->getRoot();
// empty the list of objects we've checked
g_slist_free (_seen_objects);
@@ -570,7 +576,7 @@ spellcheck_next_word()
// draw rect
std::vector<Geom::Point> points =
- _layout->createSelectionShape(_begin_w, _end_w, sp_item_i2d_affine(_text));
+ _layout->createSelectionShape(_begin_w, _end_w, _text->i2d_affine());
Geom::Point tl, br;
tl = br = points.front();
for (unsigned i = 0 ; i < points.size() ; i ++) {
@@ -777,8 +783,8 @@ sp_spellcheck_accept (GObject *, GObject *dlg)
// find the end of the word anew
_end_w = _begin_w;
_end_w.nextEndOfWord();
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_CONTEXT_TEXT,
- _("Fix spelling"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_TEXT,
+ _("Fix spelling"));
}
}
diff --git a/src/dialogs/text-edit.cpp b/src/dialogs/text-edit.cpp
index 570265825..207b9b0d2 100644
--- a/src/dialogs/text-edit.cpp
+++ b/src/dialogs/text-edit.cpp
@@ -5,6 +5,7 @@
* Lauris Kaplinski <lauris@ximian.com>
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <goejendaagh@zonnet.nl>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2007 Authors
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -49,6 +50,8 @@ extern "C" {
#include "widgets/icon.h"
#include <xml/repr.h>
+using Inkscape::DocumentUndo;
+
#define VB_MARGIN 4
#define MIN_ONSCREEN_DISTANCE 50
@@ -641,7 +644,7 @@ sp_text_edit_dialog_apply( GtkButton */*button*/, GtkWidget *dlg )
if (SP_IS_TEXT (item_list->data)) {
// backwards compatibility:
- SP_OBJECT_REPR(item_list->data)->setAttribute("sodipodi:linespacing", sp_repr_css_property (css, "line-height", NULL));
+ reinterpret_cast<SPObject*>(item_list->data)->getRepr()->setAttribute("sodipodi:linespacing", sp_repr_css_property (css, "line-height", NULL));
++items;
}
@@ -664,8 +667,8 @@ sp_text_edit_dialog_apply( GtkButton */*button*/, GtkWidget *dlg )
}
// complete the transaction
- sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
- _("Set text style"));
+ DocumentUndo::done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
+ _("Set text style"));
gtk_widget_set_sensitive (apply, FALSE);
sp_repr_css_attr_unref (css);
g_object_set_data (G_OBJECT (dlg), "blocked", GINT_TO_POINTER (FALSE));
@@ -734,7 +737,7 @@ sp_text_edit_dialog_read_selection ( GtkWidget *dlg,
gtk_text_buffer_set_text (tb, "", 0);
}
} // end of if (docontent)
- repr = SP_OBJECT_REPR (text);
+ repr = text->getRepr();
} else {
gtk_widget_set_sensitive (textw, FALSE);
diff --git a/src/dialogs/xml-tree.cpp b/src/dialogs/xml-tree.cpp
index bd442b887..c90cde490 100644
--- a/src/dialogs/xml-tree.cpp
+++ b/src/dialogs/xml-tree.cpp
@@ -7,6 +7,8 @@
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <goejendaagh@zonnet.nl>
* David Turner
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2006 Authors
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -40,6 +42,8 @@
#include "../widgets/sp-xmlview-content.h"
#include "../widgets/sp-xmlview-tree.h"
+using Inkscape::DocumentUndo;
+
#define MIN_ONSCREEN_DISTANCE 50
struct EditableDest {
@@ -679,9 +683,8 @@ void set_tree_document(SPDocument *document)
if (current_document) {
document_uri_set_connection = current_document->connectURISet(sigc::bind(sigc::ptr_fun(&on_document_uri_set), current_document));
- on_document_uri_set(SP_DOCUMENT_URI(current_document), current_document);
- set_tree_repr(sp_document_repr_root(current_document));
-
+ on_document_uri_set( current_document->getURI(), current_document );
+ set_tree_repr(current_document->getReprRoot());
} else {
set_tree_repr(NULL);
}
@@ -870,10 +873,10 @@ void after_tree_move(GtkCTree */*tree*/,
if (GTK_CTREE_ROW(node)->parent == new_parent &&
GTK_CTREE_ROW(node)->sibling == new_sibling)
{
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- _("Drag XML subtree"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ _("Drag XML subtree"));
} else {
- sp_document_cancel(current_document);
+ DocumentUndo::cancel(current_document);
}
}
@@ -1275,7 +1278,7 @@ void on_document_uri_set(gchar const */*uri*/, SPDocument *document)
{
gchar title[500];
sp_ui_dialog_title_string(Inkscape::Verb::get(SP_VERB_DIALOG_XML_EDITOR), title);
- gchar *t = g_strdup_printf("%s: %s", SP_DOCUMENT_NAME(document), title);
+ gchar *t = g_strdup_printf("%s: %s", document->getName(), title);
gtk_window_set_title(GTK_WINDOW(dlg), t);
g_free(t);
}
@@ -1362,7 +1365,7 @@ void cmd_new_element_node(GtkObject */*object*/, gpointer /*data*/)
gtk_main();
if (selected_repr != NULL && name.text) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(current_document);
+ Inkscape::XML::Document *xml_doc = current_document->getReprDoc();
Inkscape::XML::Node *new_repr;
new_repr = xml_doc->createElement(name.text);
Inkscape::GC::release(new_repr);
@@ -1371,8 +1374,8 @@ void cmd_new_element_node(GtkObject */*object*/, gpointer /*data*/)
set_tree_select(new_repr);
set_dt_select(new_repr);
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- _("Create new element node"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ _("Create new element node"));
}
} // end of cmd_new_element_node()
@@ -1383,12 +1386,12 @@ void cmd_new_text_node(GtkObject */*object*/, gpointer /*data*/)
{
g_assert(selected_repr != NULL);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(current_document);
+ Inkscape::XML::Document *xml_doc = current_document->getReprDoc();
Inkscape::XML::Node *text = xml_doc->createTextNode("");
selected_repr->appendChild(text);
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- _("Create new text node"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ _("Create new text node"));
set_tree_select(text);
set_dt_select(text);
@@ -1405,8 +1408,8 @@ void cmd_duplicate_node(GtkObject */*object*/, gpointer /*data*/)
Inkscape::XML::Node *dup = selected_repr->duplicate(parent->document());
parent->addChild(dup, selected_repr);
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- _("Duplicate node"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ _("Duplicate node"));
GtkCTreeNode *node = sp_xmlview_tree_get_repr_node(SP_XMLVIEW_TREE(tree), dup);
@@ -1422,8 +1425,8 @@ void cmd_delete_node(GtkObject */*object*/, gpointer /*data*/)
g_assert(selected_repr != NULL);
sp_repr_unparent(selected_repr);
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- Q_("nodeAsInXMLinHistoryDialog|Delete node"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ Q_("nodeAsInXMLinHistoryDialog|Delete node"));
}
@@ -1440,8 +1443,8 @@ void cmd_delete_attr(GtkObject */*object*/, gpointer /*data*/)
updated->updateRepr();
}
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- _("Delete attribute"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ _("Delete attribute"));
}
@@ -1469,8 +1472,8 @@ void cmd_set_attr(GtkObject */*object*/, gpointer /*data*/)
updated->updateRepr();
}
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- _("Change attribute"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ _("Change attribute"));
/* TODO: actually, the row won't have been created yet. why? */
gint row = sp_xmlview_attr_list_find_row_from_key(GTK_CLIST(attributes),
@@ -1499,8 +1502,8 @@ void cmd_raise_node(GtkObject */*object*/, gpointer /*data*/)
parent->changeOrder(selected_repr, ref);
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- _("Raise node"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ _("Raise node"));
set_tree_select(selected_repr);
set_dt_select(selected_repr);
@@ -1516,8 +1519,8 @@ void cmd_lower_node(GtkObject */*object*/, gpointer /*data*/)
parent->changeOrder(selected_repr, selected_repr->next());
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- _("Lower node"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ _("Lower node"));
set_tree_select(selected_repr);
set_dt_select(selected_repr);
@@ -1546,8 +1549,8 @@ void cmd_indent_node(GtkObject */*object*/, gpointer /*data*/)
parent->removeChild(repr);
prev->addChild(repr, ref);
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- _("Indent node"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ _("Indent node"));
set_tree_select(repr);
set_dt_select(repr);
@@ -1567,8 +1570,8 @@ void cmd_unindent_node(GtkObject */*object*/, gpointer /*data*/)
parent->removeChild(repr);
grandparent->addChild(repr, parent);
- sp_document_done(current_document, SP_VERB_DIALOG_XML_EDITOR,
- _("Unindent node"));
+ DocumentUndo::done(current_document, SP_VERB_DIALOG_XML_EDITOR,
+ _("Unindent node"));
set_tree_select(repr);
set_dt_select(repr);
diff --git a/src/display/canvas-grid.cpp b/src/display/canvas-grid.cpp
index 6c51acea8..86897baaa 100644
--- a/src/display/canvas-grid.cpp
+++ b/src/display/canvas-grid.cpp
@@ -3,6 +3,7 @@
*/
/* Copyright (C) Johan Engelen 2006-2007 <johan@shouraizou.nl>
* Copyright (C) Lauris Kaplinski 2000
+ * Abhishek Sharma
*/
/* As a general comment, I am not exactly proud of how things are done.
@@ -11,9 +12,10 @@
* Don't be shy to correct things.
*/
-#define INKSCAPE_CANVAS_GRID_C
-
#include "desktop.h"
+#include "sp-canvas-util.h"
+#include "util/mathfns.h"
+#include "display-forward.h"
#include "desktop-handles.h"
#include "display/cairo-utils.h"
#include "display/canvas-axonomgrid.h"
@@ -30,6 +32,8 @@
#include "util/mathfns.h"
#include "xml/node-event-vector.h"
+using Inkscape::DocumentUndo;
+
namespace Inkscape {
static gchar const *const grid_name[] = {
@@ -244,7 +248,7 @@ CanvasGrid::writeNewGridToRepr(Inkscape::XML::Node * repr, SPDocument * doc, Gri
// first create the child xml node, then hook it to repr. This order is important, to not set off listeners to repr before the new node is complete.
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *newnode;
newnode = xml_doc->createElement("inkscape:grid");
newnode->setAttribute("type", getSVGName(gridtype));
@@ -252,7 +256,7 @@ CanvasGrid::writeNewGridToRepr(Inkscape::XML::Node * repr, SPDocument * doc, Gri
repr->appendChild(newnode);
Inkscape::GC::release(newnode);
- sp_document_done(doc, SP_VERB_DIALOG_NAMEDVIEW, _("Create new grid"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_NAMEDVIEW, _("Create new grid"));
}
/*
diff --git a/src/display/nr-arena-item.cpp b/src/display/nr-arena-item.cpp
index c4c42b8b5..a2a959415 100644
--- a/src/display/nr-arena-item.cpp
+++ b/src/display/nr-arena-item.cpp
@@ -492,7 +492,6 @@ nr_arena_item_invoke_render (cairo_t *ct, NRArenaItem *item, NRRectL const *area
if (mask) {
cairo_mask(ct, mask->cobj());
// opacity of masked objects is handled by premultiplying the mask
-
} else {
// opacity of non-masked objects must be rendered explicitly
if (needs_opacity) {
diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp
index eae25c8cd..ca361e007 100644
--- a/src/display/nr-filter-image.cpp
+++ b/src/display/nr-filter-image.cpp
@@ -4,6 +4,7 @@
* Authors:
* Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
* Tavmjong Bah <tavmjong@free.fr>
+ * Abhishek Sharma
*
* Copyright (C) 2007 authors
*
@@ -69,13 +70,15 @@ void FilterImage::render_cairo(FilterSlot &slot)
// TODO: do not recreate the rendering tree every time
// TODO: the entire thing is a hack, we should give filter primitives an "update" method
// like the one for NRArenaItems
- sp_document_ensure_up_to_date(document);
+ document->ensureUpToDate();
+
NRArena* arena = NRArena::create();
Geom::OptRect optarea = SVGElem->getBounds(Geom::identity());
if (!optarea) return;
- unsigned const key = sp_item_display_key_new(1);
- NRArenaItem* ai = sp_item_invoke_show(SVGElem, arena, key, SP_ITEM_SHOW_DISPLAY);
+ unsigned const key = SPItem::display_key_new(1);
+ NRArenaItem* ai = SVGElem->invoke_show(arena, key, SP_ITEM_SHOW_DISPLAY);
+
if (!ai) {
g_warning("feImage renderer: error creating NRArenaItem for SVG Element");
nr_object_unref((NRObject *) arena);
@@ -113,7 +116,7 @@ void FilterImage::render_cairo(FilterSlot &slot)
NR_ARENA_ITEM_STATE_ALL,
NR_ARENA_ITEM_STATE_NONE);
nr_arena_item_invoke_render(ct, ai, &render_rect, NULL, NR_ARENA_ITEM_RENDER_NO_CACHE);
- sp_item_invoke_hide(SVGElem, key);
+ SVGElem->invoke_hide(key);
nr_object_unref((NRObject*) arena);
slot.set(_output, out);
@@ -135,7 +138,7 @@ void FilterImage::render_cairo(FilterSlot &slot)
if ( !g_file_test( fullname, G_FILE_TEST_EXISTS ) ) {
// Try to load from relative postion combined with document base
if( document ) {
- fullname = g_build_filename( document->base, feImageHref, NULL );
+ fullname = g_build_filename( document->getBase(), feImageHref, NULL );
}
}
if ( !g_file_test( fullname, G_FILE_TEST_EXISTS ) ) {
diff --git a/src/document-private.h b/src/document-private.h
index fa4754248..61e6bad67 100644
--- a/src/document-private.h
+++ b/src/document-private.h
@@ -1,11 +1,12 @@
-#ifndef __SP_DOCUMENT_PRIVATE_H__
-#define __SP_DOCUMENT_PRIVATE_H__
+#ifndef SEEN_SP_DOCUMENT_PRIVATE_H
+#define SEEN_SP_DOCUMENT_PRIVATE_H
/*
* Seldom needed document data
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -27,7 +28,7 @@
// XXX only for testing!
#include "console-output-undo-observer.h"
-#define SP_DOCUMENT_DEFS(d) ((SPObject *) SP_ROOT (SP_DOCUMENT_ROOT (d))->defs)
+#define SP_DOCUMENT_DEFS(d) ((SPObject *) SP_ROOT(d->getRoot())->defs)
namespace Inkscape {
namespace XML {
@@ -76,4 +77,4 @@ struct SPDocumentPrivate {
bool seeking;
};
-#endif
+#endif // SEEN_SP_DOCUMENT_PRIVATE_H
diff --git a/src/document-subset.cpp b/src/document-subset.cpp
index 6a7f8822c..e71b9bad5 100644
--- a/src/document-subset.cpp
+++ b/src/document-subset.cpp
@@ -3,6 +3,7 @@
* of nodes
*
* Copyright 2006 MenTaLguY <mental@rydia.net>
+ * Abhishek Sharma
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
diff --git a/src/document-undo.cpp b/src/document-undo.cpp
index e63fe8a52..1559dc5ba 100644
--- a/src/document-undo.cpp
+++ b/src/document-undo.cpp
@@ -1,11 +1,10 @@
-#define __SP_DOCUMENT_UNDO_C__
-
/** \file
* Undo/Redo stack implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* MenTaLguY <mental@rydia.net>
+ * Abhishek Sharma
*
* Copyright (C) 2007 MenTaLguY <mental@rydia.net>
* Copyright (C) 1999-2003 authors
@@ -23,8 +22,8 @@
* stack. Two methods exist to indicate that the given action is completed:
*
* \verbatim
- void sp_document_done (SPDocument *document);
- void sp_document_maybe_done (SPDocument *document, const unsigned char *key) \endverbatim
+ void sp_document_done( SPDocument *document );
+ void sp_document_maybe_done( SPDocument *document, const unsigned char *key ) \endverbatim
*
* Both move the recent action list into the undo stack and clear the
* list afterwards. While the first method does an unconditional push,
@@ -63,6 +62,7 @@
#include "xml/repr.h"
#include "document-private.h"
#include "inkscape.h"
+#include "document-undo.h"
#include "debug/event-tracker.h"
#include "debug/simple-event.h"
#include "debug/timestamp.h"
@@ -72,20 +72,8 @@
/*
* Undo & redo
*/
-/**
- * Set undo sensitivity.
- *
- * \note
- * Since undo sensitivity needs to be nested, setting undo sensitivity
- * should be done like this:
- *\verbatim
- bool saved = sp_document_get_undo_sensitive(document);
- sp_document_set_undo_sensitive(document, false);
- ... do stuff ...
- sp_document_set_undo_sensitive(document, saved); \endverbatim
- */
-void
-sp_document_set_undo_sensitive (SPDocument *doc, bool sensitive)
+
+void Inkscape::DocumentUndo::setUndoSensitive(SPDocument *doc, bool sensitive)
{
g_assert (doc != NULL);
g_assert (doc->priv != NULL);
@@ -112,20 +100,19 @@ sp_document_set_undo_sensitive (SPDocument *doc, bool sensitive)
* the saved bools in a stack. Perhaps this is why the above solution is better.
*/
-bool sp_document_get_undo_sensitive(SPDocument const *document) {
+bool Inkscape::DocumentUndo::getUndoSensitive(SPDocument const *document) {
g_assert(document != NULL);
g_assert(document->priv != NULL);
return document->priv->sensitive;
}
-void
-sp_document_done (SPDocument *doc, const unsigned int event_type, Glib::ustring event_description)
+void Inkscape::DocumentUndo::done(SPDocument *doc, const unsigned int event_type, Glib::ustring const &event_description)
{
- sp_document_maybe_done (doc, NULL, event_type, event_description);
+ maybeDone(doc, NULL, event_type, event_description);
}
-void sp_document_reset_key( Inkscape::Application * /*inkscape*/, SPDesktop * /*desktop*/, GtkObject *base )
+void Inkscape::DocumentUndo::resetKey( Inkscape::Application * /*inkscape*/, SPDesktop * /*desktop*/, GtkObject *base )
{
SPDocument *doc = reinterpret_cast<SPDocument *>(base);
doc->actionkey.clear();
@@ -163,9 +150,8 @@ public:
}
-void
-sp_document_maybe_done (SPDocument *doc, const gchar *key, const unsigned int event_type,
- Glib::ustring event_description)
+void Inkscape::DocumentUndo::maybeDone(SPDocument *doc, const gchar *key, const unsigned int event_type,
+ Glib::ustring const &event_description)
{
g_assert (doc != NULL);
g_assert (doc->priv != NULL);
@@ -178,9 +164,9 @@ sp_document_maybe_done (SPDocument *doc, const gchar *key, const unsigned int ev
doc->collectOrphans();
- sp_document_ensure_up_to_date (doc);
+ doc->ensureUpToDate();
- sp_document_clear_redo (doc);
+ DocumentUndo::clearRedo(doc);
Inkscape::XML::Event *log = sp_repr_coalesce_log (doc->priv->partial, sp_repr_commit_undoable (doc->rdoc));
doc->priv->partial = NULL;
@@ -214,8 +200,7 @@ sp_document_maybe_done (SPDocument *doc, const gchar *key, const unsigned int ev
doc->priv->commit_signal.emit();
}
-void
-sp_document_cancel (SPDocument *doc)
+void Inkscape::DocumentUndo::cancel(SPDocument *doc)
{
g_assert (doc != NULL);
g_assert (doc->priv != NULL);
@@ -246,8 +231,7 @@ static void finish_incomplete_transaction(SPDocument &doc) {
}
}
-gboolean
-sp_document_undo (SPDocument *doc)
+gboolean Inkscape::DocumentUndo::undo(SPDocument *doc)
{
using Inkscape::Debug::EventTracker;
using Inkscape::Debug::SimpleEvent;
@@ -292,8 +276,7 @@ sp_document_undo (SPDocument *doc)
return ret;
}
-gboolean
-sp_document_redo (SPDocument *doc)
+gboolean Inkscape::DocumentUndo::redo(SPDocument *doc)
{
using Inkscape::Debug::EventTracker;
using Inkscape::Debug::SimpleEvent;
@@ -338,8 +321,7 @@ sp_document_redo (SPDocument *doc)
return ret;
}
-void
-sp_document_clear_undo (SPDocument *doc)
+void Inkscape::DocumentUndo::clearUndo(SPDocument *doc)
{
if (doc->priv->undo)
doc->priv->undoStackObservers.notifyClearUndoEvent();
@@ -356,8 +338,7 @@ sp_document_clear_undo (SPDocument *doc)
}
}
-void
-sp_document_clear_redo (SPDocument *doc)
+void Inkscape::DocumentUndo::clearRedo(SPDocument *doc)
{
if (doc->priv->redo)
doc->priv->undoStackObservers.notifyClearRedoEvent();
diff --git a/src/document-undo.h b/src/document-undo.h
new file mode 100644
index 000000000..9be260fa2
--- /dev/null
+++ b/src/document-undo.h
@@ -0,0 +1,57 @@
+#ifndef SEEN_SP_DOCUMENT_UNDO_H
+#define SEEN_SP_DOCUMENT_UNDO_H
+
+
+namespace Inkscape {
+
+class DocumentUndo
+{
+public:
+
+ /**
+ * Set undo sensitivity.
+ *
+ * \note
+ * Since undo sensitivity needs to be nested, setting undo sensitivity
+ * should be done like this:
+ *\verbatim
+ bool saved = sp_document_get_undo_sensitive(document);
+ sp_document_set_undo_sensitive(document, false);
+ ... do stuff ...
+ sp_document_set_undo_sensitive(document, saved); \endverbatim
+ */
+ static void setUndoSensitive(SPDocument *doc, bool sensitive);
+
+ static bool getUndoSensitive(SPDocument const *document);
+
+ static void clearUndo(SPDocument *document);
+
+ static void clearRedo(SPDocument *document);
+
+ static void done(SPDocument *document, unsigned int event_type, Glib::ustring const &event_description);
+
+ static void maybeDone(SPDocument *document, const gchar *keyconst, unsigned int event_type, Glib::ustring const &event_description);
+
+ static void resetKey(Inkscape::Application *inkscape, SPDesktop *desktop, GtkObject *base);
+
+ static void cancel(SPDocument *document);
+
+ static gboolean undo(SPDocument *document);
+
+ static gboolean redo(SPDocument *document);
+};
+
+} // namespace Inkscape
+
+#endif // SEEN_SP_DOCUMENT_UNDO_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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/document.cpp b/src/document.cpp
index 677883112..a473daa3c 100644
--- a/src/document.cpp
+++ b/src/document.cpp
@@ -1,5 +1,3 @@
-#define __SP_DOCUMENT_C__
-
/** \file
* SPDocument manipulation
*
@@ -7,6 +5,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* MenTaLguY <mental@rydia.net>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2005 MenTaLguY
* Copyright (C) 1999-2002 Lauris Kaplinski
@@ -61,6 +61,8 @@
#include "xml/repr.h"
#include "xml/rebase-hrefs.h"
+using Inkscape::DocumentUndo;
+
// Higher number means lower priority.
#define SP_DOCUMENT_UPDATE_PRIORITY (G_PRIORITY_HIGH_IDLE - 2)
@@ -148,8 +150,8 @@ SPDocument::~SPDocument() {
priv->partial = NULL;
}
- sp_document_clear_redo(this);
- sp_document_clear_undo(this);
+ DocumentUndo::clearRedo(this);
+ DocumentUndo::clearUndo(this);
if (root) {
root->releaseReferences();
@@ -198,7 +200,7 @@ SPDocument::~SPDocument() {
if (oldSignalsConnected) {
g_signal_handlers_disconnect_by_func(G_OBJECT(INKSCAPE),
- reinterpret_cast<gpointer>(sp_document_reset_key),
+ reinterpret_cast<gpointer>(DocumentUndo::resetKey),
static_cast<gpointer>(this));
} else {
_selection_changed_connection.disconnect();
@@ -239,12 +241,13 @@ SPDocument::setCurrentPersp3D(Persp3D * const persp) {
//current_persp3d_impl = persp->perspective_impl;
}
-void
-SPDocument::getPerspectivesInDefs(std::vector<Persp3D*> &list) {
+void SPDocument::getPerspectivesInDefs(std::vector<Persp3D*> &list) const
+{
SPDefs *defs = SP_ROOT(this->root)->defs;
- for (SPObject *i = sp_object_first_child(SP_OBJECT(defs)); i != NULL; i = SP_OBJECT_NEXT(i) ) {
- if (SP_IS_PERSP3D(i))
+ for (SPObject *i = defs->firstChild(); i; i = i->getNext() ) {
+ if (SP_IS_PERSP3D(i)) {
list.push_back(SP_PERSP3D(i));
+ }
}
}
@@ -288,20 +291,16 @@ void SPDocument::reset_key (void */*dummy*/)
actionkey.clear();
}
-SPDocument *
-sp_document_create(Inkscape::XML::Document *rdoc,
- gchar const *uri,
- gchar const *base,
- gchar const *name,
- unsigned int keepalive)
+SPDocument *SPDocument::createDoc(Inkscape::XML::Document *rdoc,
+ gchar const *uri,
+ gchar const *base,
+ gchar const *name,
+ unsigned int keepalive)
{
- SPDocument *document;
- Inkscape::XML::Node *rroot;
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-
- rroot = rdoc->root();
+ SPDocument *document = new SPDocument();
- document = new SPDocument();
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ Inkscape::XML::Node *rroot = rdoc->root();
document->keepalive = keepalive;
@@ -318,10 +317,11 @@ sp_document_create(Inkscape::XML::Document *rdoc,
// base is simply the part of the path before filename; e.g. when running "inkscape ../file.svg" the base is "../"
// which is why we use g_get_current_dir() in calculating the abs path above
//This is NULL for a new document
- if (base)
+ if (base) {
document->base = g_strdup(base);
- else
+ } else {
document->base = NULL;
+ }
document->name = g_strdup(name);
document->root = sp_object_repr_build_tree(document, rroot);
@@ -413,13 +413,13 @@ sp_document_create(Inkscape::XML::Document *rdoc,
document->setCurrentPersp3DImpl(persp_impl);
}
- sp_document_set_undo_sensitive(document, true);
+ DocumentUndo::setUndoSensitive(document, true);
// reset undo key when selection changes, so that same-key actions on different objects are not coalesced
g_signal_connect(G_OBJECT(INKSCAPE), "change_selection",
- G_CALLBACK(sp_document_reset_key), document);
+ G_CALLBACK(DocumentUndo::resetKey), document);
g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop",
- G_CALLBACK(sp_document_reset_key), document);
+ G_CALLBACK(DocumentUndo::resetKey), document);
document->oldSignalsConnected = true;
return document;
@@ -429,8 +429,7 @@ sp_document_create(Inkscape::XML::Document *rdoc,
* Fetches document from URI, or creates new, if NULL; public document
* appears in document list.
*/
-SPDocument *
-sp_document_new(gchar const *uri, unsigned int keepalive, bool make_new)
+SPDocument *SPDocument::createNewDoc(gchar const *uri, unsigned int keepalive, bool make_new)
{
SPDocument *doc;
Inkscape::XML::Document *rdoc;
@@ -472,7 +471,7 @@ sp_document_new(gchar const *uri, unsigned int keepalive, bool make_new)
//# These should be set by now
g_assert(name);
- doc = sp_document_create(rdoc, uri, base, name, keepalive);
+ doc = createDoc(rdoc, uri, base, name, keepalive);
g_free(base);
g_free(name);
@@ -480,8 +479,7 @@ sp_document_new(gchar const *uri, unsigned int keepalive, bool make_new)
return doc;
}
-SPDocument *
-sp_document_new_from_mem(gchar const *buffer, gint length, unsigned int keepalive)
+SPDocument *SPDocument::createNewDocFromMem(gchar const *buffer, gint length, unsigned int keepalive)
{
SPDocument *doc;
Inkscape::XML::Document *rdoc;
@@ -500,44 +498,38 @@ sp_document_new_from_mem(gchar const *buffer, gint length, unsigned int keepaliv
name = g_strdup_printf(_("Memory document %d"), ++doc_count);
- doc = sp_document_create(rdoc, NULL, NULL, name, keepalive);
+ doc = createDoc(rdoc, NULL, NULL, name, keepalive);
return doc;
}
-SPDocument *
-sp_document_ref(SPDocument *doc)
+SPDocument *SPDocument::doRef()
{
- g_return_val_if_fail(doc != NULL, NULL);
- Inkscape::GC::anchor(doc);
- return doc;
+ Inkscape::GC::anchor(this);
+ return this;
}
-SPDocument *
-sp_document_unref(SPDocument *doc)
+SPDocument *SPDocument::doUnref()
{
- g_return_val_if_fail(doc != NULL, NULL);
- Inkscape::GC::release(doc);
+ Inkscape::GC::release(this);
return NULL;
}
-gdouble sp_document_width(SPDocument *document)
+gdouble SPDocument::getWidth() const
{
- g_return_val_if_fail(document != NULL, 0.0);
- g_return_val_if_fail(document->priv != NULL, 0.0);
- g_return_val_if_fail(document->root != NULL, 0.0);
+ g_return_val_if_fail(this->priv != NULL, 0.0);
+ g_return_val_if_fail(this->root != NULL, 0.0);
- SPRoot *root = SP_ROOT(document->root);
+ SPRoot *root = SP_ROOT(this->root);
if (root->width.unit == SVGLength::PERCENT && root->viewBox_set)
return root->viewBox.x1 - root->viewBox.x0;
return root->width.computed;
}
-void
-sp_document_set_width (SPDocument *document, gdouble width, const SPUnit *unit)
+void SPDocument::setWidth(gdouble width, const SPUnit *unit)
{
- SPRoot *root = SP_ROOT(document->root);
+ SPRoot *root = SP_ROOT(this->root);
if (root->width.unit == SVGLength::PERCENT && root->viewBox_set) { // set to viewBox=
root->viewBox.x1 = root->viewBox.x0 + sp_units_get_pixels (width, *unit);
@@ -561,9 +553,9 @@ sp_document_set_width (SPDocument *document, gdouble width, const SPUnit *unit)
SP_OBJECT (root)->updateRepr();
}
-void sp_document_set_height (SPDocument * document, gdouble height, const SPUnit *unit)
+void SPDocument::setHeight(gdouble height, const SPUnit *unit)
{
- SPRoot *root = SP_ROOT(document->root);
+ SPRoot *root = SP_ROOT(this->root);
if (root->height.unit == SVGLength::PERCENT && root->viewBox_set) { // set to viewBox=
root->viewBox.y1 = root->viewBox.y0 + sp_units_get_pixels (height, *unit);
@@ -587,56 +579,21 @@ void sp_document_set_height (SPDocument * document, gdouble height, const SPUnit
SP_OBJECT (root)->updateRepr();
}
-gdouble sp_document_height(SPDocument *document)
+gdouble SPDocument::getHeight() const
{
- g_return_val_if_fail(document != NULL, 0.0);
- g_return_val_if_fail(document->priv != NULL, 0.0);
- g_return_val_if_fail(document->root != NULL, 0.0);
+ g_return_val_if_fail(this->priv != NULL, 0.0);
+ g_return_val_if_fail(this->root != NULL, 0.0);
- SPRoot *root = SP_ROOT(document->root);
+ SPRoot *root = SP_ROOT(this->root);
if (root->height.unit == SVGLength::PERCENT && root->viewBox_set)
return root->viewBox.y1 - root->viewBox.y0;
return root->height.computed;
}
-Geom::Point sp_document_dimensions(SPDocument *doc)
-{
- return Geom::Point(sp_document_width(doc), sp_document_height(doc));
-}
-
-/**
- * Gets page fitting margin information from the namedview node in the XML.
- * \param nv_repr reference to this document's namedview
- * \param key the same key used by the RegisteredScalarUnit in
- * ui/widget/page-sizer.cpp
- * \param margin_units units for the margin
- * \param return_units units to return the result in
- * \param width width in px (for percentage margins)
- * \param height height in px (for percentage margins)
- * \param use_width true if the this key is left or right margins, false
- * otherwise. Used for percentage margins.
- * \return the margin size in px, else 0.0 if anything is invalid.
- */
-static double getMarginLength(Inkscape::XML::Node * const nv_repr,
- gchar const * const key,
- SPUnit const * const margin_units,
- SPUnit const * const return_units,
- double const width,
- double const height,
- bool const use_width)
+Geom::Point SPDocument::getDimensions() const
{
- double value;
- if (!sp_repr_get_double (nv_repr, key, &value)) {
- return 0.0;
- }
- if (margin_units == &sp_unit_get_by_id (SP_UNIT_PERCENT)) {
- return (use_width)? width * value : height * value;
- }
- if (!sp_convert_distance (&value, margin_units, return_units)) {
- return 0.0;
- }
- return value;
+ return Geom::Point(getWidth(), getHeight());
}
/**
@@ -653,7 +610,7 @@ void SPDocument::fitToRect(Geom::Rect const &rect, bool with_margins)
double const w = rect.width();
double const h = rect.height();
- double const old_height = sp_document_height(this);
+ double const old_height = getHeight();
SPUnit const &px(sp_unit_get_by_id(SP_UNIT_PX));
/* in px */
@@ -665,9 +622,8 @@ void SPDocument::fitToRect(Geom::Rect const &rect, bool with_margins)
SPNamedView *nv = sp_document_namedview(this, 0);
if (with_margins && nv) {
- Inkscape::XML::Node *nv_repr = SP_OBJECT_REPR (nv);
- if (nv_repr != NULL) {
- gchar const * const units_abbr = nv_repr->attribute("units");
+ if (nv != NULL) {
+ gchar const * const units_abbr = nv->getAttribute("units");
SPUnit const *margin_units = NULL;
if (units_abbr != NULL) {
margin_units = sp_unit_get_by_abbreviation(units_abbr);
@@ -675,14 +631,10 @@ void SPDocument::fitToRect(Geom::Rect const &rect, bool with_margins)
if (margin_units == NULL) {
margin_units = &px;
}
- margin_top = getMarginLength(nv_repr, "fit-margin-top",
- margin_units, &px, w, h, false);
- margin_left = getMarginLength(nv_repr, "fit-margin-left",
- margin_units, &px, w, h, true);
- margin_right = getMarginLength(nv_repr, "fit-margin-right",
- margin_units, &px, w, h, true);
- margin_bottom = getMarginLength(nv_repr, "fit-margin-bottom",
- margin_units, &px, w, h, false);
+ margin_top = nv->getMarginLength("fit-margin-top",margin_units, &px, w, h, false);
+ margin_top = nv->getMarginLength("fit-margin-left",margin_units, &px, w, h, true);
+ margin_top = nv->getMarginLength("fit-margin-right",margin_units, &px, w, h, true);
+ margin_top = nv->getMarginLength("fit-margin-bottom",margin_units, &px, w, h, false);
}
}
@@ -691,8 +643,8 @@ void SPDocument::fitToRect(Geom::Rect const &rect, bool with_margins)
rect.max() + Geom::Point(margin_right, margin_top));
- sp_document_set_width(this, rect_with_margins.width(), &px);
- sp_document_set_height(this, rect_with_margins.height(), &px);
+ setWidth(rect_with_margins.width(), &px);
+ setHeight(rect_with_margins.height(), &px);
Geom::Translate const tr(
Geom::Point(0, old_height - rect_with_margins.height())
@@ -708,14 +660,22 @@ void SPDocument::fitToRect(Geom::Rect const &rect, bool with_margins)
}
}
-static void
-do_change_uri(SPDocument *const document, gchar const *const filename, bool const rebase)
+void SPDocument::setBase( gchar const* base )
{
- g_return_if_fail(document != NULL);
+ if (this->base) {
+ g_free(this->base);
+ this->base = 0;
+ }
+ if (base) {
+ this->base = g_strdup(base);
+ }
+}
- gchar *new_base;
- gchar *new_name;
- gchar *new_uri;
+void SPDocument::do_change_uri(gchar const *const filename, bool const rebase)
+{
+ gchar *new_base = 0;
+ gchar *new_name = 0;
+ gchar *new_uri = 0;
if (filename) {
#ifndef WIN32
@@ -730,32 +690,32 @@ do_change_uri(SPDocument *const document, gchar const *const filename, bool cons
} else {
new_uri = g_strdup_printf(_("Unnamed document %d"), ++doc_count);
new_base = NULL;
- new_name = g_strdup(document->uri);
+ new_name = g_strdup(this->uri);
}
// Update saveable repr attributes.
- Inkscape::XML::Node *repr = sp_document_repr_root(document);
+ Inkscape::XML::Node *repr = getReprRoot();
// Changing uri in the document repr must not be not undoable.
- bool const saved = sp_document_get_undo_sensitive(document);
- sp_document_set_undo_sensitive(document, false);
+ bool const saved = DocumentUndo::getUndoSensitive(this);
+ DocumentUndo::setUndoSensitive(this, false);
if (rebase) {
- Inkscape::XML::rebase_hrefs(document, new_base, true);
+ Inkscape::XML::rebase_hrefs(this, new_base, true);
}
- repr->setAttribute("sodipodi:docname", document->name);
- sp_document_set_undo_sensitive(document, saved);
+ repr->setAttribute("sodipodi:docname", this->name);
+ DocumentUndo::setUndoSensitive(this, saved);
- g_free(document->name);
- g_free(document->base);
- g_free(document->uri);
- document->name = new_name;
- document->base = new_base;
- document->uri = new_uri;
+ g_free(this->name);
+ g_free(this->base);
+ g_free(this->uri);
+ this->name = new_name;
+ this->base = new_base;
+ this->uri = new_uri;
- document->priv->uri_set_signal.emit(document->uri);
+ this->priv->uri_set_signal.emit(this->uri);
}
/**
@@ -765,11 +725,9 @@ do_change_uri(SPDocument *const document, gchar const *const filename, bool cons
*
* \see sp_document_change_uri_and_hrefs
*/
-void sp_document_set_uri(SPDocument *document, gchar const *filename)
+void SPDocument::setUri(gchar const *filename)
{
- g_return_if_fail(document != NULL);
-
- do_change_uri(document, filename, false);
+ do_change_uri(filename, false);
}
/**
@@ -778,19 +736,14 @@ void sp_document_set_uri(SPDocument *document, gchar const *filename)
*
* \see sp_document_set_uri
*/
-void sp_document_change_uri_and_hrefs(SPDocument *document, gchar const *filename)
+void SPDocument::changeUriAndHrefs(gchar const *filename)
{
- g_return_if_fail(document != NULL);
-
- do_change_uri(document, filename, true);
+ do_change_uri(filename, true);
}
-void
-sp_document_resized_signal_emit(SPDocument *doc, gdouble width, gdouble height)
+void SPDocument::emitResizedSignal(gdouble width, gdouble height)
{
- g_return_if_fail(doc != NULL);
-
- doc->priv->resized_signal.emit(width, height);
+ this->priv->resized_signal.emit(width, height);
}
sigc::connection SPDocument::connectModified(SPDocument::ModifiedSignal::slot_type slot)
@@ -890,7 +843,8 @@ SPDocument::removeUndoObserver(Inkscape::UndoStackObserver& observer)
this->priv->undoStackObservers.remove(observer);
}
-SPObject *SPDocument::getObjectById(gchar const *id) {
+SPObject *SPDocument::getObjectById(gchar const *id) const
+{
g_return_val_if_fail(id != NULL, NULL);
GQuark idq = g_quark_from_string(id);
@@ -903,7 +857,8 @@ sigc::connection SPDocument::connectIdChanged(gchar const *id,
return priv->id_changed_signals[g_quark_from_string(id)].connect(slot);
}
-void SPDocument::bindObjectToRepr(Inkscape::XML::Node *repr, SPObject *object) {
+void SPDocument::bindObjectToRepr(Inkscape::XML::Node *repr, SPObject *object)
+{
if (object) {
g_assert(g_hash_table_lookup(priv->reprdef, repr) == NULL);
g_hash_table_insert(priv->reprdef, repr, object);
@@ -913,12 +868,14 @@ void SPDocument::bindObjectToRepr(Inkscape::XML::Node *repr, SPObject *object) {
}
}
-SPObject *SPDocument::getObjectByRepr(Inkscape::XML::Node *repr) {
+SPObject *SPDocument::getObjectByRepr(Inkscape::XML::Node *repr) const
+{
g_return_val_if_fail(repr != NULL, NULL);
return (SPObject*)g_hash_table_lookup(priv->reprdef, repr);
}
-Glib::ustring SPDocument::getLanguage() {
+Glib::ustring SPDocument::getLanguage() const
+{
gchar const *document_language = rdf_get_work_entity(this, rdf_find_entity("language"));
if (document_language) {
while (isspace(*document_language))
@@ -949,16 +906,15 @@ Glib::ustring SPDocument::getLanguage() {
/* Object modification root handler */
-void
-sp_document_request_modified(SPDocument *doc)
+void SPDocument::requestModified()
{
- if (!doc->modified_id) {
- doc->modified_id = g_idle_add_full(SP_DOCUMENT_UPDATE_PRIORITY,
- sp_document_idle_handler, doc, NULL);
+ if (!modified_id) {
+ modified_id = g_idle_add_full(SP_DOCUMENT_UPDATE_PRIORITY,
+ sp_document_idle_handler, this, NULL);
}
- if (!doc->rerouting_handler_id) {
- doc->rerouting_handler_id = g_idle_add_full(SP_DOCUMENT_REROUTING_PRIORITY,
- sp_document_rerouting_handler, doc, NULL);
+ if (!rerouting_handler_id) {
+ rerouting_handler_id = g_idle_add_full(SP_DOCUMENT_REROUTING_PRIORITY,
+ sp_document_rerouting_handler, this, NULL);
}
}
@@ -996,12 +952,12 @@ SPDocument::_updateDocument()
SPItemCtx ctx;
sp_document_setup_viewport (this, &ctx);
- bool saved = sp_document_get_undo_sensitive(this);
- sp_document_set_undo_sensitive(this, false);
+ bool saved = DocumentUndo::getUndoSensitive(this);
+ DocumentUndo::setUndoSensitive(this, false);
this->root->updateDisplay((SPCtx *)&ctx, 0);
- sp_document_set_undo_sensitive(this, saved);
+ DocumentUndo::setUndoSensitive(this, saved);
}
this->_emitModified();
}
@@ -1017,8 +973,7 @@ SPDocument::_updateDocument()
* more than 32 iterations. So we bail out if we hit 32 iterations,
* since this typically indicates we're stuck in an update loop.
*/
-gint
-sp_document_ensure_up_to_date(SPDocument *doc)
+gint SPDocument::ensureUpToDate()
{
// Bring the document up-to-date, specifically via the following:
// 1a) Process all document updates.
@@ -1027,9 +982,9 @@ sp_document_ensure_up_to_date(SPDocument *doc)
int counter = 32;
for (unsigned int pass = 1; pass <= 2; ++pass) {
// Process document updates.
- while (!doc->_updateDocument()) {
+ while (!_updateDocument()) {
if (counter == 0) {
- g_warning("More than 32 iteration while updating document '%s'", doc->uri);
+ g_warning("More than 32 iteration while updating document '%s'", uri);
break;
}
counter--;
@@ -1043,19 +998,19 @@ sp_document_ensure_up_to_date(SPDocument *doc)
// changed objects and provide new routings. This may cause some objects
// to be modified, hence the second update pass.
if (pass == 1) {
- doc->router->processTransaction();
+ router->processTransaction();
}
}
- if (doc->modified_id) {
- /* Remove handler */
- g_source_remove(doc->modified_id);
- doc->modified_id = 0;
+ if (modified_id) {
+ // Remove handler
+ g_source_remove(modified_id);
+ modified_id = 0;
}
- if (doc->rerouting_handler_id) {
- /* Remove handler */
- g_source_remove(doc->rerouting_handler_id);
- doc->rerouting_handler_id = 0;
+ if (rerouting_handler_id) {
+ // Remove handler
+ g_source_remove(rerouting_handler_id);
+ rerouting_handler_id = 0;
}
return counter>0;
}
@@ -1109,17 +1064,16 @@ static GSList *find_items_in_area(GSList *s, SPGroup *group, unsigned int dkey,
{
g_return_val_if_fail(SP_IS_GROUP(group), s);
- for (SPObject *o = sp_object_first_child(SP_OBJECT(group)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
- if (!SP_IS_ITEM(o)) {
- continue;
- }
- if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER ) {
- s = find_items_in_area(s, SP_GROUP(o), dkey, area, test);
- } else {
- SPItem *child = SP_ITEM(o);
- Geom::OptRect box = sp_item_bbox_desktop(child);
- if ( box && test(area, *box) && (take_insensitive || child->isVisibleAndUnlocked(dkey))) {
- s = g_slist_append(s, child);
+ for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) {
+ if ( SP_IS_ITEM(o) ) {
+ if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER ) {
+ s = find_items_in_area(s, SP_GROUP(o), dkey, area, test);
+ } else {
+ SPItem *child = SP_ITEM(o);
+ Geom::OptRect box = child->getBboxDesktop();
+ if ( box && test(area, *box) && (take_insensitive || child->isVisibleAndUnlocked(dkey))) {
+ s = g_slist_append(s, child);
+ }
}
}
}
@@ -1132,48 +1086,45 @@ Returns true if an item is among the descendants of group (recursively).
*/
bool item_is_in_group(SPItem *item, SPGroup *group)
{
- for (SPObject *o = sp_object_first_child(SP_OBJECT(group)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
- if (!SP_IS_ITEM(o)) continue;
- if (SP_ITEM(o) == item)
- return true;
- if (SP_IS_GROUP(o))
- if (item_is_in_group(item, SP_GROUP(o)))
- return true;
+ bool inGroup = false;
+ for ( SPObject *o = group->firstChild() ; o && !inGroup; o = o->getNext() ) {
+ if ( SP_IS_ITEM(o) ) {
+ if (SP_ITEM(o) == item) {
+ inGroup = true;
+ } else if ( SP_IS_GROUP(o) ) {
+ inGroup = item_is_in_group(item, SP_GROUP(o));
+ }
+ }
}
- return false;
+ return inGroup;
}
-/**
-Returns the bottommost item from the list which is at the point, or NULL if none.
-*/
-SPItem*
-sp_document_item_from_list_at_point_bottom(unsigned int dkey, SPGroup *group, GSList const *list,
- Geom::Point const p, bool take_insensitive)
+SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *group, GSList const *list,Geom::Point const p, bool take_insensitive)
{
g_return_val_if_fail(group, NULL);
+ SPItem *bottomMost = 0;
+
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0);
- for (SPObject *o = sp_object_first_child(SP_OBJECT(group)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
-
- if (!SP_IS_ITEM(o)) continue;
-
- SPItem *item = SP_ITEM(o);
- NRArenaItem *arenaitem = sp_item_get_arenaitem(item, dkey);
- if (arenaitem && nr_arena_item_invoke_pick(arenaitem, p, delta, 1) != NULL
- && (take_insensitive || item->isVisibleAndUnlocked(dkey))) {
- if (g_slist_find((GSList *) list, item) != NULL)
- return item;
- }
+ for ( SPObject *o = group->firstChild() ; o && !bottomMost; o = o->getNext() ) {
+ if ( SP_IS_ITEM(o) ) {
+ SPItem *item = SP_ITEM(o);
+ NRArenaItem *arenaitem = item->get_arenaitem(dkey);
+ if (arenaitem && nr_arena_item_invoke_pick(arenaitem, p, delta, 1) != NULL
+ && (take_insensitive || item->isVisibleAndUnlocked(dkey))) {
+ if (g_slist_find((GSList *) list, item) != NULL) {
+ bottomMost = item;
+ }
+ }
- if (SP_IS_GROUP(o)) {
- SPItem *found = sp_document_item_from_list_at_point_bottom(dkey, SP_GROUP(o), list, p, take_insensitive);
- if (found)
- return found;
+ if ( !bottomMost && SP_IS_GROUP(o) ) {
+ // return null if not found:
+ bottomMost = getItemFromListAtPointBottom(dkey, SP_GROUP(o), list, p, take_insensitive);
+ }
}
-
}
- return NULL;
+ return bottomMost;
}
/**
@@ -1184,18 +1135,21 @@ items. If upto != NULL, then if item upto is encountered (at any level), stops s
upwards in z-order and returns what it has found so far (i.e. the found item is
guaranteed to be lower than upto).
*/
-SPItem*
-find_item_at_point(unsigned int dkey, SPGroup *group, Geom::Point const p, gboolean into_groups, bool take_insensitive = false, SPItem *upto = NULL)
+SPItem *find_item_at_point(unsigned int dkey, SPGroup *group, Geom::Point const p, gboolean into_groups, bool take_insensitive = false, SPItem *upto = NULL)
{
- SPItem *seen = NULL, *newseen = NULL;
+ SPItem *seen = NULL;
+ SPItem *newseen = NULL;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0);
- for (SPObject *o = sp_object_first_child(SP_OBJECT(group)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
- if (!SP_IS_ITEM(o)) continue;
+ for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) {
+ if (!SP_IS_ITEM(o)) {
+ continue;
+ }
- if (upto && SP_ITEM(o) == upto)
+ if (upto && SP_ITEM(o) == upto) {
break;
+ }
if (SP_IS_GROUP(o) && (SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) {
// if nothing found yet, recurse into the group
@@ -1205,12 +1159,12 @@ find_item_at_point(unsigned int dkey, SPGroup *group, Geom::Point const p, gbool
newseen = NULL;
}
- if (item_is_in_group(upto, SP_GROUP(o)))
+ if (item_is_in_group(upto, SP_GROUP(o))) {
break;
-
+ }
} else {
SPItem *child = SP_ITEM(o);
- NRArenaItem *arenaitem = sp_item_get_arenaitem(child, dkey);
+ NRArenaItem *arenaitem = child->get_arenaitem(dkey);
// seen remembers the last (topmost) of items pickable at this point
if (arenaitem && nr_arena_item_invoke_pick(arenaitem, p, delta, 1) != NULL
@@ -1226,15 +1180,16 @@ find_item_at_point(unsigned int dkey, SPGroup *group, Geom::Point const p, gbool
Returns the topmost non-layer group from the descendants of group which is at point
p, or NULL if none. Recurses into layers but not into groups.
*/
-SPItem*
-find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Point const p)
+SPItem *find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Point const p)
{
SPItem *seen = NULL;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0);
- for (SPObject *o = sp_object_first_child(SP_OBJECT(group)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
- if (!SP_IS_ITEM(o)) continue;
+ for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) {
+ if (!SP_IS_ITEM(o)) {
+ continue;
+ }
if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER) {
SPItem *newseen = find_group_at_point(dkey, SP_GROUP(o), p);
if (newseen) {
@@ -1243,7 +1198,7 @@ find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Point const p)
}
if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) != SPGroup::LAYER ) {
SPItem *child = SP_ITEM(o);
- NRArenaItem *arenaitem = sp_item_get_arenaitem(child, dkey);
+ NRArenaItem *arenaitem = child->get_arenaitem(dkey);
// seen remembers the last (topmost) of groups pickable at this point
if (arenaitem && nr_arena_item_invoke_pick(arenaitem, p, delta, 1) != NULL) {
@@ -1260,13 +1215,11 @@ find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Point const p)
* Assumes box is normalized (and g_asserts it!)
*
*/
-
-GSList *sp_document_items_in_box(SPDocument *document, unsigned int dkey, Geom::Rect const &box)
+GSList *SPDocument::getItemsInBox(unsigned int dkey, Geom::Rect const &box) const
{
- g_return_val_if_fail(document != NULL, NULL);
- g_return_val_if_fail(document->priv != NULL, NULL);
+ g_return_val_if_fail(this->priv != NULL, NULL);
- return find_items_in_area(NULL, SP_GROUP(document->root), dkey, box, is_within);
+ return find_items_in_area(NULL, SP_GROUP(this->root), dkey, box, is_within);
}
/*
@@ -1276,16 +1229,14 @@ GSList *sp_document_items_in_box(SPDocument *document, unsigned int dkey, Geom::
*
*/
-GSList *sp_document_partial_items_in_box(SPDocument *document, unsigned int dkey, Geom::Rect const &box)
+GSList *SPDocument::getItemsPartiallyInBox(unsigned int dkey, Geom::Rect const &box) const
{
- g_return_val_if_fail(document != NULL, NULL);
- g_return_val_if_fail(document->priv != NULL, NULL);
+ g_return_val_if_fail(this->priv != NULL, NULL);
- return find_items_in_area(NULL, SP_GROUP(document->root), dkey, box, overlaps);
+ return find_items_in_area(NULL, SP_GROUP(this->root), dkey, box, overlaps);
}
-GSList *
-sp_document_items_at_points(SPDocument *document, unsigned const key, std::vector<Geom::Point> points)
+GSList *SPDocument::getItemsAtPoints(unsigned const key, std::vector<Geom::Point> points) const
{
GSList *items = NULL;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -1297,7 +1248,7 @@ sp_document_items_at_points(SPDocument *document, unsigned const key, std::vecto
prefs->setDouble("/options/cursortolerance/value", 0.25);
for(unsigned int i = 0; i < points.size(); i++) {
- SPItem *item = sp_document_item_at_point(document, key, points[i],
+ SPItem *item = getItemAtPoint(key, points[i],
false, NULL);
if (item && !g_slist_find(items, item))
items = g_slist_prepend (items, item);
@@ -1309,95 +1260,86 @@ sp_document_items_at_points(SPDocument *document, unsigned const key, std::vecto
return items;
}
-SPItem *
-sp_document_item_at_point(SPDocument *document, unsigned const key, Geom::Point const p,
- gboolean const into_groups, SPItem *upto)
+SPItem *SPDocument::getItemAtPoint( unsigned const key, Geom::Point const p,
+ gboolean const into_groups, SPItem *upto) const
{
- g_return_val_if_fail(document != NULL, NULL);
- g_return_val_if_fail(document->priv != NULL, NULL);
+ g_return_val_if_fail(this->priv != NULL, NULL);
- return find_item_at_point(key, SP_GROUP(document->root), p, into_groups, false, upto);
+ return find_item_at_point(key, SP_GROUP(this->root), p, into_groups, false, upto);
}
-SPItem*
-sp_document_group_at_point(SPDocument *document, unsigned int key, Geom::Point const p)
+SPItem *SPDocument::getGroupAtPoint(unsigned int key, Geom::Point const p) const
{
- g_return_val_if_fail(document != NULL, NULL);
- g_return_val_if_fail(document->priv != NULL, NULL);
+ g_return_val_if_fail(this->priv != NULL, NULL);
- return find_group_at_point(key, SP_GROUP(document->root), p);
+ return find_group_at_point(key, SP_GROUP(this->root), p);
}
-/* Resource management */
+// Resource management
-gboolean
-sp_document_add_resource(SPDocument *document, gchar const *key, SPObject *object)
+bool SPDocument::addResource(gchar const *key, SPObject *object)
{
- GSList *rlist;
- GQuark q = g_quark_from_string(key);
+ g_return_val_if_fail(key != NULL, false);
+ g_return_val_if_fail(*key != '\0', false);
+ g_return_val_if_fail(object != NULL, false);
+ g_return_val_if_fail(SP_IS_OBJECT(object), false);
- g_return_val_if_fail(document != NULL, FALSE);
- g_return_val_if_fail(key != NULL, FALSE);
- g_return_val_if_fail(*key != '\0', FALSE);
- g_return_val_if_fail(object != NULL, FALSE);
- g_return_val_if_fail(SP_IS_OBJECT(object), FALSE);
+ bool result = false;
- if (SP_OBJECT_IS_CLONED(object))
- return FALSE;
+ if ( !object->cloned ) {
+ GSList *rlist = (GSList*)g_hash_table_lookup(priv->resources, key);
+ g_return_val_if_fail(!g_slist_find(rlist, object), false);
+ rlist = g_slist_prepend(rlist, object);
+ g_hash_table_insert(priv->resources, (gpointer) key, rlist);
- rlist = (GSList*)g_hash_table_lookup(document->priv->resources, key);
- g_return_val_if_fail(!g_slist_find(rlist, object), FALSE);
- rlist = g_slist_prepend(rlist, object);
- g_hash_table_insert(document->priv->resources, (gpointer) key, rlist);
+ GQuark q = g_quark_from_string(key);
+ priv->resources_changed_signals[q].emit();
- document->priv->resources_changed_signals[q].emit();
+ result = true;
+ }
- return TRUE;
+ return result;
}
-gboolean
-sp_document_remove_resource(SPDocument *document, gchar const *key, SPObject *object)
+bool SPDocument::removeResource(gchar const *key, SPObject *object)
{
- GSList *rlist;
- GQuark q = g_quark_from_string(key);
+ g_return_val_if_fail(key != NULL, false);
+ g_return_val_if_fail(*key != '\0', false);
+ g_return_val_if_fail(object != NULL, false);
+ g_return_val_if_fail(SP_IS_OBJECT(object), false);
- g_return_val_if_fail(document != NULL, FALSE);
- g_return_val_if_fail(key != NULL, FALSE);
- g_return_val_if_fail(*key != '\0', FALSE);
- g_return_val_if_fail(object != NULL, FALSE);
- g_return_val_if_fail(SP_IS_OBJECT(object), FALSE);
+ bool result = false;
- if (SP_OBJECT_IS_CLONED(object))
- return FALSE;
+ if ( !object->cloned ) {
+ GSList *rlist = (GSList*)g_hash_table_lookup(priv->resources, key);
+ g_return_val_if_fail(rlist != NULL, false);
+ g_return_val_if_fail(g_slist_find(rlist, object), false);
+ rlist = g_slist_remove(rlist, object);
+ g_hash_table_insert(priv->resources, (gpointer) key, rlist);
- rlist = (GSList*)g_hash_table_lookup(document->priv->resources, key);
- g_return_val_if_fail(rlist != NULL, FALSE);
- g_return_val_if_fail(g_slist_find(rlist, object), FALSE);
- rlist = g_slist_remove(rlist, object);
- g_hash_table_insert(document->priv->resources, (gpointer) key, rlist);
+ GQuark q = g_quark_from_string(key);
+ priv->resources_changed_signals[q].emit();
- document->priv->resources_changed_signals[q].emit();
+ result = true;
+ }
- return TRUE;
+ return result;
}
-GSList const *
-sp_document_get_resource_list(SPDocument *document, gchar const *key)
+GSList const *SPDocument::getResourceList(gchar const *key) const
{
- g_return_val_if_fail(document != NULL, NULL);
g_return_val_if_fail(key != NULL, NULL);
g_return_val_if_fail(*key != '\0', NULL);
- return (GSList*)g_hash_table_lookup(document->priv->resources, key);
+ return (GSList*)g_hash_table_lookup(this->priv->resources, key);
}
-sigc::connection sp_document_resources_changed_connect(SPDocument *document,
- gchar const *key,
- SPDocument::ResourcesChangedSignal::slot_type slot)
+sigc::connection SPDocument::connectResourcesChanged(gchar const *key,
+ SPDocument::ResourcesChangedSignal::slot_type slot)
{
GQuark q = g_quark_from_string(key);
- return document->priv->resources_changed_signals[q].connect(slot);
+ return this->priv->resources_changed_signals[q].connect(slot);
}
/* Helpers */
@@ -1409,44 +1351,40 @@ sp_document_resource_list_free(gpointer /*key*/, gpointer value, gpointer /*data
return TRUE;
}
-unsigned int
-count_objects_recursive(SPObject *obj, unsigned int count)
+unsigned int count_objects_recursive(SPObject *obj, unsigned int count)
{
count++; // obj itself
- for (SPObject *i = sp_object_first_child(obj); i != NULL; i = SP_OBJECT_NEXT(i)) {
+ for ( SPObject *i = obj->firstChild(); i; i = i->getNext() ) {
count = count_objects_recursive(i, count);
}
return count;
}
-unsigned int
-objects_in_document(SPDocument *document)
+unsigned int objects_in_document(SPDocument *document)
{
- return count_objects_recursive(SP_DOCUMENT_ROOT(document), 0);
+ return count_objects_recursive(document->getRoot(), 0);
}
-void
-vacuum_document_recursive(SPObject *obj)
+void vacuum_document_recursive(SPObject *obj)
{
if (SP_IS_DEFS(obj)) {
- for (SPObject *def = obj->firstChild(); def; def = SP_OBJECT_NEXT(def)) {
- /* fixme: some inkscape-internal nodes in the future might not be collectable */
+ for ( SPObject *def = obj->firstChild(); def; def = def->getNext()) {
+ // fixme: some inkscape-internal nodes in the future might not be collectable
def->requestOrphanCollection();
}
} else {
- for (SPObject *i = sp_object_first_child(obj); i != NULL; i = SP_OBJECT_NEXT(i)) {
+ for ( SPObject *i = obj->firstChild(); i; i = i->getNext() ) {
vacuum_document_recursive(i);
}
}
}
-unsigned int
-vacuum_document(SPDocument *document)
+unsigned int SPDocument::vacuumDocument()
{
- unsigned int start = objects_in_document(document);
- unsigned int end;
+ unsigned int start = objects_in_document(this);
+ unsigned int end = start;
unsigned int newend = start;
unsigned int iterations = 0;
@@ -1454,11 +1392,11 @@ vacuum_document(SPDocument *document)
do {
end = newend;
- vacuum_document_recursive(SP_DOCUMENT_ROOT(document));
- document->collectOrphans();
+ vacuum_document_recursive(root);
+ this->collectOrphans();
iterations++;
- newend = objects_in_document(document);
+ newend = objects_in_document(this);
} while (iterations < 100 && newend < end);
diff --git a/src/document.h b/src/document.h
index 4f5f045c5..82c874cb7 100644
--- a/src/document.h
+++ b/src/document.h
@@ -1,5 +1,5 @@
-#ifndef __SP_DOCUMENT_H__
-#define __SP_DOCUMENT_H__
+#ifndef SEEN_SP_DOCUMENT_H
+#define SEEN_SP_DOCUMENT_H
/** \file
* SPDocument: Typed SVG document implementation
@@ -7,6 +7,8 @@
/* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* MenTaLguY <mental@rydia.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2005 MenTaLguY
* Copyright (C) 1999-2002 Lauris Kaplinski
@@ -28,6 +30,7 @@
#include "gc-anchored.h"
#include <glibmm/ustring.h>
#include "verbs.h"
+#include "document-undo.h"
#include <vector>
#include <set>
@@ -64,10 +67,11 @@ namespace Proj {
class SPDocumentPrivate;
/// Typed SVG document implementation.
-struct SPDocument : public Inkscape::GC::Managed<>,
+class SPDocument : public Inkscape::GC::Managed<>,
public Inkscape::GC::Finalized,
public Inkscape::GC::Anchored
{
+public:
typedef sigc::signal<void, SPObject *> IDChangedSignal;
typedef sigc::signal<void> ResourcesChangedSignal;
typedef sigc::signal<void, guint> ModifiedSignal;
@@ -89,10 +93,13 @@ struct SPDocument : public Inkscape::GC::Managed<>,
SPObject *root; ///< Our SPRoot
CRCascade *style_cascade;
+protected:
gchar *uri; ///< A filename (not a URI yet), or NULL
gchar *base; ///< To be used for resolving relative hrefs.
gchar *name; ///< basename(uri) or other human-readable label for the document.
+public:
+
SPDocumentPrivate *priv;
/// Last action key
@@ -113,6 +120,27 @@ struct SPDocument : public Inkscape::GC::Managed<>,
bool oldSignalsConnected;
+ /** Returns our SPRoot */
+ SPObject *getRoot() { return root; }
+
+ Inkscape::XML::Node *getReprRoot() { return rroot; }
+
+ /** Our Inkscape::XML::Document. */
+ Inkscape::XML::Document *getReprDoc() { return rdoc; }
+ Inkscape::XML::Document const *getReprDoc() const { return rdoc; }
+
+ /** A filename (not a URI yet), or NULL */
+ gchar const *getURI() const { return uri; }
+ void setUri(gchar const *uri);
+
+ /** To be used for resolving relative hrefs. */
+ gchar const *getBase() const { return base; };
+ void setBase( gchar const* base );
+
+ /** basename(uri) or other human-readable label for the document. */
+ gchar const* getName() const { return name; }
+
+
void setCurrentPersp3D(Persp3D * const persp);
inline void setCurrentPersp3DImpl(Persp3DImpl * const persp_impl) { current_persp3d_impl = persp_impl; }
/*
@@ -121,28 +149,28 @@ struct SPDocument : public Inkscape::GC::Managed<>,
*/
Persp3D * getCurrentPersp3D();
Persp3DImpl * getCurrentPersp3DImpl();
- void getPerspectivesInDefs(std::vector<Persp3D*> &list);
- unsigned int numPerspectivesInDefs() {
+
+ void getPerspectivesInDefs(std::vector<Persp3D*> &list) const;
+
+ unsigned int numPerspectivesInDefs() const {
std::vector<Persp3D*> list;
getPerspectivesInDefs(list);
return list.size();
}
- //void initialize_current_persp3d();
-
sigc::connection connectModified(ModifiedSignal::slot_type slot);
sigc::connection connectURISet(URISetSignal::slot_type slot);
sigc::connection connectResized(ResizedSignal::slot_type slot);
-sigc::connection connectCommit(CommitSignal::slot_type slot);
+ sigc::connection connectCommit(CommitSignal::slot_type slot);
void bindObjectToId(gchar const *id, SPObject *object);
- SPObject *getObjectById(gchar const *id);
+ SPObject *getObjectById(gchar const *id) const;
sigc::connection connectIdChanged(const gchar *id, IDChangedSignal::slot_type slot);
void bindObjectToRepr(Inkscape::XML::Node *repr, SPObject *object);
- SPObject *getObjectByRepr(Inkscape::XML::Node *repr);
+ SPObject *getObjectByRepr(Inkscape::XML::Node *repr) const;
- Glib::ustring getLanguage();
+ Glib::ustring getLanguage() const;
void queueForOrphanCollection(SPObject *object);
void collectOrphans();
@@ -180,83 +208,49 @@ public:
sigc::connection _selection_changed_connection;
sigc::connection _desktop_activated_connection;
- void fitToRect(Geom::Rect const &rect, bool with_margins = false);
-};
-
-SPDocument *sp_document_new(const gchar *uri, unsigned int keepalive, bool make_new = false);
-SPDocument *sp_document_new_from_mem(const gchar *buffer, gint length, unsigned int keepalive);
-
-SPDocument *sp_document_ref(SPDocument *doc);
-SPDocument *sp_document_unref(SPDocument *doc);
-
-
-SPDocument *sp_document_create(Inkscape::XML::Document *rdoc, gchar const *uri, gchar const *base, gchar const *name, unsigned int keepalive);
+ sigc::connection connectResourcesChanged(const gchar *key, SPDocument::ResourcesChangedSignal::slot_type slot);
-/*
- * Access methods
- */
+ void fitToRect(Geom::Rect const &rect, bool with_margins = false);
+ static SPDocument *createNewDoc(const gchar *uri, unsigned int keepalive, bool make_new = false);
+ static SPDocument *createNewDocFromMem(const gchar *buffer, gint length, unsigned int keepalive);
-#define sp_document_repr_doc(d) (d->rdoc)
-#define sp_document_repr_root(d) (d->rroot)
-#define sp_document_root(d) (d->root)
-#define SP_DOCUMENT_ROOT(d) (d->root)
+ /**
+ * Returns the bottommost item from the list which is at the point, or NULL if none.
+ */
+ static SPItem *getItemFromListAtPointBottom(unsigned int dkey, SPGroup *group, const GSList *list, Geom::Point const p, bool take_insensitive = false);
+
+ // ToDo - Merge createDoc with createNewDoc
+ static SPDocument *createDoc(Inkscape::XML::Document *rdoc, gchar const *uri, gchar const *base, gchar const *name, unsigned int keepalive);
+
+ SPDocument *doRef();
+ SPDocument *doUnref();
+ gdouble getWidth() const;
+ gdouble getHeight() const;
+ Geom::Point getDimensions() const;
+ void setWidth(gdouble width, const SPUnit *unit);
+ void setHeight(gdouble height, const SPUnit *unit);
+ void requestModified();
+ gint ensureUpToDate();
+ bool addResource(const gchar *key, SPObject *object);
+ bool removeResource(const gchar *key, SPObject *object);
+ const GSList *getResourceList(const gchar *key) const;
+ GSList *getItemsInBox(unsigned int dkey, Geom::Rect const &box) const;
+ GSList *getItemsPartiallyInBox(unsigned int dkey, Geom::Rect const &box) const;
+ SPItem *getItemAtPoint(unsigned int key, Geom::Point const p, gboolean into_groups, SPItem *upto = NULL) const;
+ GSList *getItemsAtPoints(unsigned const key, std::vector<Geom::Point> points) const;
+ SPItem *getGroupAtPoint(unsigned int key, Geom::Point const p) const;
+
+ void changeUriAndHrefs(gchar const *uri);
+ void emitResizedSignal(gdouble width, gdouble height);
+
+ unsigned int vacuumDocument();
-gdouble sp_document_width(SPDocument *document);
-gdouble sp_document_height(SPDocument *document);
-Geom::Point sp_document_dimensions(SPDocument *document);
+private:
+ void do_change_uri(gchar const *const filename, bool const rebase);
+};
struct SPUnit;
-void sp_document_set_width(SPDocument *document, gdouble width, const SPUnit *unit);
-void sp_document_set_height(SPDocument *document, gdouble height, const SPUnit *unit);
-
-#define SP_DOCUMENT_URI(d) (d->uri)
-#define SP_DOCUMENT_NAME(d) (d->name)
-#define SP_DOCUMENT_BASE(d) (d->base)
-
-/*
- * Dictionary
- */
-
-/*
- * Undo & redo
- */
-
-void sp_document_set_undo_sensitive(SPDocument *document, bool sensitive);
-bool sp_document_get_undo_sensitive(SPDocument const *document);
-
-void sp_document_clear_undo(SPDocument *document);
-void sp_document_clear_redo(SPDocument *document);
-
-void sp_document_child_added(SPDocument *doc, SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref);
-void sp_document_child_removed(SPDocument *doc, SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref);
-void sp_document_attr_changed(SPDocument *doc, SPObject *object, const gchar *key, const gchar *oldval, const gchar *newval);
-void sp_document_content_changed(SPDocument *doc, SPObject *object, const gchar *oldcontent, const gchar *newcontent);
-void sp_document_order_changed(SPDocument *doc, SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *oldref, Inkscape::XML::Node *newref);
-
-/* Object modification root handler */
-void sp_document_request_modified(SPDocument *doc);
-gint sp_document_ensure_up_to_date(SPDocument *doc);
-
-/* Save all previous actions to stack, as one undo step */
-void sp_document_done(SPDocument *document, unsigned int event_type, Glib::ustring event_description);
-void sp_document_maybe_done(SPDocument *document, const gchar *keyconst, unsigned int event_type, Glib::ustring event_description);
-void sp_document_reset_key(Inkscape::Application *inkscape, SPDesktop *desktop, GtkObject *base);
-
-/* Cancel (and revert) current unsaved actions */
-void sp_document_cancel(SPDocument *document);
-
-/* Undo and redo */
-gboolean sp_document_undo(SPDocument *document);
-gboolean sp_document_redo(SPDocument *document);
-
-/* Resource management */
-gboolean sp_document_add_resource(SPDocument *document, const gchar *key, SPObject *object);
-gboolean sp_document_remove_resource(SPDocument *document, const gchar *key, SPObject *object);
-const GSList *sp_document_get_resource_list(SPDocument *document, const gchar *key);
-sigc::connection sp_document_resources_changed_connect(SPDocument *document, const gchar *key, SPDocument::ResourcesChangedSignal::slot_type slot);
-
-
/*
* Ideas: How to overcome style invalidation nightmare
*
@@ -271,26 +265,7 @@ sigc::connection sp_document_resources_changed_connect(SPDocument *document, con
*
*/
-/*
- * Misc
- */
-
-GSList *sp_document_items_in_box(SPDocument *document, unsigned int dkey, Geom::Rect const &box);
-GSList *sp_document_partial_items_in_box(SPDocument *document, unsigned int dkey, Geom::Rect const &box);
-SPItem *sp_document_item_from_list_at_point_bottom(unsigned int dkey, SPGroup *group, const GSList *list, Geom::Point const p, bool take_insensitive = false);
-SPItem *sp_document_item_at_point (SPDocument *document, unsigned int key, Geom::Point const p, gboolean into_groups, SPItem *upto = NULL);
-GSList *sp_document_items_at_points(SPDocument *document, unsigned const key, std::vector<Geom::Point> points);
-SPItem *sp_document_group_at_point (SPDocument *document, unsigned int key, Geom::Point const p);
-
-void sp_document_set_uri(SPDocument *document, gchar const *uri);
-void sp_document_change_uri_and_hrefs(SPDocument *document, gchar const *uri);
-
-void sp_document_resized_signal_emit(SPDocument *doc, gdouble width, gdouble height);
-
-unsigned int vacuum_document(SPDocument *document);
-
-
-#endif
+#endif // SEEN_SP_DOCUMENT_H
/*
Local Variables:
diff --git a/src/draw-context.cpp b/src/draw-context.cpp
index 885260456..8ff056f96 100644
--- a/src/draw-context.cpp
+++ b/src/draw-context.cpp
@@ -1,10 +1,9 @@
-#define __SP_DRAW_CONTEXT_C__
-
/*
* Generic drawing context
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 2000 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -43,6 +42,8 @@
#include "live_effects/lpe-patternalongpath.h"
#include "style.h"
+using Inkscape::DocumentUndo;
+
static void sp_draw_context_class_init(SPDrawContextClass *klass);
static void sp_draw_context_init(SPDrawContext *dc);
static void sp_draw_context_dispose(GObject *object);
@@ -438,7 +439,7 @@ spdc_attach_selection(SPDrawContext *dc, Inkscape::Selection */*sel*/)
/* Curve list */
/* We keep it in desktop coordinates to eliminate calculation errors */
SPCurve *norm = sp_path_get_curve_for_edit (SP_PATH(item));
- norm->transform(sp_item_i2d_affine(dc->white_item));
+ norm->transform((dc->white_item)->i2d_affine());
g_return_if_fail( norm != NULL );
dc->white_curves = g_slist_reverse(norm->split());
norm->unref();
@@ -640,12 +641,12 @@ spdc_flush_white(SPDrawContext *dc, SPCurve *gc)
/* Now we have to go back to item coordinates at last */
c->transform( dc->white_item
- ? sp_item_dt2i_affine(dc->white_item)
+ ? (dc->white_item)->dt2i_affine()
: SP_EVENT_CONTEXT_DESKTOP(dc)->dt2doc() );
SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(dc);
SPDocument *doc = sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
if ( c && !c->is_empty() ) {
/* We actually have something to write */
@@ -678,11 +679,11 @@ spdc_flush_white(SPDrawContext *dc, SPCurve *gc)
dc->selection->set(repr);
Inkscape::GC::release(repr);
- item->transform = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
+ item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
item->updateRepr();
}
- sp_document_done(doc, SP_IS_PEN_CONTEXT(dc)? SP_VERB_CONTEXT_PEN : SP_VERB_CONTEXT_PENCIL,
+ DocumentUndo::done(doc, SP_IS_PEN_CONTEXT(dc)? SP_VERB_CONTEXT_PEN : SP_VERB_CONTEXT_PENCIL,
_("Draw path"));
// When quickly drawing several subpaths with Shift, the next subpath may be finished and
@@ -696,7 +697,7 @@ spdc_flush_white(SPDrawContext *dc, SPCurve *gc)
c->unref();
/* Flush pending updates */
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
}
/**
@@ -790,7 +791,7 @@ void spdc_create_single_dot(SPEventContext *ec, Geom::Point const &pt, char cons
Glib::ustring tool_path = tool;
SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(ec);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
repr->setAttribute("sodipodi:type", "arc");
SPItem *item = SP_ITEM(desktop->currentLayer()->appendChildRepr(repr));
@@ -820,8 +821,8 @@ void spdc_create_single_dot(SPEventContext *ec, Geom::Point const &pt, char cons
current stroke width, multiplied by the amount specified in the preferences */
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- Geom::Matrix const i2d (sp_item_i2d_affine (item));
- Geom::Point pp = pt * i2d.inverse();
+ Geom::Matrix const i2d (item->i2d_affine ());
+ Geom::Point pp = pt;
double rad = 0.5 * prefs->getDouble(tool_path + "/dot-size", 3.0);
if (event_state & GDK_MOD1_MASK) {
/* TODO: We vary the dot size between 0.5*rad and 1.5*rad, where rad is the dot size
@@ -840,11 +841,12 @@ void spdc_create_single_dot(SPEventContext *ec, Geom::Point const &pt, char cons
sp_repr_set_svg_double (repr, "sodipodi:rx", rad * stroke_width);
sp_repr_set_svg_double (repr, "sodipodi:ry", rad * stroke_width);
item->updateRepr();
+ item->set_item_transform(i2d.inverse());
sp_desktop_selection(desktop)->set(item);
desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Creating single dot"));
- sp_document_done(sp_desktop_document(desktop), SP_VERB_NONE, _("Create single dot"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_NONE, _("Create single dot"));
}
/*
diff --git a/src/dropper-context.cpp b/src/dropper-context.cpp
index 88d1c4561..69bd8c971 100644
--- a/src/dropper-context.cpp
+++ b/src/dropper-context.cpp
@@ -1,11 +1,10 @@
-#define __SP_DROPPER_CONTEXT_C__
-
/*
* Tool for picking colors from drawing
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2005 Authors
*
@@ -43,6 +42,8 @@
#include "dropper-context.h"
#include "message-context.h"
+using Inkscape::DocumentUndo;
+
static void sp_dropper_context_class_init(SPDropperContextClass *klass);
static void sp_dropper_context_init(SPDropperContext *dc);
@@ -326,8 +327,8 @@ static gint sp_dropper_context_root_handler(SPEventContext *event_context, GdkEv
if (!(sp_desktop_selection(desktop)->isEmpty())) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_DROPPER,
- _("Set picked color"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_DROPPER,
+ _("Set picked color"));
}
ret = TRUE;
diff --git a/src/dyna-draw-context.cpp b/src/dyna-draw-context.cpp
index 4e6d6e05c..c675cd8f7 100644
--- a/src/dyna-draw-context.cpp
+++ b/src/dyna-draw-context.cpp
@@ -1,5 +1,3 @@
-#define __SP_DYNA_DRAW_CONTEXT_C__
-
/*
* Handwriting-like drawing mode
*
@@ -8,6 +6,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* MenTaLguY <mental@rydia.net>
+ * Abhishek Sharma
*
* The original dynadraw code:
* Paul Haeberli <paul@sgi.com>
@@ -66,6 +65,8 @@
#include "dyna-draw-context.h"
+using Inkscape::DocumentUndo;
+
#define DDC_RED_RGBA 0xff0000ff
#define TOLERANCE_CALLIGRAPHIC 0.1
@@ -600,7 +601,7 @@ sp_dyna_draw_context_root_handler(SPEventContext *event_context,
}
// calculate pointer point in the guide item's coords
- motion_to_curve = sp_item_dt2i_affine(selected) * sp_item_i2doc_affine(selected);
+ motion_to_curve = selected->dt2i_affine() * selected->i2doc_affine();
pointer = motion_dt * motion_to_curve;
// calculate the nearest point on the guide path
@@ -1003,7 +1004,7 @@ set_to_accumulated(SPDynaDrawContext *dc, bool unionize, bool subtract)
if (!dc->accumulated->is_empty()) {
if (!dc->repr) {
/* Create object */
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
/* Set style */
@@ -1013,7 +1014,7 @@ set_to_accumulated(SPDynaDrawContext *dc, bool unionize, bool subtract)
SPItem *item=SP_ITEM(desktop->currentLayer()->appendChildRepr(dc->repr));
Inkscape::GC::release(dc->repr);
- item->transform = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
+ item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
item->updateRepr();
}
Geom::PathVector pathv = dc->accumulated->get_pathvector() * desktop->dt2doc();
@@ -1041,8 +1042,8 @@ set_to_accumulated(SPDynaDrawContext *dc, bool unionize, bool subtract)
dc->repr = NULL;
}
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_CALLIGRAPHIC,
- _("Draw calligraphic stroke"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_CALLIGRAPHIC,
+ _("Draw calligraphic stroke"));
}
static void
diff --git a/src/eraser-context.cpp b/src/eraser-context.cpp
index 021479843..68c0989bc 100644
--- a/src/eraser-context.cpp
+++ b/src/eraser-context.cpp
@@ -7,6 +7,7 @@
* bulia byak <buliabyak@users.sf.net>
* MenTaLguY <mental@rydia.net>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* The original dynadraw code:
* Paul Haeberli <paul@sgi.com>
@@ -65,6 +66,8 @@
#include "eraser-context.h"
+using Inkscape::DocumentUndo;
+
#define ERC_RED_RGBA 0xff0000ff
#define TOLERANCE_ERASER 0.1
@@ -576,10 +579,13 @@ sp_eraser_context_root_handler(SPEventContext *event_context,
dc->repr = NULL;
}
- Inkscape::Rubberband::get(desktop)->stop();
dc->_message_context->clear();
ret = TRUE;
}
+ if (Inkscape::Rubberband::get(desktop)->is_started()) {
+ Inkscape::Rubberband::get(desktop)->stop();
+ }
+
break;
}
@@ -713,7 +719,7 @@ set_to_accumulated(SPEraserContext *dc)
if (!dc->accumulated->is_empty()) {
if (!dc->repr) {
/* Create object */
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
/* Set style */
@@ -723,7 +729,7 @@ set_to_accumulated(SPEraserContext *dc)
SPItem *item=SP_ITEM(desktop->currentLayer()->appendChildRepr(dc->repr));
Inkscape::GC::release(dc->repr);
- item->transform = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
+ item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
item->updateRepr();
}
Geom::PathVector pathv = dc->accumulated->get_pathvector() * desktop->dt2doc();
@@ -738,7 +744,7 @@ set_to_accumulated(SPEraserContext *dc)
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gint eraserMode = prefs->getBool("/tools/eraser/mode") ? 1 : 0;
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
SPItem* acid = SP_ITEM(desktop->doc()->getObjectByRepr(dc->repr));
Geom::OptRect eraserBbox = acid->getBounds(Geom::identity());
@@ -747,10 +753,10 @@ set_to_accumulated(SPEraserContext *dc)
GSList* toWorkOn = 0;
if (selection->isEmpty()) {
if ( eraserMode ) {
- toWorkOn = sp_document_partial_items_in_box(sp_desktop_document(desktop), desktop->dkey, bounds);
+ toWorkOn = sp_desktop_document(desktop)->getItemsPartiallyInBox(desktop->dkey, bounds);
} else {
Inkscape::Rubberband *r = Inkscape::Rubberband::get(desktop);
- toWorkOn = sp_document_items_at_points(sp_desktop_document(desktop), desktop->dkey, r->getPoints());
+ toWorkOn = sp_desktop_document(desktop)->getItemsAtPoints(desktop->dkey, r->getPoints());
}
toWorkOn = g_slist_remove( toWorkOn, acid );
} else {
@@ -826,10 +832,10 @@ set_to_accumulated(SPEraserContext *dc)
if ( workDone ) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_ERASER,
- _("Draw eraser stroke"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_ERASER,
+ _("Draw eraser stroke"));
} else {
- sp_document_cancel(sp_desktop_document(desktop));
+ DocumentUndo::cancel(sp_desktop_document(desktop));
}
}
diff --git a/src/event-context.cpp b/src/event-context.cpp
index a4109a91c..828ce3d5b 100644
--- a/src/event-context.cpp
+++ b/src/event-context.cpp
@@ -1,5 +1,3 @@
-#define __SP_EVENT_CONTEXT_C__
-
/** \file
* Main event handling, and related helper functions.
*
@@ -7,6 +5,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Frank Felfe <innerspace@iname.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 1999-2010 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -1103,20 +1102,21 @@ guint get_group0_keyval(GdkEventKey *event) {
* If state includes alt key mask, cyclically selects under; honors
* into_groups.
*/
-SPItem *
-sp_event_context_find_item(SPDesktop *desktop, Geom::Point const &p,
- bool select_under, bool into_groups) {
- SPItem *item;
+SPItem *sp_event_context_find_item(SPDesktop *desktop, Geom::Point const &p,
+ bool select_under, bool into_groups)
+{
+ SPItem *item = 0;
if (select_under) {
- SPItem *selected_at_point = desktop->item_from_list_at_point_bottom(
+ SPItem *selected_at_point = desktop->getItemFromListAtPointBottom(
desktop->selection->itemList(), p);
- item = desktop->item_at_point(p, into_groups, selected_at_point);
+ item = desktop->getItemAtPoint(p, into_groups, selected_at_point);
if (item == NULL) { // we may have reached bottom, flip over to the top
- item = desktop->item_at_point(p, into_groups, NULL);
+ item = desktop->getItemAtPoint(p, into_groups, NULL);
}
- } else
- item = desktop->item_at_point(p, into_groups, NULL);
+ } else {
+ item = desktop->getItemAtPoint(p, into_groups, NULL);
+ }
return item;
}
@@ -1131,7 +1131,7 @@ sp_event_context_over_item(SPDesktop *desktop, SPItem *item,
Geom::Point const &p) {
GSList *temp = NULL;
temp = g_slist_prepend(temp, item);
- SPItem *item_at_point = desktop->item_from_list_at_point_bottom(temp, p);
+ SPItem *item_at_point = desktop->getItemFromListAtPointBottom(temp, p);
g_slist_free(temp);
return item_at_point;
diff --git a/src/extension/dbus/application-interface.cpp b/src/extension/dbus/application-interface.cpp
index b183be93c..a652b7c96 100644
--- a/src/extension/dbus/application-interface.cpp
+++ b/src/extension/dbus/application-interface.cpp
@@ -123,7 +123,7 @@ application_interface_document_close_all (ApplicationInterface *object,
SPDocument *doc = sp_desktop_document(desktop);
g_assert(doc != NULL);
- Inkscape::XML::Node *repr = sp_document_repr_root(doc);
+ Inkscape::XML::Node *repr = doc->getReprRoot();
g_assert(repr != NULL);
*/
diff --git a/src/extension/dbus/document-interface.cpp b/src/extension/dbus/document-interface.cpp
index b8b0c2ade..836ad3397 100644
--- a/src/extension/dbus/document-interface.cpp
+++ b/src/extension/dbus/document-interface.cpp
@@ -28,7 +28,7 @@
#include "sp-object.h"
-#include "document.h" // sp_document_repr_doc
+#include "document.h" // getReprDoc()
#include "desktop-style.h" //sp_desktop_get_style
@@ -189,7 +189,7 @@ Inkscape::XML::Node *
dbus_create_node (SPDesktop *desk, const gchar *type)
{
SPDocument * doc = sp_desktop_document (desk);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
return xml_doc->createElement(type);
}
@@ -517,11 +517,10 @@ document_interface_image (DocumentInterface *object, int x, int y, gchar *filena
return strdup(newNode->attribute("id"));
}
-gchar*
-document_interface_node (DocumentInterface *object, gchar *type, GError **error)
+gchar *document_interface_node (DocumentInterface *object, gchar *type, GError **error)
{
SPDocument * doc = sp_desktop_document (object->desk);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *newNode = xml_doc->createElement(type);
diff --git a/src/extension/effect.cpp b/src/extension/effect.cpp
index 9a22c07b7..51aa42da6 100644
--- a/src/extension/effect.cpp
+++ b/src/extension/effect.cpp
@@ -1,6 +1,7 @@
/*
* Authors:
* Ted Gould <ted@gould.cx>
+ * Abhishek Sharma
*
* Copyright (C) 2002-2007 Authors
*
@@ -258,7 +259,7 @@ Effect::prefs (Inkscape::UI::View::View * doc)
This function first insures that the extension is loaded, and if not,
loads it. It then calls the implemention to do the actual work. It
also resets the last effect pointer to be this effect. Finally, it
- executes a \c sp_document_done to commit the changes to the undo
+ executes a \c SPDocumentUndo::done to commit the changes to the undo
stack.
*/
void
diff --git a/src/extension/execution-env.cpp b/src/extension/execution-env.cpp
index 7ed389195..f9e099c26 100644
--- a/src/extension/execution-env.cpp
+++ b/src/extension/execution-env.cpp
@@ -1,6 +1,7 @@
/*
* Authors:
* Ted Gould <ted@gould.cx>
+ * Abhishek Sharma
*
* Copyright (C) 2007-2008 Authors
*
@@ -162,14 +163,14 @@ ExecutionEnv::cancel (void) {
void
ExecutionEnv::undo (void) {
- sp_document_cancel(_doc->doc());
+ DocumentUndo::cancel(_doc->doc());
reselect();
return;
}
void
ExecutionEnv::commit (void) {
- sp_document_done(_doc->doc(), SP_VERB_NONE, _(_effect->get_name()));
+ DocumentUndo::done(_doc->doc(), SP_VERB_NONE, _(_effect->get_name()));
Effect::set_last_effect(_effect);
_effect->get_imp()->commitDocument();
killDocCache();
diff --git a/src/extension/extension.cpp b/src/extension/extension.cpp
index caed62735..e67a4b95f 100644
--- a/src/extension/extension.cpp
+++ b/src/extension/extension.cpp
@@ -44,7 +44,7 @@ namespace Extension {
std::vector<const gchar *> Extension::search_path;
std::ofstream Extension::error_file;
-Parameter * param_shared (const gchar * name, GSList * list);
+Parameter * get_param (const gchar * name);
/**
\return none
@@ -372,45 +372,45 @@ Extension::deactivated (void)
\brief This function looks through the linked list for a parameter
structure with the name of the passed in name
\param name The name to search for
- \param list The list to look for
This is an inline function that is used by all the get_param and
set_param functions to find a param_t in the linked list with
- the passed in name. It is done as an inline so that it will be
- optimized into a 'jump' by the compiler.
+ the passed in name.
This function can throw a 'param_not_exist' exception if the
name is not found.
The first thing that this function checks is if the list is NULL.
It could be NULL because there are no parameters for this extension
- or because all of them have been checked (I'll spoil the ending and
- tell you that this function is called recursively). If the list
+ or because all of them have been checked. If the list
is NULL then the 'param_not_exist' exception is thrown.
-
- Otherwise, the function looks at the current param_t that the element
- list points to. If the name of that param_t matches the passed in
- name then that param_t is returned. Otherwise, this function is
- called again with g_slist_next as a parameter.
*/
Parameter *
-param_shared (const gchar * name, GSList * list)
+Extension::get_param (const gchar * name)
{
- Parameter * output;
-
if (name == NULL) {
throw Extension::param_not_exist();
}
- if (list == NULL) {
+ if (this->parameters == NULL) {
+ // the list of parameters is empty
throw Extension::param_not_exist();
}
- output = static_cast<Parameter *>(list->data);
- if (!strcmp(output->name(), name)) {
- return output;
+ for (GSList * list = this->parameters; list != NULL; list =
+g_slist_next(list)) {
+ Parameter * param = static_cast<Parameter*>(list->data);
+ if (!strcmp(param->name(), name)) {
+ return param;
+ } else {
+ Parameter * subparam = param->get_param(name);
+ if (subparam) {
+ return subparam;
+ }
+ }
}
- return param_shared(name, g_slist_next(list));
+ // if execution reaches here, no parameter matching 'name' was found
+ throw Extension::param_not_exist();
}
/**
@@ -428,22 +428,21 @@ const gchar *
Extension::get_param_string (const gchar * name, const SPDocument * doc, const Inkscape::XML::Node * node)
{
Parameter * param;
-
- param = param_shared(name, parameters);
+ param = get_param(name);
return param->get_string(doc, node);
}
const gchar *
Extension::get_param_enum (const gchar * name, const SPDocument * doc, const Inkscape::XML::Node * node)
{
- Parameter* param = param_shared(name, parameters);
+ Parameter* param = get_param(name);
return param->get_enum(doc, node);
}
-
-gchar const *Extension::get_param_optiongroup( gchar const * name, SPDocument const * doc, Inkscape::XML::Node const * node)
+gchar const *
+Extension::get_param_optiongroup( gchar const * name, SPDocument const * doc, Inkscape::XML::Node const * node)
{
- Parameter* param = param_shared(name, parameters);
+ Parameter* param = get_param(name);
return param->get_optiongroup(doc, node);
}
@@ -463,8 +462,7 @@ bool
Extension::get_param_bool (const gchar * name, const SPDocument * doc, const Inkscape::XML::Node * node)
{
Parameter * param;
-
- param = param_shared(name, parameters);
+ param = get_param(name);
return param->get_bool(doc, node);
}
@@ -483,8 +481,7 @@ int
Extension::get_param_int (const gchar * name, const SPDocument * doc, const Inkscape::XML::Node * node)
{
Parameter * param;
-
- param = param_shared(name, parameters);
+ param = get_param(name);
return param->get_int(doc, node);
}
@@ -503,7 +500,7 @@ float
Extension::get_param_float (const gchar * name, const SPDocument * doc, const Inkscape::XML::Node * node)
{
Parameter * param;
- param = param_shared(name, parameters);
+ param = get_param(name);
return param->get_float(doc, node);
}
@@ -521,7 +518,7 @@ Extension::get_param_float (const gchar * name, const SPDocument * doc, const In
guint32
Extension::get_param_color (const gchar * name, const SPDocument * doc, const Inkscape::XML::Node * node)
{
- Parameter* param = param_shared(name, parameters);
+ Parameter* param = get_param(name);
return param->get_color(doc, node);
}
@@ -541,7 +538,7 @@ bool
Extension::set_param_bool (const gchar * name, bool value, SPDocument * doc, Inkscape::XML::Node * node)
{
Parameter * param;
- param = param_shared(name, parameters);
+ param = get_param(name);
return param->set_bool(value, doc, node);
}
@@ -561,7 +558,7 @@ int
Extension::set_param_int (const gchar * name, int value, SPDocument * doc, Inkscape::XML::Node * node)
{
Parameter * param;
- param = param_shared(name, parameters);
+ param = get_param(name);
return param->set_int(value, doc, node);
}
@@ -581,7 +578,7 @@ float
Extension::set_param_float (const gchar * name, float value, SPDocument * doc, Inkscape::XML::Node * node)
{
Parameter * param;
- param = param_shared(name, parameters);
+ param = get_param(name);
return param->set_float(value, doc, node);
}
@@ -601,13 +598,14 @@ const gchar *
Extension::set_param_string (const gchar * name, const gchar * value, SPDocument * doc, Inkscape::XML::Node * node)
{
Parameter * param;
- param = param_shared(name, parameters);
+ param = get_param(name);
return param->set_string(value, doc, node);
}
-gchar const * Extension::set_param_optiongroup(gchar const * name, gchar const * value, SPDocument * doc, Inkscape::XML::Node * node)
+gchar const *
+Extension::set_param_optiongroup(gchar const * name, gchar const * value, SPDocument * doc, Inkscape::XML::Node * node)
{
- Parameter * param = param_shared(name, parameters);
+ Parameter * param = get_param(name);
return param->set_optiongroup(value, doc, node);
}
@@ -627,7 +625,7 @@ gchar const * Extension::set_param_optiongroup(gchar const * name, gchar const *
guint32
Extension::set_param_color (const gchar * name, guint32 color, SPDocument * doc, Inkscape::XML::Node * node)
{
- Parameter* param = param_shared(name, parameters);
+ Parameter* param = get_param(name);
return param->set_color(color, doc, node);
}
diff --git a/src/extension/extension.h b/src/extension/extension.h
index c71ae59b4..936d2a907 100644
--- a/src/extension/extension.h
+++ b/src/extension/extension.h
@@ -169,10 +169,9 @@ public:
private:
void make_param (Inkscape::XML::Node * paramrepr);
-#if 0
- inline param_t * param_shared (const gchar * name,
- GSList * list);
-#endif
+
+ Parameter * get_param (const gchar * name);
+
public:
bool get_param_bool (const gchar * name,
const SPDocument * doc = NULL,
diff --git a/src/extension/implementation/script.cpp b/src/extension/implementation/script.cpp
index 04c7c15a6..bc143fd14 100644
--- a/src/extension/implementation/script.cpp
+++ b/src/extension/implementation/script.cpp
@@ -6,6 +6,7 @@
* Bryce Harrington <bryce@osdl.org>
* Ted Gould <ted@gould.cx>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2002-2005,2007 Authors
*
@@ -532,9 +533,8 @@ SPDocument *Script::open(Inkscape::Extension::Input *module,
} // data_read
if (mydoc != NULL) {
- g_free(mydoc->base);
- mydoc->base = NULL;
- sp_document_change_uri_and_hrefs(mydoc, filenameArg);
+ mydoc->setBase(0);
+ mydoc->changeUriAndHrefs(filenameArg);
}
// make sure we don't leak file descriptors from g_file_open_tmp
diff --git a/src/extension/implementation/xslt.cpp b/src/extension/implementation/xslt.cpp
index 2ab821e44..c929ba19a 100644
--- a/src/extension/implementation/xslt.cpp
+++ b/src/extension/implementation/xslt.cpp
@@ -4,6 +4,8 @@
/*
* Authors:
* Ted Gould <ted@gould.cx>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006-2007 Authors
*
@@ -174,7 +176,7 @@ XSLT::open(Inkscape::Extension::Input */*module*/, gchar const *filename)
}
g_free(s);
- SPDocument * doc = sp_document_create(rdoc, filename, base, name, true);
+ SPDocument * doc = SPDocument::createDoc(rdoc, filename, base, name, true);
g_free(base); g_free(name);
@@ -189,8 +191,7 @@ XSLT::save(Inkscape::Extension::Output */*module*/, SPDocument *doc, gchar const
g_return_if_fail(doc != NULL);
g_return_if_fail(filename != NULL);
- Inkscape::XML::Node *repr = NULL;
- repr = sp_document_repr_root (doc);
+ Inkscape::XML::Node *repr = doc->getReprRoot();
std::string tempfilename_out;
int tempfd_out = 0;
@@ -202,7 +203,7 @@ XSLT::save(Inkscape::Extension::Output */*module*/, SPDocument *doc, gchar const
}
if (!sp_repr_save_rebased_file(repr->document(), tempfilename_out.c_str(), SP_SVG_NS_URI,
- doc->base, filename)) {
+ doc->getBase(), filename)) {
throw Inkscape::Extension::Output::save_failed();
}
diff --git a/src/extension/internal/bluredge.cpp b/src/extension/internal/bluredge.cpp
index a82c7ba77..ba6b8383c 100644
--- a/src/extension/internal/bluredge.cpp
+++ b/src/extension/internal/bluredge.cpp
@@ -72,7 +72,7 @@ BlurEdge::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View
SPItem * spitem = *item;
std::vector<Inkscape::XML::Node *> new_items(steps);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node * new_group = xml_doc->createElement("svg:g");
(SP_OBJECT_REPR(spitem)->parent())->appendChild(new_group);
diff --git a/src/extension/internal/cairo-png-out.cpp b/src/extension/internal/cairo-png-out.cpp
index c81fdd029..eb26fc581 100644
--- a/src/extension/internal/cairo-png-out.cpp
+++ b/src/extension/internal/cairo-png-out.cpp
@@ -5,6 +5,8 @@
* Authors:
* Ted Gould <ted@gould.cx>
* Ulf Erikson <ulferikson@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2006 Authors
*
@@ -53,14 +55,14 @@ png_render_document_to_file(SPDocument *doc, gchar const *filename)
CairoRenderer *renderer;
CairoRenderContext *ctx;
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
/* Start */
/* Create new arena */
- SPItem *base = SP_ITEM(sp_document_root(doc));
+ SPItem *base = SP_ITEM(doc->getRoot());
NRArena *arena = NRArena::create();
- unsigned dkey = sp_item_display_key_new(1);
- NRArenaItem *root = sp_item_invoke_show(base, arena, dkey, SP_ITEM_SHOW_DISPLAY);
+ unsigned dkey = SPItem::display_key_new(1);
+ NRArenaItem *root = base->invoke_show(arena, dkey, SP_ITEM_SHOW_DISPLAY);
/* Create renderer and context */
renderer = new CairoRenderer();
@@ -76,7 +78,7 @@ png_render_document_to_file(SPDocument *doc, gchar const *filename)
renderer->destroyContext(ctx);
/* Release arena */
- sp_item_invoke_hide(base, dkey);
+ base->invoke_hide(dkey);
nr_object_unref((NRObject *) arena);
/* end */
delete renderer;
diff --git a/src/extension/internal/cairo-ps-out.cpp b/src/extension/internal/cairo-ps-out.cpp
index d9fd51ffd..07312aab1 100644
--- a/src/extension/internal/cairo-ps-out.cpp
+++ b/src/extension/internal/cairo-ps-out.cpp
@@ -6,6 +6,8 @@
* Ted Gould <ted@gould.cx>
* Ulf Erikson <ulferikson@users.sf.net>
* Adib Taraben <theAdib@yahoo.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2006 Authors
*
@@ -65,7 +67,7 @@ static bool
ps_print_document_to_file(SPDocument *doc, gchar const *filename, unsigned int level, bool texttopath, bool omittext,
bool filtertobitmap, int resolution, const gchar * const exportId, bool exportDrawing, bool exportCanvas, bool eps = false)
{
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
SPItem *base = NULL;
@@ -77,7 +79,7 @@ ps_print_document_to_file(SPDocument *doc, gchar const *filename, unsigned int l
}
else {
// we want to export the entire document from root
- base = SP_ITEM(sp_document_root(doc));
+ base = SP_ITEM(doc->getRoot());
pageBoundingBox = !exportDrawing;
}
@@ -86,8 +88,8 @@ ps_print_document_to_file(SPDocument *doc, gchar const *filename, unsigned int l
/* Create new arena */
NRArena *arena = NRArena::create();
- unsigned dkey = sp_item_display_key_new(1);
- sp_item_invoke_show(base, arena, dkey, SP_ITEM_SHOW_DISPLAY);
+ unsigned dkey = SPItem::display_key_new(1);
+ base->invoke_show(arena, dkey, SP_ITEM_SHOW_DISPLAY);
/* Create renderer and context */
CairoRenderer *renderer = new CairoRenderer();
@@ -110,7 +112,7 @@ ps_print_document_to_file(SPDocument *doc, gchar const *filename, unsigned int l
}
/* Release arena */
- sp_item_invoke_hide(base, dkey);
+ base->invoke_hide(dkey);
nr_object_unref((NRObject *) arena);
renderer->destroyContext(ctx);
diff --git a/src/extension/internal/cairo-ps-out.h b/src/extension/internal/cairo-ps-out.h
index 368d827b1..7eda3c510 100644
--- a/src/extension/internal/cairo-ps-out.h
+++ b/src/extension/internal/cairo-ps-out.h
@@ -6,6 +6,7 @@
* Ted Gould <ted@gould.cx>
* Ulf Erikson <ulferikson@users.sf.net>
* Adib Taraben <theAdib@yahoo.com>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2006 Authors
*
@@ -16,6 +17,7 @@
#define EXTENSION_INTERNAL_CAIRO_PS_OUT_H
#include "extension/implementation/implementation.h"
+#include "sp-item.h"
#ifdef HAVE_CAIRO_PDF
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index a2a868feb..52e10f7a4 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -1,11 +1,11 @@
-#define __SP_CAIRO_RENDER_CONTEXT_C__
-
/** \file
* Rendering with Cairo.
*/
/*
* Author:
* Miklos Erdelyi <erdelyim@gmail.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Miklos Erdelyi
*
@@ -670,6 +670,11 @@ CairoRenderContext::popLayer(void)
}
TRACE(("mask surface: %f x %f at %i dpi\n", surface_width, surface_height, _dpi ));
+ // Mask should start black, but it is created white.
+ cairo_set_source_rgba(mask_ctx->_cr, 0.0, 0.0, 0.0, 1.0);
+ cairo_rectangle(mask_ctx->_cr, 0, 0, surface_width, surface_height);
+ cairo_fill(mask_ctx->_cr);
+
// set rendering mode to normal
setRenderMode(RENDER_MODE_NORMAL);
@@ -700,19 +705,27 @@ CairoRenderContext::popLayer(void)
int stride = cairo_image_surface_get_stride(mask_image);
unsigned char *pixels = cairo_image_surface_get_data(mask_image);
- // premultiply with opacity
// In SVG, the rgb channels as well as the alpha channel is used in masking.
// In Cairo, only the alpha channel is used thus requiring this conversion.
+ // SVG specifies that RGB be converted to alpha using luminance-to-alpha.
+ // Notes: This calculation assumes linear RGB values. VERIFY COLOR SPACE!
+ // The incoming pixel values already include alpha, fill-opacity, etc.,
+ // however, opacity must still be applied.
TRACE(("premul w/ %f\n", opacity));
- guint8 int_opacity = (guint8)(255 * opacity);
+ const float coeff_r = 0.2125 / 255.0;
+ const float coeff_g = 0.7154 / 255.0;
+ const float coeff_b = 0.0721 / 255.0;
for (int row = 0 ; row < height; row++) {
unsigned char *row_data = pixels + (row * stride);
for (int i = 0 ; i < width; i++) {
guint32 *pixel = (guint32 *)row_data + i;
- *pixel = ((((*pixel & 0x00ff0000) >> 16) * 13817 +
- ((*pixel & 0x0000ff00) >> 8) * 46518 +
- ((*pixel & 0x000000ff) ) * 4688) *
- int_opacity);
+ float lum_alpha = (((*pixel & 0x00ff0000) >> 16) * coeff_r +
+ ((*pixel & 0x0000ff00) >> 8) * coeff_g +
+ ((*pixel & 0x000000ff) ) * coeff_b );
+ // lum_alpha can be slightly greater than 1 due to rounding errors...
+ // but this should be OK since it doesn't matter what the lower
+ // six hexadecimal numbers of *pixel are.
+ *pixel = (guint32)(0xff000000 * lum_alpha * opacity);
}
}
@@ -970,14 +983,15 @@ CairoRenderContext::popState(void)
g_assert( g_slist_length(_state_stack) > 0 );
}
-static bool pattern_hasItemChildren (SPPattern *pat)
+static bool pattern_hasItemChildren(SPPattern *pat)
{
- for (SPObject *child = sp_object_first_child(SP_OBJECT(pat)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ bool hasItems = false;
+ for ( SPObject *child = pat->firstChild() ; child && !hasItems; child = child->getNext() ) {
if (SP_IS_ITEM (child)) {
- return true;
+ hasItems = true;
}
}
- return false;
+ return hasItems;
}
cairo_pattern_t*
@@ -1073,14 +1087,14 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver
// create arena and group
NRArena *arena = NRArena::create();
- unsigned dkey = sp_item_display_key_new(1);
+ unsigned dkey = SPItem::display_key_new(1);
// show items and render them
for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) {
if (pat_i && SP_IS_OBJECT (pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children
- for (SPObject *child = sp_object_first_child(SP_OBJECT(pat_i)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = pat_i->firstChild() ; child; child = child->getNext() ) {
if (SP_IS_ITEM (child)) {
- sp_item_invoke_show (SP_ITEM (child), arena, dkey, SP_ITEM_REFERENCE_FLAGS);
+ SP_ITEM (child)->invoke_show (arena, dkey, SP_ITEM_REFERENCE_FLAGS);
_renderer->renderItem(pattern_ctx, SP_ITEM (child));
}
}
@@ -1107,9 +1121,9 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver
// hide all items
for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) {
if (pat_i && SP_IS_OBJECT (pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children
- for (SPObject *child = sp_object_first_child(SP_OBJECT(pat_i)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = pat_i->firstChild() ; child; child = child->getNext() ) {
if (SP_IS_ITEM (child)) {
- sp_item_invoke_hide (SP_ITEM (child), dkey);
+ SP_ITEM (child)->invoke_hide (dkey);
}
}
break; // do not go further up the chain if children are found
diff --git a/src/extension/internal/cairo-renderer-pdf-out.cpp b/src/extension/internal/cairo-renderer-pdf-out.cpp
index 32df1193b..8406e2a3b 100644
--- a/src/extension/internal/cairo-renderer-pdf-out.cpp
+++ b/src/extension/internal/cairo-renderer-pdf-out.cpp
@@ -6,6 +6,8 @@
* Ted Gould <ted@gould.cx>
* Ulf Erikson <ulferikson@users.sf.net>
* Johan Engelen <goejendaagh@zonnet.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2010 Authors
*
@@ -55,7 +57,7 @@ pdf_render_document_to_file(SPDocument *doc, gchar const *filename, unsigned int
bool texttopath, bool omittext, bool filtertobitmap, int resolution,
const gchar * const exportId, bool exportDrawing, bool exportCanvas)
{
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
/* Start */
@@ -69,18 +71,19 @@ pdf_render_document_to_file(SPDocument *doc, gchar const *filename, unsigned int
}
else {
// we want to export the entire document from root
- base = SP_ITEM(sp_document_root(doc));
+ base = SP_ITEM(doc->getRoot());
pageBoundingBox = !exportDrawing;
}
- if (!base)
+ if (!base) {
return false;
+ }
/* Create new arena */
NRArena *arena = NRArena::create();
nr_arena_set_renderoffscreen (arena);
- unsigned dkey = sp_item_display_key_new(1);
- sp_item_invoke_show(base, arena, dkey, SP_ITEM_SHOW_DISPLAY);
+ unsigned dkey = SPItem::display_key_new(1);
+ base->invoke_show(arena, dkey, SP_ITEM_SHOW_DISPLAY);
/* Create renderer and context */
CairoRenderer *renderer = new CairoRenderer();
@@ -102,7 +105,7 @@ pdf_render_document_to_file(SPDocument *doc, gchar const *filename, unsigned int
}
/* Release arena */
- sp_item_invoke_hide(base, dkey);
+ base->invoke_hide(dkey);
nr_object_unref((NRObject *) arena);
renderer->destroyContext(ctx);
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp
index 988f61263..67f9354d8 100644
--- a/src/extension/internal/cairo-renderer.cpp
+++ b/src/extension/internal/cairo-renderer.cpp
@@ -1,11 +1,11 @@
-#define __SP_CAIRO_RENDERER_C__
-
/** \file
* Rendering with Cairo.
*/
/*
* Author:
* Miklos Erdelyi <erdelyim@gmail.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Miklos Erdelyi
*
@@ -186,7 +186,7 @@ static void sp_shape_render (SPItem *item, CairoRenderContext *ctx)
if (!shape->curve) return;
- sp_item_invoke_bbox(item, &pbox, Geom::identity(), TRUE);
+ item->invoke_bbox( &pbox, Geom::identity(), TRUE);
SPStyle* style = SP_OBJECT_STYLE (item);
@@ -450,7 +450,7 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx)
// Get the bounding box of the selection in document coordinates.
Geom::OptRect bbox =
- item->getBounds(sp_item_i2d_affine(item), SPItem::RENDERING_BBOX);
+ item->getBounds(item->i2d_affine(), SPItem::RENDERING_BBOX);
if (!bbox) // no bbox, e.g. empty group
return;
@@ -481,7 +481,7 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx)
(Geom::Matrix)(Geom::Translate (shift_x, shift_y));
// ctx matrix already includes item transformation. We must substract.
- Geom::Matrix t_item = sp_item_i2d_affine (item);
+ Geom::Matrix t_item = item->i2d_affine ();
Geom::Matrix t = t_on_document * t_item.inverse();
// Do the export
@@ -603,16 +603,17 @@ CairoRenderer::setupDocument(CairoRenderContext *ctx, SPDocument *doc, bool page
g_assert( ctx != NULL );
- if (!base)
- base = SP_ITEM(sp_document_root(doc));
+ if (!base) {
+ base = SP_ITEM(doc->getRoot());
+ }
NRRect d;
if (pageBoundingBox) {
d.x0 = d.y0 = 0;
- d.x1 = sp_document_width(doc);
- d.y1 = sp_document_height(doc);
+ d.x1 = doc->getWidth();
+ d.y1 = doc->getHeight();
} else {
- sp_item_invoke_bbox(base, &d, sp_item_i2d_affine(base), TRUE, SPItem::RENDERING_BBOX);
+ base->invoke_bbox( &d, base->i2d_affine(), TRUE, SPItem::RENDERING_BBOX);
}
if (ctx->_vector_based_target) {
@@ -632,7 +633,7 @@ CairoRenderer::setupDocument(CairoRenderContext *ctx, SPDocument *doc, bool page
if (ret && !pageBoundingBox)
{
- double high = sp_document_height(doc);
+ double high = doc->getHeight();
if (ctx->_vector_based_target)
high *= PT_PER_PX;
@@ -672,7 +673,7 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp)
TRACE(("BEGIN clip\n"));
SPObject *co = SP_OBJECT(cp);
- for (SPObject *child = sp_object_first_child(co) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = co->firstChild() ; child; child = child->getNext() ) {
if (SP_IS_ITEM(child)) {
SPItem *item = SP_ITEM(child);
@@ -730,7 +731,7 @@ CairoRenderer::applyMask(CairoRenderContext *ctx, SPMask const *mask)
TRACE(("BEGIN mask\n"));
SPObject *co = SP_OBJECT(mask);
- for (SPObject *child = sp_object_first_child(co) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = co->firstChild() ; child; child = child->getNext() ) {
if (SP_IS_ITEM(child)) {
SPItem *item = SP_ITEM(child);
renderItem(ctx, item);
diff --git a/src/extension/internal/cairo-renderer.h b/src/extension/internal/cairo-renderer.h
index f1a26a313..7fa7c7ff5 100644
--- a/src/extension/internal/cairo-renderer.h
+++ b/src/extension/internal/cairo-renderer.h
@@ -7,6 +7,7 @@
/*
* Authors:
* Miklos Erdelyi <erdelyim@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Miklos Erdelyi
*
@@ -23,7 +24,7 @@
//#include "libnrtype/font-instance.h"
#include "style.h"
-
+#include "sp-item.h"
#include <cairo.h>
class SPClipPath;
diff --git a/src/extension/internal/emf-win32-inout.cpp b/src/extension/internal/emf-win32-inout.cpp
index 07f697775..a1771de8d 100644
--- a/src/extension/internal/emf-win32-inout.cpp
+++ b/src/extension/internal/emf-win32-inout.cpp
@@ -3,6 +3,8 @@
*/
/* Authors:
* Ulf Erikson <ulferikson@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006-2008 Authors
*
@@ -87,7 +89,7 @@ emf_print_document_to_file(SPDocument *doc, gchar const *filename)
gchar *oldoutput;
unsigned int ret;
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
mod = Inkscape::Extension::get_print(PRINT_EMF_WIN32);
oldconst = mod->get_param_string("destination");
@@ -98,20 +100,20 @@ emf_print_document_to_file(SPDocument *doc, gchar const *filename)
context.module = mod;
/* fixme: This has to go into module constructor somehow */
/* Create new arena */
- mod->base = SP_ITEM(sp_document_root(doc));
+ mod->base = SP_ITEM(doc->getRoot());
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);
+ mod->root = mod->base->invoke_show(mod->arena, mod->dkey, SP_ITEM_SHOW_DISPLAY);
/* Print document */
ret = mod->begin(doc);
if (ret) {
g_free(oldoutput);
throw Inkscape::Extension::Output::save_failed();
}
- sp_item_invoke_print(mod->base, &context);
+ mod->base->invoke_print(&context);
ret = mod->finish();
/* Release arena */
- sp_item_invoke_hide(mod->base, mod->dkey);
+ mod->base->invoke_hide(mod->dkey);
mod->base = NULL;
mod->root = NULL;
nr_object_unref((NRObject *) mod->arena);
@@ -2345,7 +2347,7 @@ EmfWin32::open( Inkscape::Extension::Input * /*mod*/, const gchar *uri )
// std::cout << "SVG Output: " << std::endl << *(d.outsvg) << std::endl;
- SPDocument *doc = sp_document_new_from_mem(d.outsvg->c_str(), d.outsvg->length(), TRUE);
+ SPDocument *doc = SPDocument::createNewDocFromMem(d.outsvg->c_str(), d.outsvg->length(), TRUE);
delete d.outsvg;
delete d.path;
diff --git a/src/extension/internal/emf-win32-print.cpp b/src/extension/internal/emf-win32-print.cpp
index bd42b0eb6..6be48e44c 100644
--- a/src/extension/internal/emf-win32-print.cpp
+++ b/src/extension/internal/emf-win32-print.cpp
@@ -3,6 +3,8 @@
*/
/* Authors:
* Ulf Erikson <ulferikson@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006-2009 Authors
*
@@ -135,8 +137,8 @@ PrintEmfWin32::begin (Inkscape::Extension::Print *mod, SPDocument *doc)
WCHAR *unicode_uri = (WCHAR *) unicode_fn;
// width and height in px
- _width = sp_document_width(doc);
- _height = sp_document_height(doc);
+ _width = doc->getWidth();
+ _height = doc->getHeight();
NRRect d;
bool pageBoundingBox;
@@ -146,8 +148,8 @@ PrintEmfWin32::begin (Inkscape::Extension::Print *mod, SPDocument *doc)
d.x1 = _width;
d.y1 = _height;
} else {
- SPItem* doc_item = SP_ITEM(sp_document_root(doc));
- sp_item_invoke_bbox(doc_item, &d, sp_item_i2d_affine(doc_item), TRUE);
+ SPItem* doc_item = SP_ITEM(doc->getRoot());
+ doc_item->invoke_bbox(&d, doc_item->i2d_affine(), TRUE);
}
d.x0 *= IN_PER_PX;
@@ -232,7 +234,7 @@ PrintEmfWin32::begin (Inkscape::Extension::Print *mod, SPDocument *doc)
g_free(local_fn);
g_free(unicode_fn);
- m_tr_stack.push( Geom::Scale(1, -1) * Geom::Translate(0, sp_document_height(doc)));
+ m_tr_stack.push( Geom::Scale(1, -1) * Geom::Translate(0, doc->getHeight()));
return 0;
}
diff --git a/src/extension/internal/filter/color.h b/src/extension/internal/filter/color.h
index 1a1644276..54312685c 100644
--- a/src/extension/internal/filter/color.h
+++ b/src/extension/internal/filter/color.h
@@ -7,6 +7,13 @@
* Ivan Louette (filters)
* Nicolas Dufour (UI) <nicoduf@yahoo.fr>
*
+ * Color filters
+ * Colorize
+ * Duochrome
+ * Quadritone
+ * Solarize
+ * Tritone
+ *
* Released under GNU GPL, read the file 'COPYING' for more information
*/
/* ^^^ Change the copyright to be you and your e-mail address ^^^ */
@@ -22,6 +29,122 @@ namespace Extension {
namespace Internal {
namespace Filter {
+/**
+ \brief Custom predefined Colorize filter.
+
+ Blend image or object with a flood color.
+
+ Filter's parameters:
+ * Harsh light (0.->10., default 0) -> composite1 (k1)
+ * Normal light (0.->10., default 1) -> composite2 (k2)
+ * Duotone (boolean, default false) -> colormatrix1 (values="0")
+ * Filtered greys (boolean, default false) -> colormatrix2 (values="0")
+ * Blend mode 1 (enum, default Multiply) -> blend1 (mode)
+ * Blend mode 2 (enum, default Screen) -> blend2 (mode)
+*/
+
+class Colorize : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Colorize ( ) : Filter() { };
+ virtual ~Colorize ( ) { 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_("Colorize, custom -EXP-") "</name>\n"
+ "<id>org.inkscape.effect.filter.Colorize</id>\n"
+ "<param name=\"hlight\" gui-text=\"" N_("Harsh light:") "\" type=\"float\" min=\"0\" max=\"10\">0</param>\n"
+ "<param name=\"nlight\" gui-text=\"" N_("Normal light:") "\" type=\"float\" min=\"0\" max=\"10\">1</param>\n"
+ "<param name=\"duotone\" gui-text=\"" N_("Duotone") "\" type=\"boolean\" >false</param>\n"
+ "<param name=\"blend1\" gui-text=\"" N_("Blend1:") "\" type=\"enum\">\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"screen\">Screen</_item>\n"
+ "<_item value=\"lighten\">Lighten</_item>\n"
+ "<_item value=\"darken\">Darken</_item>\n"
+ "</param>\n"
+ "<param name=\"blend2\" gui-text=\"" N_("Blend2:") "\" type=\"enum\">\n"
+ "<_item value=\"screen\">Screen</_item>\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"lighten\">Lighten</_item>\n"
+ "<_item value=\"darken\">Darken</_item>\n"
+ "</param>\n"
+ "<param name=\"color\" gui-text=\"" N_("Color 1") "\" type=\"color\">-1639776001</param>\n"
+ "<effect>\n"
+ "<object-type>all</object-type>\n"
+ "<effects-menu>\n"
+ "<submenu name=\"" N_("Filters") "\">\n"
+ "<submenu name=\"" N_("Experimental") "\"/>\n"
+ "</submenu>\n"
+ "</effects-menu>\n"
+ "<menu-tip>" N_("Blend image or object with a flood color") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Colorize());
+ };
+
+};
+
+gchar const *
+Colorize::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream a;
+ std::ostringstream r;
+ std::ostringstream g;
+ std::ostringstream b;
+ std::ostringstream hlight;
+ std::ostringstream nlight;
+ std::ostringstream duotone;
+ std::ostringstream blend1;
+ std::ostringstream blend2;
+
+ guint32 color = ext->get_param_color("color");
+ r << ((color >> 24) & 0xff);
+ g << ((color >> 16) & 0xff);
+ b << ((color >> 8) & 0xff);
+ a << (color & 0xff) / 255.0F;
+
+ hlight << ext->get_param_float("hlight");
+ nlight << ext->get_param_float("nlight");
+ blend1 << ext->get_param_enum("blend1");
+ blend2 << ext->get_param_enum("blend2");
+ if (ext->get_param_bool("duotone"))
+ duotone << "0";
+ else
+ duotone << "1";
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Colorize, custom -EXP-\">\n"
+ "<feComposite in2=\"SourceGraphic\" operator=\"arithmetic\" k1=\"%s\" k2=\"%s\" result=\"composite1\" />\n"
+ "<feColorMatrix in=\"composite1\" values=\"%s\" type=\"saturate\" result=\"colormatrix1\" />\n"
+ "<feFlood flood-opacity=\"%s\" flood-color=\"rgb(%s,%s,%s)\" result=\"flood1\" />\n"
+ "<feBlend in=\"flood1\" in2=\"colormatrix1\" mode=\"%s\" result=\"blend1\" />\n"
+ "<feBlend in2=\"blend1\" mode=\"%s\" result=\"blend2\" />\n"
+ "<feColorMatrix in=\"blend2\" values=\"1\" type=\"saturate\" result=\"colormatrix2\" />\n"
+ "<feComposite in=\"colormatrix2\" in2=\"SourceGraphic\" operator=\"in\" k2=\"1\" result=\"composite2\" />\n"
+ "</filter>\n", hlight.str().c_str(), nlight.str().c_str(), duotone.str().c_str(), a.str().c_str(), r.str().c_str(), g.str().c_str(), b.str().c_str(), blend1.str().c_str(), blend2.str().c_str());
+
+ return _filter;
+}; /* Colorize filter */
+
+
+/**
+ \brief Custom predefined Duochrome filter.
+
+ Convert luminance values to a duochrome palette.
+
+ Filter's parameters:
+ * Fluorescence level (0.->2., default 0) -> composite4 (k2)
+ * Swap (enum, default "No swap") -> composite1, composite2 (operator)
+ * Color 1 (guint, default 1364325887) -> flood1 (flood-opacity, flood-color)
+ * Color 2 (guint, default -65281) -> flood2 (flood-opacity, flood-color)
+*/
+
class Duochrome : public Inkscape::Extension::Internal::Filter::Filter {
protected:
virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
@@ -35,6 +158,8 @@ public:
"<inkscape-extension xmlns=\"" INKSCAPE_EXTENSION_URI "\">\n"
"<name>" N_("Duochrome, custom -EXP-") "</name>\n"
"<id>org.inkscape.effect.filter.Duochrome</id>\n"
+ "<param name=\"tab\" type=\"notebook\">\n"
+ "<page name=\"optionstab\" _gui-text=\"Options\">\n"
"<param name=\"fluo\" gui-text=\"" N_("Fluorescence level:") "\" type=\"float\" min=\"0\" max=\"2\">0</param>\n"
"<param name=\"swap\" gui-text=\"" N_("Swap:") "\" type=\"enum\">\n"
"<_item value=\"none\">No swap</_item>\n"
@@ -42,10 +167,14 @@ public:
"<_item value=\"color\">Color only</_item>\n"
"<_item value=\"alpha\">Alpha only</_item>\n"
"</param>\n"
- "<_param name=\"header1\" type=\"groupheader\">Color 1</_param>\n"
+ "</page>\n"
+ "<page name=\"co11tab\" _gui-text=\"Color 1\">\n"
"<param name=\"color1\" gui-text=\"" N_("Color 1") "\" type=\"color\">1364325887</param>\n"
- "<_param name=\"header2\" type=\"groupheader\">Color 2</_param>\n"
+ "</page>\n"
+ "<page name=\"co12tab\" _gui-text=\"Color 2\">\n"
"<param name=\"color2\" gui-text=\"" N_("Color 2") "\" type=\"color\">-65281</param>\n"
+ "</page>\n"
+ "</param>\n"
"<effect>\n"
"<object-type>all</object-type>\n"
"<effects-menu>\n"
@@ -126,7 +255,341 @@ Duochrome::get_filter_text (Inkscape::Extension::Extension * ext)
"</filter>\n", a1.str().c_str(), r1.str().c_str(), g1.str().c_str(), b1.str().c_str(), swap1.str().c_str(), a2.str().c_str(), r2.str().c_str(), g2.str().c_str(), b2.str().c_str(), swap2.str().c_str(), fluo.str().c_str());
return _filter;
+}; /* Duochrome filter */
+
+
+/**
+ \brief Custom predefined Quadritone filter.
+
+ Replace hue by two colors.
+
+ Filter's parameters:
+ * Hue distribution (0->360, default 280) -> colormatrix1 (values)
+ * Colors (0->360, default 100) -> colormatrix3 (values)
+ * Blend mode 1 (enum, default Normal) -> blend1 (mode)
+ * Over-saturation (0.->1., default 0) -> composite1 (k2)
+ * Blend mode 2 (enum, default Normal) -> blend2 (mode)
+*/
+
+class Quadritone : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Quadritone ( ) : Filter() { };
+ virtual ~Quadritone ( ) { 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_("Quadritone fantasy, custom -EXP-") "</name>\n"
+ "<id>org.inkscape.effect.filter.Quadritone</id>\n"
+ "<param name=\"dist\" gui-text=\"" N_("Hue distribution:") "\" type=\"int\" min=\"0\" max=\"360\">280</param>\n"
+ "<param name=\"colors\" gui-text=\"" N_("Colors:") "\" type=\"int\" min=\"0\" max=\"360\">100</param>\n"
+ "<param name=\"blend1\" gui-text=\"" N_("Blend1:") "\" type=\"enum\">\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"screen\">Screen</_item>\n"
+ "</param>\n"
+ "<param name=\"sat\" gui-text=\"" N_("Over-saturation:") "\" type=\"float\" min=\"0\" max=\"1\">0</param>\n"
+ "<param name=\"blend2\" gui-text=\"" N_("Blend2:") "\" type=\"enum\">\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"screen\">Screen</_item>\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"lighten\">Lighten</_item>\n"
+ "<_item value=\"darken\">Darken</_item>\n"
+ "</param>\n"
+ "<effect>\n"
+ "<object-type>all</object-type>\n"
+ "<effects-menu>\n"
+ "<submenu name=\"" N_("Filters") "\">\n"
+ "<submenu name=\"" N_("Experimental") "\"/>\n"
+ "</submenu>\n"
+ "</effects-menu>\n"
+ "<menu-tip>" N_("Replace hue by two colors") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Quadritone());
+ };
+
};
+
+gchar const *
+Quadritone::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream dist;
+ std::ostringstream colors;
+ std::ostringstream blend1;
+ std::ostringstream sat;
+ std::ostringstream blend2;
+
+ dist << ext->get_param_int("dist");
+ colors << ext->get_param_int("colors");
+ blend1 << ext->get_param_enum("blend1");
+ sat << ext->get_param_float("sat");
+ blend2 << ext->get_param_enum("blend2");
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Quadritone fantasy, custom -EXP-\">\n"
+ "<feColorMatrix in=\"SourceGraphic\" type=\"hueRotate\" values=\"%s\" result=\"colormatrix1\" />\n"
+ "<feColorMatrix type=\"matrix\" values=\"0.5 0 0.5 0 0 0 1 0 0 0 0.5 0 0.5 0 0 0 0 0 1 0 \" result=\"colormatrix2\" />\n"
+ "<feColorMatrix type=\"hueRotate\" values=\"%s\" result=\"colormatrix3\" />\n"
+ "<feBlend in2=\"colormatrix3\" blend=\"normal\" mode=\"%s\" result=\"blend1\" />\n"
+ "<feColorMatrix type=\"matrix\" values=\"2.5 -0.75 -0.75 0 0 -0.75 2.5 -0.75 0 0 -0.75 -0.75 2.5 0 0 0 0 0 1 0 \" result=\"colormatrix4\" />\n"
+ "<feComposite in=\"colormatrix4\" in2=\"blend1\" operator=\"arithmetic\" k2=\"%s\" result=\"composite1\" />\n"
+ "<feBlend in2=\"blend1\" blend=\"normal\" mode=\"%s\" result=\"blend2\" />\n"
+ "</filter>\n", dist.str().c_str(), colors.str().c_str(), blend1.str().c_str(), sat.str().c_str(), blend2.str().c_str());
+
+ return _filter;
+}; /* Quadritone filter */
+
+
+/**
+ \brief Custom predefined Solarize filter.
+
+ Classic photographic solarization effect.
+
+ Filter's parameters:
+ * Type (enum, default "Solarize") ->
+ Solarize = blend1 (mode="darken"), blend2 (mode="screen")
+ Moonarize = blend1 (mode="lighten"), blend2 (mode="multiply") [No other access to the blend modes]
+ * Hue rotation (0->360, default 0) -> colormatrix1 (values)
+*/
+
+
+class Solarize : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Solarize ( ) : Filter() { };
+ virtual ~Solarize ( ) { 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_("Solarize, custom -EXP-") "</name>\n"
+ "<id>org.inkscape.effect.filter.Solarize</id>\n"
+ "<param name=\"rotate\" gui-text=\"" N_("Hue rotation:") "\" type=\"int\" min=\"0\" max=\"360\">0</param>\n"
+ "<param name=\"type\" gui-text=\"" N_("Type:") "\" type=\"enum\">\n"
+ "<_item value=\"solarize\">Solarize</_item>\n"
+ "<_item value=\"moonarize\">Moonarize</_item>\n"
+ "</param>\n"
+ "<effect>\n"
+ "<object-type>all</object-type>\n"
+ "<effects-menu>\n"
+ "<submenu name=\"" N_("Filters") "\">\n"
+ "<submenu name=\"" N_("Experimental") "\"/>\n"
+ "</submenu>\n"
+ "</effects-menu>\n"
+ "<menu-tip>" N_("Classic photographic solarization effect") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Solarize());
+ };
+
+};
+
+gchar const *
+Solarize::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream rotate;
+ std::ostringstream blend1;
+ std::ostringstream blend2;
+
+ rotate << ext->get_param_int("rotate");
+ const gchar *type = ext->get_param_enum("type");
+ if((g_ascii_strcasecmp("solarize", type) == 0)) {
+ // Solarize
+ blend1 << "darken";
+ blend2 << "screen";
+ } else {
+ // Moonarize
+ blend1 << "lighten";
+ blend2 << "multiply";
+ }
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Solarize, custom -EXP-\">\n"
+ "<feColorMatrix values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 \" />\n"
+ "<feColorMatrix type=\"hueRotate\" values=\"%s\" result=\"colormatrix2\" />\n"
+ "<feColorMatrix in=\"colormatrix2\" values=\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0 \" result=\"colormatrix3\" />\n"
+ "<feBlend in=\"colormatrix3\" in2=\"colormatrix2\" mode=\"%s\" result=\"blend1\" />\n"
+ "<feBlend in2=\"blend1\" mode=\"%s\" result=\"blend2\" />\n"
+ "<feComposite in2=\"SourceGraphic\" operator=\"in\" />\n"
+ "</filter>\n", rotate.str().c_str(), blend1.str().c_str(), blend2.str().c_str());
+
+ return _filter;
+}; /* Solarize filter */
+
+
+/**
+ \brief Custom predefined Tritone filter.
+
+ Create a custom tritone palette with additional glow, blend modes and hue moving.
+
+ Filter's parameters:
+ * Option (enum, default Normal) ->
+ Normal = composite1 (in="qminp", in2="flood"), composite2 (in="p", in2="blend6"), blend6 (in2="qminpc")
+ Enhance hue = Normal + composite2 (in="SourceGraphic")
+ Radiation = Normal + blend6 (in2="SourceGraphic") composite2 (in="blend6", in2="qminpc")
+ Hue to background = Normal + composite1 (in2="BackgroundImage") [a template with an activated background is needed, or colors become black]
+ * Hue distribution (0->360, default 0) -> colormatrix1 (values)
+ * Colors (guint, default -73203457) -> flood (flood-opacity, flood-color)
+ * Global blend (enum, default Lighten) -> blend5 (mode) [Multiply, Screen, Darken, Lighten only!]
+ * Glow (0.01->10., default 0.01) -> feGaussianBlur (stdDeviation)
+ * Glow & blend (enum, default Normal) -> blend6 (mode) [Normal, Multiply and Darken only!]
+ * Local light (0.->10., default 0) -> composite2 (k1)
+ * Global light (0.->10., default 1) -> composite2 (k3) [k2 must be fixed to 1].
+*/
+
+class Tritone : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Tritone ( ) : Filter() { };
+ virtual ~Tritone ( ) { 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_("Tritone, custom -EXP-") "</name>\n"
+ "<id>org.inkscape.effect.filter.Tritone</id>\n"
+ "<param name=\"tab\" type=\"notebook\">\n"
+ "<page name=\"optionstab\" _gui-text=\"Options\">\n"
+ "<param name=\"type\" gui-text=\"" N_("Type:") "\" type=\"enum\">\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"enhue\">Enhance hue</_item>\n"
+ "<_item value=\"rad\">Radiation</_item>\n"
+ "<_item value=\"htb\">Hue to background</_item>\n"
+ "</param>\n"
+ "<param name=\"globalblend\" gui-text=\"" N_("Global blend:") "\" type=\"enum\">\n"
+ "<_item value=\"lighten\">Lighten</_item>\n"
+ "<_item value=\"screen\">Screen</_item>\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"darken\">Darken</_item>\n"
+ "</param>\n"
+ "<param name=\"glow\" gui-text=\"" N_("Glow:") "\" type=\"float\" min=\"0.01\" max=\"10\">0.01</param>\n"
+ "<param name=\"glowblend\" gui-text=\"" N_("Glow blend:") "\" type=\"enum\">\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"darken\">Darken</_item>\n"
+ "</param>\n"
+ "<param name=\"llight\" gui-text=\"" N_("Local light:") "\" type=\"float\" min=\"0\" max=\"10\">0</param>\n"
+ "<param name=\"glight\" gui-text=\"" N_("Global light:") "\" type=\"float\" min=\"0\" max=\"10\">1</param>\n"
+ "</page>\n"
+ "<page name=\"co1tab\" _gui-text=\"Color\">\n"
+ "<param name=\"dist\" gui-text=\"" N_("Hue distribution:") "\" type=\"int\" min=\"0\" max=\"360\">0</param>\n"
+ "<param name=\"color\" gui-text=\"" N_("Color") "\" type=\"color\">-73203457</param>\n"
+ "</page>\n"
+ "</param>\n"
+ "<effect>\n"
+ "<object-type>all</object-type>\n"
+ "<effects-menu>\n"
+ "<submenu name=\"" N_("Filters") "\">\n"
+ "<submenu name=\"" N_("Experimental") "\"/>\n"
+ "</submenu>\n"
+ "</effects-menu>\n"
+ "<menu-tip>" N_("Create a custom tritone palette with additional glow, blend modes and hue moving") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Tritone());
+ };
+
+};
+
+gchar const *
+Tritone::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream dist;
+ std::ostringstream a;
+ std::ostringstream r;
+ std::ostringstream g;
+ std::ostringstream b;
+ std::ostringstream globalblend;
+ std::ostringstream glow;
+ std::ostringstream glowblend;
+ std::ostringstream llight;
+ std::ostringstream glight;
+ std::ostringstream c1in;
+ std::ostringstream c1in2;
+ std::ostringstream c2in;
+ std::ostringstream c2in2;
+ std::ostringstream b6in2;
+
+ guint32 color = ext->get_param_color("color");
+ r << ((color >> 24) & 0xff);
+ g << ((color >> 16) & 0xff);
+ b << ((color >> 8) & 0xff);
+ a << (color & 0xff) / 255.0F;
+ globalblend << ext->get_param_enum("globalblend");
+ dist << ext->get_param_int("dist");
+ glow << ext->get_param_float("glow");
+ glowblend << ext->get_param_enum("glowblend");
+ llight << ext->get_param_float("llight");
+ glight << ext->get_param_float("glight");
+
+ const gchar *type = ext->get_param_enum("type");
+ if((g_ascii_strcasecmp("enhue", type) == 0)) {
+ // Enhance hue
+ c1in << "qminp";
+ c1in2 << "flood";
+ c2in << "SourceGraphic";
+ c2in2 << "blend6";
+ b6in2 << "qminpc";
+ } else if((g_ascii_strcasecmp("rad", type) == 0)) {
+ // Radiation
+ c1in << "qminp";
+ c1in2 << "flood";
+ c2in << "blend6";
+ c2in2 << "qminpc";
+ b6in2 << "SourceGraphic";
+ } else if((g_ascii_strcasecmp("htb", type) == 0)) {
+ // Hue to background
+ c1in << "qminp";
+ c1in2 << "BackgroundImage";
+ c2in << "p";
+ c2in2 << "blend6";
+ b6in2 << "qminpc";
+ } else {
+ // Normal
+ c1in << "qminp";
+ c1in2 << "flood";
+ c2in << "p";
+ c2in2 << "blend6";
+ b6in2 << "qminpc";
+ }
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Tritone, custom -EXP-\">\n"
+ "<feColorMatrix type=\"hueRotate\" result=\"colormatrix1\" values=\"%s\" />\n"
+ "<feColorMatrix in=\"colormatrix1\" result=\"r\" type=\"matrix\" values=\"1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 \" />\n"
+ "<feColorMatrix in=\"colormatrix1\" result=\"g\" type=\"matrix\" values=\"0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 \" />\n"
+ "<feColorMatrix in=\"colormatrix1\" result=\"b\" type=\"matrix\" values=\"0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 \" />\n"
+ "<feBlend in2=\"g\" mode=\"darken\" in=\"r\" result=\"minrg\" />\n"
+ "<feBlend in2=\"b\" mode=\"darken\" in=\"minrg\" result=\"p\" />\n"
+ "<feBlend in2=\"g\" mode=\"lighten\" in=\"r\" result=\"maxrg\" />\n"
+ "<feBlend in2=\"b\" mode=\"lighten\" in=\"maxrg\" result=\"q\" />\n"
+ "<feComponentTransfer in=\"q\" result=\"q2\">\n"
+ "<feFuncR type=\"linear\" slope=\"0\" />\n"
+ "</feComponentTransfer>\n"
+ "<feBlend in2=\"q2\" mode=\"%s\" in=\"p\" result=\"pq\" />\n"
+ "<feColorMatrix in=\"pq\" result=\"qminp\" type=\"matrix\" values=\"-1 1 0 0 0 -1 1 0 0 0 -1 1 0 0 0 0 0 0 0 1 \" />\n"
+ "<feFlood in=\"qminp\" flood-opacity=\"%s\" flood-color=\"rgb(%s,%s,%s)\" result=\"flood\" />\n"
+ "<feComposite in=\"%s\" in2=\"%s\" result=\"qminpc\" operator=\"arithmetic\" k1=\"1\" />\n"
+ "<feGaussianBlur stdDeviation=\"%s\" />\n"
+ "<feBlend in2=\"%s\" blend=\"normal\" result=\"blend6\" mode=\"%s\" />\n"
+ "<feComposite in=\"%s\" in2=\"%s\" operator=\"arithmetic\" k1=\"%s\" k2=\"1\" k3=\"%s\" k4=\"0\" result=\"composite2\" />\n"
+ "<feComposite in2=\"SourceGraphic\" in=\"composite2\" operator=\"in\" />\n"
+ "</filter>\n", dist.str().c_str(), globalblend.str().c_str(), a.str().c_str(), r.str().c_str(), g.str().c_str(), b.str().c_str(), c1in.str().c_str(), c1in2.str().c_str(), glow.str().c_str(), b6in2.str().c_str(), glowblend.str().c_str(), c2in.str().c_str(), c2in2.str().c_str(), llight.str().c_str(), glight.str().c_str());
+
+ return _filter;
+}; /* Tritone filter */
+
}; /* namespace Filter */
}; /* namespace Internal */
}; /* namespace Extension */
diff --git a/src/extension/internal/filter/experimental.h b/src/extension/internal/filter/experimental.h
index 15c97202e..a8879720b 100644
--- a/src/extension/internal/filter/experimental.h
+++ b/src/extension/internal/filter/experimental.h
@@ -7,6 +7,12 @@
* Ivan Louette (filters)
* Nicolas Dufour (UI) <nicoduf@yahoo.fr>
*
+ * Experimental filters (no assigned menu)
+ * Chromolitho
+ * Drawing
+ * Posterize
+ * Test filter (should no be used...)
+ *
* Released under GNU GPL, read the file 'COPYING' for more information
*/
/* ^^^ Change the copyright to be you and your e-mail address ^^^ */
@@ -22,6 +28,351 @@ namespace Extension {
namespace Internal {
namespace Filter {
+/**
+ \brief Custom predefined Chromolitho filter.
+
+ Chromo effect with customizable edge drawing and graininess
+
+ Filter's parameters:
+ * Drawing (boolean, default checked) -> Checked = blend1 (in="convolve1"), unchecked = blend1 (in="composite1")
+ * Transparent (boolean, default unchecked) -> Checked = colormatrix5 (in="colormatrix4"), Unchecked = colormatrix5 (in="component1")
+ * Invert (boolean, default false) -> component1 (tableValues) [adds a trailing 0]
+ * Dented (boolean, default false) -> component1 (tableValues) [adds intermediate 0s]
+ * Expand white (0->5, default 1) -> component1 (tableValues) [0="0 1", 5="0 1 1 1 1 1 1"]
+ * Lightness (0->10, default 0) -> composite1 (k1)
+ * Saturation (0.->1., default 1.) -> colormatrix3 (values)
+ * Noise reduction (1->1000, default 20) -> convolve (kernelMatrix, central value -1001->-2000, default -1020)
+ * Drawing blend (enum, default Normal) -> blend1 (mode)
+ * Smoothness (0.01->10, default 1) -> blur1 (stdDeviation)
+ * Grain (boolean, default unchecked) -> Checked = blend2 (in="colormatrix2"), Unchecked = blend2 (in="blur1")
+ * Grain x frequency (0.->100, default 100) -> turbulence1 (baseFrequency, first value)
+ * Grain y frequency (0.->100, default 100) -> turbulence1 (baseFrequency, second value)
+ * Grain complexity (1->5, default 1) -> turbulence1 (numOctaves)
+ * Grain variation (0->1000, default 0) -> turbulence1 (seed)
+ * Grain expansion (1.->50., default 1.) -> colormatrix1 (n-1 value)
+ * Grain erosion (0.->40., default 0.) -> colormatrix1 (nth value) [inverted]
+ * Grain color (boolean, default true) -> colormatrix2 (values)
+ * Grain blend (enum, default Normal) -> blend2 (mode)
+*/
+class Chromolitho : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Chromolitho ( ) : Filter() { };
+ virtual ~Chromolitho ( ) { 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_("Chromolitho, custom -EXP-") "</name>\n"
+ "<id>org.inkscape.effect.filter.Chromolitho</id>\n"
+ "<param name=\"tab\" type=\"notebook\">\n"
+ "<page name=\"optionstab\" _gui-text=\"Options\">\n"
+ "<param name=\"drawing\" gui-text=\"" N_("Drawing mode") "\" type=\"boolean\" >true</param>\n"
+ "<param name=\"dblend\" gui-text=\"" N_("Drawing blend:") "\" type=\"enum\">\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"screen\">Screen</_item>\n"
+ "<_item value=\"lighten\">Lighten</_item>\n"
+ "<_item value=\"darken\">Darken</_item>\n"
+ "</param>\n"
+ "<param name=\"transparent\" gui-text=\"" N_("Transparent") "\" type=\"boolean\" >false</param>\n"
+ "<param name=\"dented\" gui-text=\"" N_("Dented") "\" type=\"boolean\" >false</param>\n"
+ "<param name=\"inverted\" gui-text=\"" N_("Inverted") "\" type=\"boolean\" >false</param>\n"
+ "<param name=\"light\" gui-text=\"" N_("Lightness:") "\" type=\"int\" min=\"0\" max=\"10\">0</param>\n"
+ "<param name=\"saturation\" gui-text=\"" N_("Saturation:") "\" type=\"float\" min=\"0\" max=\"1\">1</param>\n"
+ "<param name=\"noise\" gui-text=\"" N_("Noise reduction:") "\" type=\"int\" min=\"1\" max=\"1000\">20</param>\n"
+ "<param name=\"smooth\" gui-text=\"" N_("Smoothness:") "\" type=\"float\" min=\"0.01\" max=\"10\">1</param>\n"
+ "</page>\n"
+ "<page name=\"graintab\" _gui-text=\"Grain\">\n"
+ "<param name=\"grain\" gui-text=\"" N_("Grain mode") "\" type=\"boolean\" >true</param>\n"
+ "<param name=\"grainxf\" gui-text=\"" N_("X frequency:") "\" type=\"float\" min=\"0\" max=\"100\">100</param>\n"
+ "<param name=\"grainyf\" gui-text=\"" N_("Y frequency:") "\" type=\"float\" min=\"0\" max=\"100\">100</param>\n"
+ "<param name=\"grainc\" gui-text=\"" N_("Complexity:") "\" type=\"int\" min=\"1\" max=\"5\">1</param>\n"
+ "<param name=\"grainv\" gui-text=\"" N_("Variation:") "\" type=\"int\" min=\"0\" max=\"1000\">0</param>\n"
+ "<param name=\"grainexp\" gui-text=\"" N_("Expansion:") "\" type=\"float\" min=\"1\" max=\"50\">1</param>\n"
+ "<param name=\"grainero\" gui-text=\"" N_("Erosion:") "\" type=\"float\" min=\"0\" max=\"40\">0</param>\n"
+ "<param name=\"graincol\" gui-text=\"" N_("Color") "\" type=\"boolean\" >true</param>\n"
+ "<param name=\"gblend\" gui-text=\"" N_("Grain blend:") "\" type=\"enum\">\n"
+ "<_item value=\"normal\">Normal</_item>\n"
+ "<_item value=\"multiply\">Multiply</_item>\n"
+ "<_item value=\"screen\">Screen</_item>\n"
+ "<_item value=\"lighten\">Lighten</_item>\n"
+ "<_item value=\"darken\">Darken</_item>\n"
+ "</param>\n"
+ "</page>\n"
+ "</param>\n"
+ "<effect>\n"
+ "<object-type>all</object-type>\n"
+ "<effects-menu>\n"
+ "<submenu name=\"" N_("Filters") "\">\n"
+ "<submenu name=\"" N_("Experimental") "\"/>\n"
+ "</submenu>\n"
+ "</effects-menu>\n"
+ "<menu-tip>" N_("Chromo effect with customizable edge drawing and graininess") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Chromolitho());
+ };
+};
+
+gchar const *
+Chromolitho::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream b1in;
+ std::ostringstream b2in;
+ std::ostringstream col3in;
+ std::ostringstream transf;
+ std::ostringstream light;
+ std::ostringstream saturation;
+ std::ostringstream noise;
+ std::ostringstream dblend;
+ std::ostringstream smooth;
+ std::ostringstream grain;
+ std::ostringstream grainxf;
+ std::ostringstream grainyf;
+ std::ostringstream grainc;
+ std::ostringstream grainv;
+ std::ostringstream gblend;
+ std::ostringstream grainexp;
+ std::ostringstream grainero;
+ std::ostringstream graincol;
+
+ if (ext->get_param_bool("drawing"))
+ b1in << "convolve1";
+ else
+ b1in << "composite1";
+
+ if (ext->get_param_bool("transparent"))
+ col3in << "colormatrix4";
+ else
+ col3in << "component1";
+ light << ext->get_param_int("light");
+ saturation << ext->get_param_float("saturation");
+ noise << (-1000 - ext->get_param_int("noise"));
+ dblend << ext->get_param_enum("dblend");
+ smooth << ext->get_param_float("smooth");
+
+ if (ext->get_param_bool("dented")) {
+ transf << "0 1 0 1";
+ } else {
+ transf << "0 1 1";
+ }
+ if (ext->get_param_bool("inverted"))
+ transf << " 0";
+
+ if (ext->get_param_bool("grain"))
+ b2in << "colormatrix2";
+ else
+ b2in << "blur1";
+ grainxf << (ext->get_param_float("grainxf") / 100);
+ grainyf << (ext->get_param_float("grainyf") / 100);
+ grainc << ext->get_param_int("grainc");
+ grainv << ext->get_param_int("grainv");
+ gblend << ext->get_param_enum("gblend");
+ grainexp << ext->get_param_float("grainexp");
+ grainero << (-ext->get_param_float("grainero"));
+ if (ext->get_param_bool("graincol"))
+ graincol << "1";
+ else
+ graincol << "0";
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Chromolitho, custom -EXP-\">\n"
+
+ "<feComposite stdDeviation=\"1\" in=\"SourceGraphic\" in2=\"SourceGraphic\" operator=\"arithmetic\" k1=\"%s\" k2=\"1\" result=\"composite1\" />\n"
+ "<feConvolveMatrix in=\"composite1\" kernelMatrix=\"0 250 0 250 %s 250 0 250 0 \" order=\"3 3\" stdDeviation=\"1\" result=\"convolve1\" />\n"
+ "<feBlend in=\"%s\" in2=\"composite1\" mode=\"%s\" blend=\"normal\" stdDeviation=\"1\" result=\"blend1\" />\n"
+ "<feGaussianBlur in=\"blend1\" stdDeviation=\"%s\" result=\"blur1\" />\n"
+ "<feTurbulence baseFrequency=\"%s %s\" numOctaves=\"%s\" seed=\"%s\" type=\"fractalNoise\" result=\"turbulence1\" />\n"
+ "<feColorMatrix values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 %s %s \" result=\"colormatrix1\" />\n"
+ "<feColorMatrix type=\"saturate\" stdDeviation=\"3\" values=\"%s\" result=\"colormatrix2\" />\n"
+ "<feBlend in=\"%s\" in2=\"blur1\" stdDeviation=\"1\" blend=\"normal\" mode=\"%s\" result=\"blend2\" />\n"
+ "<feColorMatrix in=\"blend2\" type=\"saturate\" values=\"%s\" result=\"colormatrix3\" />\n"
+ "<feComponentTransfer in=\"colormatrix3\" stdDeviation=\"2\" result=\"component1\">\n"
+ "<feFuncR type=\"discrete\" tableValues=\"%s\" />\n"
+ "<feFuncG type=\"discrete\" tableValues=\"%s\" />\n"
+ "<feFuncB type=\"discrete\" tableValues=\"%s\" />\n"
+ "</feComponentTransfer>\n"
+ "<feColorMatrix values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 -0.2125 -0.7154 -0.0721 1 0 \" result=\"colormatrix4\" />\n"
+ "<feColorMatrix in=\"%s\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 15 0 \" result=\"colormatrix5\" />\n"
+ "<feComposite in2=\"SourceGraphic\" operator=\"in\" result=\"composite2\" />\n"
+ "</filter>\n", light.str().c_str(), noise.str().c_str(), b1in.str().c_str(), dblend.str().c_str(), smooth.str().c_str(), grainxf.str().c_str(), grainyf.str().c_str(), grainc.str().c_str(), grainv.str().c_str(), grainexp.str().c_str(), grainero.str().c_str(), graincol.str().c_str(), b2in.str().c_str(), gblend.str().c_str(), saturation.str().c_str(), transf.str().c_str(), transf.str().c_str(), transf.str().c_str(), col3in.str().c_str());
+
+ return _filter;
+}; /* Chromolitho filter */
+
+/**
+ \brief Custom predefined Drawing filter.
+
+ Convert images to duochrome drawings.
+
+ Filter's parameters:
+ * Simplification (0.01->10, default 0.7) -> blur1 (stdDeviation)
+ * Lightness (0->50, default 5) -> convolve (kernelMatrix, central value -1000->-1050, default -1005)
+ * Smoothness (0.01->10, default 0.7) -> blur2 (stdDeviation)
+ * Dilatation (3->100, default 6) -> colormatrix3 (n-1th value)
+
+ * Blur (0.01->10., default 1.) -> blur3 (stdDeviation)
+ * Blur spread (3->20, default 6) -> colormatrix5 (n-1th value)
+ * Blur erosion (-2->0, default -2) -> colormatrix5 (nth value)
+
+ * Stroke color (guint, default 205,0,0) -> flood2 (flood-opacity, flood-color)
+ * Image on stroke (boolean, default false) -> composite1 (in="flood2" true-> in="SourceGraphic")
+ * Image on stroke opacity (0.->1., default 1) -> composite3 (k3)
+ * Fill color (guint, default 255,203,0) -> flood3 (flood-opacity, flood-color)
+ * Image on fill (boolean, default false) -> composite2 (in="flood3" true-> in="SourceGraphic")
+ * Image on fill opacity (0.->1., default 1) -> composite3 (k2)
+*/
+
+class Drawing : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Drawing ( ) : Filter() { };
+ virtual ~Drawing ( ) { 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_("Drawing, custom -EXP-") "</name>\n"
+ "<id>org.inkscape.effect.filter.Drawing</id>\n"
+ "<param name=\"tab\" type=\"notebook\">\n"
+ "<page name=\"optionstab\" _gui-text=\"Options\">\n"
+ "<param name=\"simply\" gui-text=\"" N_("Simplification:") "\" type=\"float\" min=\"0.01\" max=\"10\">0.7</param>\n"
+ "<param name=\"light\" gui-text=\"" N_("Lightness:") "\" type=\"int\" min=\"0\" max=\"50\">5</param>\n"
+ "<param name=\"smooth\" gui-text=\"" N_("Smoothness:") "\" type=\"float\" min=\"0.01\" max=\"10\">0.7</param>\n"
+ "<param name=\"dilat\" gui-text=\"" N_("Dilatation:") "\" type=\"int\" min=\"3\" max=\"100\">6</param>\n"
+ "<_param name=\"blurheader\" type=\"groupheader\">Blur</_param>\n"
+ "<param name=\"blur\" gui-text=\"" N_("Level:") "\" type=\"float\" min=\"0.01\" max=\"10\">1</param>\n"
+ "<param name=\"spread\" gui-text=\"" N_("Spread:") "\" type=\"int\" min=\"3\" max=\"20\">6</param>\n"
+ "<param name=\"erosion\" gui-text=\"" N_("Erosion:") "\" type=\"int\" min=\"-2\" max=\"0\">-2</param>\n"
+ "</page>\n"
+ "<page name=\"co11tab\" _gui-text=\"Fill color\">\n"
+ "<param name=\"fcolor\" gui-text=\"" N_("Fill color") "\" type=\"color\">-3473153</param>\n"
+ "<param name=\"iof\" gui-text=\"" N_("Image on fill") "\" type=\"boolean\" >false</param>\n"
+ "<param name=\"iofo\" gui-text=\"" N_("Image on fill opacity:") "\" type=\"float\" min=\"0\" max=\"1\">1</param>\n"
+ "</page>\n"
+ "<page name=\"co12tab\" _gui-text=\"Stroke color\">\n"
+ "<param name=\"scolor\" gui-text=\"" N_("Stroke color") "\" type=\"color\">-855637761</param>\n"
+ "<param name=\"ios\" gui-text=\"" N_("Image on stroke") "\" type=\"boolean\" >false</param>\n"
+ "<param name=\"ioso\" gui-text=\"" N_("Image on stroke opacity:") "\" type=\"float\" min=\"0\" max=\"1\">1</param>\n"
+ "</page>\n"
+ "</param>\n"
+ "<effect>\n"
+ "<object-type>all</object-type>\n"
+ "<effects-menu>\n"
+ "<submenu name=\"" N_("Filters") "\">\n"
+ "<submenu name=\"" N_("Experimental") "\"/>\n"
+ "</submenu>\n"
+ "</effects-menu>\n"
+ "<menu-tip>" N_("Convert images to duochrome drawings") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Drawing());
+ };
+};
+
+gchar const *
+Drawing::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream simply;
+ std::ostringstream light;
+ std::ostringstream smooth;
+ std::ostringstream dilat;
+ std::ostringstream blur;
+ std::ostringstream spread;
+ std::ostringstream erosion;
+ std::ostringstream strokea;
+ std::ostringstream stroker;
+ std::ostringstream strokeg;
+ std::ostringstream strokeb;
+ std::ostringstream ios;
+ std::ostringstream ioso;
+ std::ostringstream filla;
+ std::ostringstream fillr;
+ std::ostringstream fillg;
+ std::ostringstream fillb;
+ std::ostringstream iof;
+ std::ostringstream iofo;
+
+ simply << ext->get_param_float("simply");
+ light << (-1000 - ext->get_param_int("light"));
+ smooth << ext->get_param_float("smooth");
+ dilat << ext->get_param_int("dilat");
+
+ blur << ext->get_param_float("blur");
+ spread << ext->get_param_int("spread");
+ erosion << ext->get_param_int("erosion");
+
+ guint32 fcolor = ext->get_param_color("fcolor");
+ fillr << ((fcolor >> 24) & 0xff);
+ fillg << ((fcolor >> 16) & 0xff);
+ fillb << ((fcolor >> 8) & 0xff);
+ filla << (fcolor & 0xff) / 255.0F;
+ if (ext->get_param_bool("iof"))
+ iof << "SourceGraphic";
+ else
+ iof << "flood3";
+ iofo << ext->get_param_float("iofo");
+
+ guint32 scolor = ext->get_param_color("scolor");
+ stroker << ((scolor >> 24) & 0xff);
+ strokeg << ((scolor >> 16) & 0xff);
+ strokeb << ((scolor >> 8) & 0xff);
+ strokea << (scolor & 0xff) / 255.0F;
+ if (ext->get_param_bool("ios"))
+ ios << "SourceGraphic";
+ else
+ ios << "flood2";
+ ioso << ext->get_param_float("ioso");
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Drawing, custom -EXP-\">\n"
+ "<feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"%s\" result=\"blur1\" />\n"
+ "<feConvolveMatrix in=\"blur1\" order=\"3 3\" kernelMatrix=\"0 250 0 250 %s 250 0 250 0 \" divisor=\"1\" targetX=\"1\" targetY=\"1\" preserveAlpha=\"true\" bias=\"0\" stdDeviation=\"1\" result=\"convolve\" />\n"
+ "<feColorMatrix values=\"0 -100 0 0 1 0 -100 0 0 1 0 -100 0 0 1 0 0 0 1 0 \" result=\"colormatrix1\" />\n"
+ "<feColorMatrix in=\"colormatrix1\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2125 -0.7154 -0.0721 1 0 \" result=\"colormatrix2\" />\n"
+ "<feGaussianBlur stdDeviation=\"%s\" result=\"blur2\" />\n"
+ "<feColorMatrix values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 %s -2 \" result=\"colormatrix3\" />\n"
+ "<feFlood flood-color=\"rgb(255,255,255)\" result=\"flood1\" />\n"
+ "<feBlend in2=\"colormatrix3\" blend=\"normal\" mode=\"multiply\" result=\"blend1\" />\n"
+ "<feComponentTransfer in=\"blend1\" result=\"component1\">\n"
+ "<feFuncR tableValues=\"0 1 1\" type=\"discrete\" />\n"
+ "<feFuncG tableValues=\"0 1 1\" type=\"discrete\" />\n"
+ "<feFuncB tableValues=\"0 1 1\" type=\"discrete\" />\n"
+ "</feComponentTransfer>\n"
+ "<feGaussianBlur stdDeviation=\"%s\" result=\"blur3\" />\n"
+ "<feColorMatrix in=\"blur3\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2125 -0.7154 -0.0721 1 0 \" result=\"colormatrix4\" />\n"
+ "<feColorMatrix stdDeviation=\"3\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 %s %s \" result=\"colormatrix5\" />\n"
+ "<feColorMatrix in=\"colormatrix5\" type=\"saturate\" values=\"1\" result=\"colormatrix6\" />\n"
+ "<feFlood flood-opacity=\"%s\" flood-color=\"rgb(%s,%s,%s)\" stdDeviation=\"3\" result=\"flood2\" />\n"
+ "<feComposite in=\"%s\" in2=\"colormatrix6\" operator=\"in\" result=\"composite1\" />\n"
+ "<feFlood flood-opacity=\"%s\" in=\"colormatrix6\" flood-color=\"rgb(%s,%s,%s)\" result=\"flood3\" />\n"
+ "<feComposite in=\"%s\" in2=\"colormatrix6\" operator=\"out\" result=\"composite2\" />\n"
+ "<feComposite in2=\"composite1\" operator=\"arithmetic\" k2=\"%s\" k3=\"%s\" result=\"composite3\" />\n"
+ "<feComposite in2=\"SourceGraphic\" operator=\"in\" />\n"
+ "</filter>\n", simply.str().c_str(), light.str().c_str(), smooth.str().c_str(), dilat.str().c_str(), blur.str().c_str(), spread.str().c_str(), erosion.str().c_str(), strokea.str().c_str(), stroker.str().c_str(), strokeg.str().c_str(), strokeb.str().c_str(), ios.str().c_str(), filla.str().c_str(), fillr.str().c_str(), fillg.str().c_str(), fillb.str().c_str(), iof.str().c_str(), iofo.str().c_str(), ioso.str().c_str());
+
+ return _filter;
+}; /* Drawing filter */
+
+/**
+ \brief Custom predefined Posterize filter.
+
+ Poster and painting effects.
+
+ Filter's parameters (not finished yet):
+ * Effect type (enum, default "Normal") ->
+ Normal = feComponentTransfer
+ Dented = Normal + intermediate values
+ * Blur (0.01->10., default 5.) -> blur3 (stdDeviation)
+
+*/
class Posterize : public Inkscape::Extension::Internal::Filter::Filter {
protected:
virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
@@ -45,7 +396,7 @@ public:
"</param>\n"
"<param name=\"levels\" gui-text=\"" N_("Levels:") "\" type=\"int\" min=\"1\" max=\"15\">5</param>\n"
"<param name=\"blend\" gui-text=\"" N_("Blend mode:") "\" type=\"enum\">\n"
- "<_item value=\"lighten\">Ligthen</_item>\n"
+ "<_item value=\"lighten\">Lighten</_item>\n"
"<_item value=\"normal\">Normal</_item>\n"
"<_item value=\"darken\">Darken</_item>\n"
"</param>\n"
@@ -65,7 +416,6 @@ public:
"</effect>\n"
"</inkscape-extension>\n", new Posterize());
};
-
};
gchar const *
@@ -89,8 +439,7 @@ Posterize::get_filter_text (Inkscape::Extension::Extension * ext)
presat << ext->get_param_float("presaturation");
postsat << ext->get_param_float("postsaturation");
-
- // TransfertComponenet table values are calculated based on the poster type.
+ // TransfertComponent table values are calculated based on the poster type.
transf << "0";
int levels = ext->get_param_int("levels") + 1;
const gchar *effecttype = ext->get_param_enum("type");
@@ -108,7 +457,6 @@ Posterize::get_filter_text (Inkscape::Extension::Extension * ext)
antialias << "0.5";
else
antialias << "0.01";
-
_filter = g_strdup_printf(
"<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" height=\"1\" width=\"1\" y=\"0\" x=\"0\" inkscape:label=\"Poster and painting, custom -EXP-\">\n"
@@ -124,11 +472,12 @@ Posterize::get_filter_text (Inkscape::Extension::Extension * ext)
"</feComponentTransfer>\n"
"<feColorMatrix type=\"saturate\" values=\"%s\" />\n"
"<feGaussianBlur stdDeviation=\"%s\" />\n"
- "<feComposite in2=\"SourceGraphic\" operator=\"atop\" />\n"
+ "<feComposite in2=\"SourceGraphic\" operator=\"in\" />\n"
"</filter>\n", blur1.str().c_str(), blur2.str().c_str(), blendmode.str().c_str(), presat.str().c_str(), table.str().c_str(), transf.str().c_str(), table.str().c_str(), transf.str().c_str(), table.str().c_str(), transf.str().c_str(), postsat.str().c_str(), antialias.str().c_str());
return _filter;
-};
+}; /* Posterize filter */
+
class TestFilter : public Inkscape::Extension::Internal::Filter::Filter {
protected:
@@ -155,7 +504,6 @@ public:
"</effect>\n"
"</inkscape-extension>\n", new TestFilter());
};
-
};
gchar const *
@@ -181,7 +529,8 @@ TestFilter::get_filter_text (Inkscape::Extension::Extension * ext)
"</filter>\n");
return _filter;
-};
+}; /* Test filter */
+
}; /* namespace Filter */
}; /* namespace Internal */
}; /* namespace Extension */
diff --git a/src/extension/internal/filter/filter-all.cpp b/src/extension/internal/filter/filter-all.cpp
index 6920e1bac..06b942a1f 100644
--- a/src/extension/internal/filter/filter-all.cpp
+++ b/src/extension/internal/filter/filter-all.cpp
@@ -10,7 +10,9 @@
/* Put your filter here */
#include "color.h"
#include "drop-shadow.h"
+#include "morphology.h"
#include "snow.h"
+
#include "experimental.h"
namespace Inkscape {
@@ -23,13 +25,28 @@ void
Filter::filters_all (void )
{
// Here come the filters which are coded in C++ in order to present a parameters dialog
- Duochrome::init();
DropShadow::init();
DropGlow::init();
- ColorizableDropShadow::init();
Snow::init();
+
+ /* Experimental custom predefined filters */
- // Experimental!
+ // Color
+ Colorize::init();
+ Duochrome::init();
+ Quadritone::init();
+ Solarize::init();
+ Tritone::init();
+
+ // Morphology
+ Crosssmooth::init();
+
+ // Shadows and glows
+ ColorizableDropShadow::init();
+
+ // TDB
+ Chromolitho::init();
+ Drawing::init();
Posterize::init();
// Here come the rest of the filters that are read from SVG files in share/filters and
diff --git a/src/extension/internal/filter/filter.cpp b/src/extension/internal/filter/filter.cpp
index c2d80b28b..90dc5dd6f 100644
--- a/src/extension/internal/filter/filter.cpp
+++ b/src/extension/internal/filter/filter.cpp
@@ -132,7 +132,7 @@ Filter::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View *d
std::list<SPItem *> items;
items.insert<GSListConstIterator<SPItem *> >(items.end(), selection->itemList(), NULL);
- Inkscape::XML::Document * xmldoc = sp_document_repr_doc(document->doc());
+ Inkscape::XML::Document * xmldoc = document->doc()->getReprDoc();
Inkscape::XML::Node * defsrepr = SP_OBJECT_REPR(SP_DOCUMENT_DEFS(document->doc()));
for(std::list<SPItem *>::iterator item = items.begin();
diff --git a/src/extension/internal/filter/morphology.h b/src/extension/internal/filter/morphology.h
new file mode 100644
index 000000000..93d44d6fa
--- /dev/null
+++ b/src/extension/internal/filter/morphology.h
@@ -0,0 +1,107 @@
+#ifndef __INKSCAPE_EXTENSION_INTERNAL_FILTER_MORPHOLOGY_H__
+#define __INKSCAPE_EXTENSION_INTERNAL_FILTER_MORPHOLOGY_H__
+/* Change the 'MORPHOLOGY' above to be your file name */
+
+/*
+ * Copyright (C) 2010 Authors:
+ * Ivan Louette (filters)
+ * Nicolas Dufour (UI) <nicoduf@yahoo.fr>
+ *
+ * Morphology filters
+ * Cross-smooth
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+/* ^^^ Change the copyright to be you and your e-mail address ^^^ */
+
+#include "filter.h"
+
+#include "extension/internal/clear-n_.h"
+#include "extension/system.h"
+#include "extension/extension.h"
+
+namespace Inkscape {
+namespace Extension {
+namespace Internal {
+namespace Filter {
+
+/**
+ \brief Custom predefined Cross-smooth filter.
+
+ Smooth the outside of shapes and pictures.
+
+ Filter's parameters:
+ * Type (enum, default "Smooth edges") ->
+ Smooth edges = composite1 (in="SourceGraphic", in2="blur")
+ Smooth all = composite1 (in="blur", in2="blur")
+ * Blur (0.01->10., default 5.) -> blur (stdDeviation)
+*/
+
+class Crosssmooth : public Inkscape::Extension::Internal::Filter::Filter {
+protected:
+ virtual gchar const * get_filter_text (Inkscape::Extension::Extension * ext);
+
+public:
+ Crosssmooth ( ) : Filter() { };
+ virtual ~Crosssmooth ( ) { 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_("Cross-smooth, custom -EXP-") "</name>\n"
+ "<id>org.inkscape.effect.filter.Crosssmooth</id>\n"
+ "<param name=\"type\" gui-text=\"" N_("Type:") "\" type=\"enum\">\n"
+ "<_item value=\"edges\">Smooth edges</_item>\n"
+ "<_item value=\"all\">Smooth all</_item>\n"
+ "</param>\n"
+ "<param name=\"blur\" gui-text=\"" N_("Blur:") "\" type=\"float\" min=\"0.01\" max=\"10\">5</param>\n"
+ "<effect>\n"
+ "<object-type>all</object-type>\n"
+ "<effects-menu>\n"
+ "<submenu name=\"" N_("Filters") "\">\n"
+ "<submenu name=\"" N_("Experimental") "\"/>\n"
+ "</submenu>\n"
+ "</effects-menu>\n"
+ "<menu-tip>" N_("Smooth edges and angles of shapes") "</menu-tip>\n"
+ "</effect>\n"
+ "</inkscape-extension>\n", new Crosssmooth());
+ };
+
+};
+
+gchar const *
+Crosssmooth::get_filter_text (Inkscape::Extension::Extension * ext)
+{
+ if (_filter != NULL) g_free((void *)_filter);
+
+ std::ostringstream blur;
+ std::ostringstream c1in;
+
+ blur << ext->get_param_float("blur");
+
+ const gchar *type = ext->get_param_enum("type");
+ if((g_ascii_strcasecmp("all", type) == 0)) {
+ c1in << "blur";
+ } else {
+ c1in << "SourceGraphic";
+ }
+
+ _filter = g_strdup_printf(
+ "<filter xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" color-interpolation-filters=\"sRGB\" inkscape:label=\"Cross-smooth, custom -EXP-\">\n"
+ "<feGaussianBlur stdDeviation=\"%s\" result=\"blur\" />\n"
+ "<feComposite in=\"%s\" in2=\"blur\" operator=\"atop\" result=\"composite1\" />\n"
+ "<feComposite in2=\"composite1\" operator=\"in\" result=\"composite2\" />\n"
+ "<feComposite in2=\"composite2\" operator=\"in\" result=\"composite3\" />\n"
+ "<feColorMatrix values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10 \" result=\"colormatrix\" />\n"
+ "</filter>\n", blur.str().c_str(), c1in.str().c_str());
+
+ return _filter;
+}; /* Crosssmooth filter */
+
+}; /* namespace Filter */
+}; /* namespace Internal */
+}; /* namespace Extension */
+}; /* namespace Inkscape */
+
+/* Change the 'COLOR' below to be your file name */
+#endif /* __INKSCAPE_EXTENSION_INTERNAL_FILTER_MORPHOLOGY_H__ */
diff --git a/src/extension/internal/gdkpixbuf-input.cpp b/src/extension/internal/gdkpixbuf-input.cpp
index ff272d28d..c3a30a2f0 100644
--- a/src/extension/internal/gdkpixbuf-input.cpp
+++ b/src/extension/internal/gdkpixbuf-input.cpp
@@ -55,9 +55,9 @@ GdkpixbufInput::open(Inkscape::Extension::Input *mod, char const *uri)
mime_type = "image/png";
}
- doc = sp_document_new(NULL, TRUE, TRUE);
- bool saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, false); // no need to undo in this temporary document
+ doc = SPDocument::createNewDoc(NULL, TRUE, TRUE);
+ bool saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false); // no need to undo in this temporary document
double width = gdk_pixbuf_get_width(pb);
double height = gdk_pixbuf_get_height(pb);
@@ -79,7 +79,7 @@ GdkpixbufInput::open(Inkscape::Extension::Input *mod, char const *uri)
}
// Create image node
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *image_node = xml_doc->createElement("svg:image");
sp_repr_set_svg_double(image_node, "width", width);
sp_repr_set_svg_double(image_node, "height", height);
@@ -100,11 +100,11 @@ GdkpixbufInput::open(Inkscape::Extension::Input *mod, char const *uri)
g_object_unref(pb);
// Add it to the current layer
- SP_DOCUMENT_ROOT(doc)->appendChildRepr(image_node);
+ doc->getRoot()->appendChildRepr(image_node);
Inkscape::GC::release(image_node);
fit_canvas_to_drawing(doc);
// restore undo, as now this document may be shown to the user if a bitmap was opened
- sp_document_set_undo_sensitive(doc, saved);
+ DocumentUndo::setUndoSensitive(doc, saved);
} else {
printf("GdkPixbuf loader failed\n");
}
diff --git a/src/extension/internal/gimpgrad.cpp b/src/extension/internal/gimpgrad.cpp
index 5b3e0c16e..e92a4e17e 100644
--- a/src/extension/internal/gimpgrad.cpp
+++ b/src/extension/internal/gimpgrad.cpp
@@ -5,6 +5,7 @@
/*
* Authors:
* Ted Gould <ted@gould.cx>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2005 Authors
*
@@ -256,7 +257,7 @@ GimpGrad::open (Inkscape::Extension::Input */*module*/, gchar const *filename)
fclose(gradient);
- return sp_document_new_from_mem(outsvg.c_str(), outsvg.length(), TRUE);
+ return SPDocument::createNewDocFromMem(outsvg.c_str(), outsvg.length(), TRUE);
}
error:
diff --git a/src/extension/internal/grid.cpp b/src/extension/internal/grid.cpp
index ed41dd97b..a19ab7538 100644
--- a/src/extension/internal/grid.cpp
+++ b/src/extension/internal/grid.cpp
@@ -6,6 +6,7 @@
/*
* Copyright (C) 2004-2005 Ted Gould <ted@gould.cx>
* Copyright (C) 2007 MenTaLguY <mental@rydia.net>
+ * Abhishek Sharma
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
@@ -87,14 +88,14 @@ Grid::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View *doc
/* get page size */
SPDocument * doc = document->doc();
bounding_area = Geom::Rect( Geom::Point(0,0),
- Geom::Point(sp_document_width(doc), sp_document_height(doc)) );
+ Geom::Point(doc->getWidth(), doc->getHeight()) );
} else {
Geom::OptRect bounds = selection->bounds();
if (bounds) {
bounding_area = *bounds;
}
- gdouble doc_height = sp_document_height(document->doc());
+ gdouble doc_height = (document->doc())->getHeight();
Geom::Rect temprec = Geom::Rect(Geom::Point(bounding_area.min()[Geom::X], doc_height - bounding_area.min()[Geom::Y]),
Geom::Point(bounding_area.max()[Geom::X], doc_height - bounding_area.max()[Geom::Y]));
@@ -111,8 +112,10 @@ Grid::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View *doc
path_data = build_lines(bounding_area,
offsets, spacings);
- Inkscape::XML::Document * xml_doc = sp_document_repr_doc(document->doc());
- Inkscape::XML::Node * current_layer = static_cast<SPDesktop *>(document)->currentLayer()->repr;
+ Inkscape::XML::Document * xml_doc = document->doc()->getReprDoc();
+
+ //XML Tree being used directly here while it shouldn't be.
+ Inkscape::XML::Node * current_layer = static_cast<SPDesktop *>(document)->currentLayer()->getRepr();
Inkscape::XML::Node * path = xml_doc->createElement("svg:path");
path->setAttribute("d", path_data.c_str());
diff --git a/src/extension/internal/javafx-out.cpp b/src/extension/internal/javafx-out.cpp
index b371b0105..7098027c7 100644
--- a/src/extension/internal/javafx-out.cpp
+++ b/src/extension/internal/javafx-out.cpp
@@ -9,6 +9,7 @@
* Silveira Neto <silveiraneto@gmail.com>
* Jim Clarke <Jim.Clarke@sun.com>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008,2009 Authors
*
@@ -493,7 +494,7 @@ bool JavaFXOutput::doCurve(SPItem *item, const String &id)
// convert the path to only lineto's and cubic curveto's:
Geom::Scale yflip(1.0, -1.0);
- Geom::Matrix tf = sp_item_i2d_affine(item) * yflip;
+ Geom::Matrix tf = item->i2d_affine() * yflip;
Geom::PathVector pathv = pathv_to_linear_and_cubic_beziers( curve->get_pathvector() * tf );
//Count the NR_CURVETOs/LINETOs (including closing line segment)
@@ -635,7 +636,7 @@ bool JavaFXOutput::doCurve(SPItem *item, const String &id)
// convert the path to only lineto's and cubic curveto's:
Geom::Scale yflip(1.0, -1.0);
- Geom::Matrix tf = sp_item_i2d_affine(item) * yflip;
+ Geom::Matrix tf = item->i2d_affine() * yflip;
Geom::PathVector pathv = pathv_to_linear_and_cubic_beziers( curve->get_pathvector() * tf );
//Count the NR_CURVETOs/LINETOs (including closing line segment)
diff --git a/src/extension/internal/latex-pstricks-out.cpp b/src/extension/internal/latex-pstricks-out.cpp
index 4a469a750..1477d5daf 100644
--- a/src/extension/internal/latex-pstricks-out.cpp
+++ b/src/extension/internal/latex-pstricks-out.cpp
@@ -1,6 +1,8 @@
/*
* Authors:
* Michael Forbes <miforbes@mbhs.edu>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004 Authors
*
@@ -55,7 +57,7 @@ LatexOutput::save(Inkscape::Extension::Output *mod2, SPDocument *doc, gchar cons
gchar * oldoutput;
unsigned int ret;
- sp_document_ensure_up_to_date (doc);
+ doc->ensureUpToDate();
mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_LATEX);
oldconst = mod->get_param_string("destination");
@@ -66,16 +68,16 @@ LatexOutput::save(Inkscape::Extension::Output *mod2, SPDocument *doc, gchar cons
context.module = mod;
/* fixme: This has to go into module constructor somehow */
/* Create new arena */
- mod->base = SP_ITEM (sp_document_root (doc));
+ mod->base = SP_ITEM(doc->getRoot());
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);
+ mod->dkey = SPItem::display_key_new (1);
+ mod->root = (mod->base)->invoke_show (mod->arena, mod->dkey, SP_ITEM_SHOW_DISPLAY);
/* Print document */
ret = mod->begin (doc);
- sp_item_invoke_print (mod->base, &context);
+ (mod->base)->invoke_print (&context);
ret = mod->finish ();
/* Release arena */
- sp_item_invoke_hide (mod->base, mod->dkey);
+ (mod->base)->invoke_hide (mod->dkey);
mod->base = NULL;
mod->root = NULL;
nr_object_unref ((NRObject *) mod->arena);
diff --git a/src/extension/internal/latex-pstricks.cpp b/src/extension/internal/latex-pstricks.cpp
index ed6024adf..44b64c5f8 100644
--- a/src/extension/internal/latex-pstricks.cpp
+++ b/src/extension/internal/latex-pstricks.cpp
@@ -1,10 +1,9 @@
-#define __SP_LATEX_C__
-
/*
* LaTeX Printing
*
* Author:
* Michael Forbes <miforbes@mbhs.edu>
+ * Abhishek Sharma
*
* Copyright (C) 2004 Authors
*
@@ -128,8 +127,8 @@ PrintLatex::begin (Inkscape::Extension::Print *mod, SPDocument *doc)
}
// width and height in pt
- _width = sp_document_width(doc) * PT_PER_PX;
- _height = sp_document_height(doc) * PT_PER_PX;
+ _width = doc->getWidth() * PT_PER_PX;
+ _height = doc->getHeight() * PT_PER_PX;
if (res >= 0) {
@@ -139,10 +138,10 @@ PrintLatex::begin (Inkscape::Extension::Print *mod, SPDocument *doc)
os << "\\psset{xunit=.5pt,yunit=.5pt,runit=.5pt}\n";
// from now on we can output px, but they will be treated as pt
- os << "\\begin{pspicture}(" << sp_document_width(doc) << "," << sp_document_height(doc) << ")\n";
+ os << "\\begin{pspicture}(" << doc->getWidth() << "," << doc->getHeight() << ")\n";
}
- m_tr_stack.push( Geom::Scale(1, -1) * Geom::Translate(0, sp_document_height(doc)));
+ m_tr_stack.push( Geom::Scale(1, -1) * Geom::Translate(0, doc->getHeight()));
return fprintf(_stream, "%s", os.str().c_str());
}
diff --git a/src/extension/internal/latex-text-renderer.cpp b/src/extension/internal/latex-text-renderer.cpp
index b37316d8f..fd99afe31 100644
--- a/src/extension/internal/latex-text-renderer.cpp
+++ b/src/extension/internal/latex-text-renderer.cpp
@@ -1,5 +1,3 @@
-#define EXTENSION_INTERNAL_LATEX_TEXT_RENDERER_CPP
-
/** \file
* Rendering LaTeX file (pdf/eps/ps+latex output)
*
@@ -9,6 +7,8 @@
* Authors:
* Johan Engelen <goejendaagh@zonnet.nl>
* Miklos Erdelyi <erdelyim@gmail.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006-2010 Authors
*
@@ -58,7 +58,7 @@ latex_render_document_text_to_file( SPDocument *doc, gchar const *filename,
const gchar * const exportId, bool exportDrawing, bool exportCanvas,
bool pdflatex)
{
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
SPItem *base = NULL;
@@ -70,7 +70,7 @@ latex_render_document_text_to_file( SPDocument *doc, gchar const *filename,
}
else {
// we want to export the entire document from root
- base = SP_ITEM(sp_document_root(doc));
+ base = SP_ITEM(doc->getRoot());
pageBoundingBox = !exportDrawing;
}
@@ -311,7 +311,7 @@ LaTeXTextRenderer::sp_text_render(SPItem *item)
}
// get rotation
- Geom::Matrix i2doc = sp_item_i2doc_affine(item);
+ Geom::Matrix i2doc = item->i2doc_affine();
Geom::Matrix wotransl = i2doc.without_translation();
double degrees = -180/M_PI * Geom::atan2(wotransl.xAxis());
bool has_rotation = !Geom::are_near(degrees,0.);
@@ -412,7 +412,7 @@ Flowing in rectangle is possible, not in arb shape.
}
// get rotation
- Geom::Matrix i2doc = sp_item_i2doc_affine(item);
+ Geom::Matrix i2doc = item->i2doc_affine();
Geom::Matrix wotransl = i2doc.without_translation();
double degrees = -180/M_PI * Geom::atan2(wotransl.xAxis());
bool has_rotation = !Geom::are_near(degrees,0.);
@@ -490,15 +490,16 @@ LaTeXTextRenderer::setupDocument(SPDocument *doc, bool pageBoundingBox, SPItem *
{
// The boundingbox calculation here should be exactly the same as the one by CairoRenderer::setupDocument !
- if (!base)
- base = SP_ITEM(sp_document_root(doc));
+ if (!base) {
+ base = SP_ITEM(doc->getRoot());
+ }
Geom::OptRect d;
if (pageBoundingBox) {
d = Geom::Rect( Geom::Point(0,0),
- Geom::Point(sp_document_width(doc), sp_document_height(doc)) );
+ Geom::Point(doc->getWidth(), doc->getHeight()) );
} else {
- sp_item_invoke_bbox(base, d, sp_item_i2d_affine(base), TRUE, SPItem::RENDERING_BBOX);
+ base->invoke_bbox( d, base->i2d_affine(), TRUE, SPItem::RENDERING_BBOX);
}
if (!d) {
g_message("LaTeXTextRenderer: could not retrieve boundingbox.");
@@ -517,7 +518,7 @@ LaTeXTextRenderer::setupDocument(SPDocument *doc, bool pageBoundingBox, SPItem *
}
// flip y-axis
- push_transform( Geom::Scale(1,-1) * Geom::Translate(0, sp_document_height(doc)) );
+ push_transform( Geom::Scale(1,-1) * Geom::Translate(0, doc->getHeight()) );
// write the info to LaTeX
Inkscape::SVGOStringStream os;
diff --git a/src/extension/internal/odf.cpp b/src/extension/internal/odf.cpp
index 4f3f1ac89..b5c842a40 100644
--- a/src/extension/internal/odf.cpp
+++ b/src/extension/internal/odf.cpp
@@ -14,6 +14,7 @@
*
* Authors:
* Bob Jamison
+ * Abhishek Sharma
*
* Copyright (C) 2006, 2007 Bob Jamison
*
@@ -945,9 +946,9 @@ static Glib::ustring formatTransform(Geom::Matrix &tf)
static Geom::Matrix getODFTransform(const SPItem *item)
{
//### Get SVG-to-ODF transform
- Geom::Matrix tf (sp_item_i2d_affine(item));
+ Geom::Matrix tf (item->i2d_affine());
//Flip Y into document coordinates
- double doc_height = sp_document_height(SP_ACTIVE_DOCUMENT);
+ double doc_height = SP_ACTIVE_DOCUMENT->getHeight();
Geom::Matrix doc2dt_tf = Geom::Matrix(Geom::Scale(1.0, -1.0));
doc2dt_tf = doc2dt_tf * Geom::Matrix(Geom::Translate(0, doc_height));
tf = tf * doc2dt_tf;
@@ -964,11 +965,11 @@ static Geom::Matrix getODFTransform(const SPItem *item)
*/
static Geom::OptRect getODFBoundingBox(const SPItem *item)
{
- Geom::OptRect bbox_temp = sp_item_bbox_desktop((SPItem *)item);
+ Geom::OptRect bbox_temp = ((SPItem *)item)->getBboxDesktop();
Geom::OptRect bbox;
if (bbox_temp) {
bbox = *bbox_temp;
- double doc_height = sp_document_height(SP_ACTIVE_DOCUMENT);
+ double doc_height = SP_ACTIVE_DOCUMENT->getHeight();
Geom::Matrix doc2dt_tf = Geom::Matrix(Geom::Scale(1.0, -1.0));
doc2dt_tf = doc2dt_tf * Geom::Matrix(Geom::Translate(0, doc_height));
bbox = *bbox * doc2dt_tf;
@@ -2002,7 +2003,7 @@ bool OdfOutput::writeTree(Writer &couts, Writer &souts,
else if (SP_IS_SHAPE(item))
{
//g_message("### %s is a shape", nodeName.c_str());
- curve = sp_shape_get_curve(SP_SHAPE(item));
+ curve = SP_SHAPE(item)->getCurve();
}
else if (SP_IS_TEXT(item) || SP_IS_FLOWTEXT(item))
{
diff --git a/src/extension/internal/odf.h b/src/extension/internal/odf.h
index 3854ddfe1..9ad261098 100644
--- a/src/extension/internal/odf.h
+++ b/src/extension/internal/odf.h
@@ -11,6 +11,7 @@
*
* Authors:
* Bob Jamison
+ * Abhishek Sharma
*
* Copyright (C) 2006 Bob Jamison
*
@@ -47,7 +48,7 @@
#include <dom/util/ziptool.h>
#include <dom/io/domstream.h>
-
+#include "sp-item.h"
namespace Inkscape
{
diff --git a/src/extension/internal/pdf-input-cairo.cpp b/src/extension/internal/pdf-input-cairo.cpp
index 937fefb11..2c7ea3b33 100644
--- a/src/extension/internal/pdf-input-cairo.cpp
+++ b/src/extension/internal/pdf-input-cairo.cpp
@@ -3,6 +3,7 @@
*
* Authors:
* miklos erdelyi
+ * Abhishek Sharma
*
* Copyright (C) 2007 Authors
*
@@ -58,7 +59,7 @@ PdfInputCairo::open(Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
cairo_destroy(cr);
cairo_surface_destroy(surface);
- SPDocument * doc = sp_document_new_from_mem(output->c_str(), output->length(), TRUE);
+ SPDocument * doc = SPDocument::createNewDocFromMem(output->c_str(), output->length(), TRUE);
delete output;
g_object_unref(page);
diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp
index 8dd4698b5..ae3e473a5 100644
--- a/src/extension/internal/pdfinput/pdf-input.cpp
+++ b/src/extension/internal/pdfinput/pdf-input.cpp
@@ -3,6 +3,7 @@
*
* Authors:
* miklos erdelyi
+ * Abhishek Sharma
*
* Copyright (C) 2007 Authors
*
@@ -659,9 +660,9 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
Catalog *catalog = pdf_doc->getCatalog();
Page *page = catalog->getPage(page_num);
- SPDocument *doc = sp_document_new(NULL, TRUE, TRUE);
- bool saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, false); // No need to undo in this temporary document
+ SPDocument *doc = SPDocument::createNewDoc(NULL, TRUE, TRUE);
+ bool saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false); // No need to undo in this temporary document
// Create builder
gchar *docname = g_path_get_basename(uri);
@@ -735,7 +736,7 @@ PdfInput::open(::Inkscape::Extension::Input * /*mod*/, const gchar * uri) {
delete dlg;
// Restore undo
- sp_document_set_undo_sensitive(doc, saved);
+ DocumentUndo::setUndoSensitive(doc, saved);
return doc;
}
diff --git a/src/extension/internal/pdfinput/pdf-parser.cpp b/src/extension/internal/pdfinput/pdf-parser.cpp
index b37cbb777..ef31cd39f 100644
--- a/src/extension/internal/pdfinput/pdf-parser.cpp
+++ b/src/extension/internal/pdfinput/pdf-parser.cpp
@@ -1874,6 +1874,9 @@ void PdfParser::doPatchMeshShFill(GfxPatchMeshShading *shading) {
void PdfParser::fillPatch(GfxPatch *patch, int nComps, int depth) {
GfxPatch patch00, patch01, patch10, patch11;
+#ifdef POPPLER_NEW_GFXPATCH
+ GfxColor color;
+#endif
double xx[4][8], yy[4][8];
double xxm, yym;
double patchColorDelta = colorDeltas[pdfPatchMeshShading-1];
@@ -1890,9 +1893,16 @@ void PdfParser::fillPatch(GfxPatch *patch, int nComps, int depth) {
> patchColorDelta) {
break;
}
+#ifdef POPPLER_NEW_GFXPATCH
+ color.c[i] = GfxColorComp(patch->color[0][0].c[i]);
+#endif
}
if (i == nComps || depth == maxDepths[pdfPatchMeshShading-1]) {
+#ifdef POPPLER_NEW_GFXPATCH
+ state->setFillColor(&color);
+#else
state->setFillColor(&patch->color[0][0]);
+#endif
state->moveTo(patch->x[0][0], patch->y[0][0]);
state->curveTo(patch->x[0][1], patch->y[0][1],
patch->x[0][2], patch->y[0][2],
diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
index e343dbf33..8b414239a 100644
--- a/src/extension/internal/pdfinput/svg-builder.cpp
+++ b/src/extension/internal/pdfinput/svg-builder.cpp
@@ -3,6 +3,7 @@
*
* Authors:
* miklos erdelyi
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2007 Authors
*
@@ -77,12 +78,13 @@ struct SvgTransparencyGroup {
*
*/
-SvgBuilder::SvgBuilder(SPDocument *document, gchar *docname, XRef *xref) {
+SvgBuilder::SvgBuilder(SPDocument *document, gchar *docname, XRef *xref)
+{
_is_top_level = true;
_doc = document;
_docname = docname;
_xref = xref;
- _xml_doc = sp_document_repr_doc(_doc);
+ _xml_doc = _doc->getReprDoc();
_container = _root = _doc->rroot;
_root->setAttribute("xml:space", "preserve");
_init();
diff --git a/src/extension/internal/pov-out.cpp b/src/extension/internal/pov-out.cpp
index 7b1fe8b87..a130b6923 100644
--- a/src/extension/internal/pov-out.cpp
+++ b/src/extension/internal/pov-out.cpp
@@ -10,6 +10,7 @@
*
* Authors:
* Bob Jamison <ishmal@inkscape.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2008 Authors
*
@@ -300,7 +301,7 @@ bool PovOutput::doCurve(SPItem *item, const String &id)
povShapes.push_back(shapeInfo); //passed all tests. save the info
// convert the path to only lineto's and cubic curveto's:
- Geom::Matrix tf = sp_item_i2d_affine(item);
+ Geom::Matrix tf = item->i2d_affine();
Geom::PathVector pathv = pathv_to_linear_and_cubic_beziers( curve->get_pathvector() * tf );
/*
diff --git a/src/extension/internal/svg.cpp b/src/extension/internal/svg.cpp
index b10aa87ec..946ff22fe 100644
--- a/src/extension/internal/svg.cpp
+++ b/src/extension/internal/svg.cpp
@@ -6,6 +6,8 @@
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Ted Gould <ted@gould.cx>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2002-2003 Authors
*
@@ -182,19 +184,19 @@ Svg::open (Inkscape::Extension::Input */*mod*/, const gchar *uri)
#ifdef WITH_GNOME_VFS
if (!gnome_vfs_initialized() || gnome_vfs_uri_is_local(gnome_vfs_uri_new(uri))) {
// Use built-in loader instead of VFS for this
- return sp_document_new(uri, TRUE);
+ return SPDocument::createNewDoc(uri, TRUE);
}
gchar * buffer = _load_uri(uri);
if (buffer == NULL) {
g_warning("Error: Could not open file '%s' with VFS\n", uri);
return NULL;
}
- SPDocument * doc = sp_document_new_from_mem(buffer, strlen(buffer), 1);
+ SPDocument * doc = SPDocument::createNewDocFromMem(buffer, strlen(buffer), 1);
g_free(buffer);
return doc;
#else
- return sp_document_new (uri, TRUE);
+ return SPDocument::createNewDoc(uri, TRUE);
#endif
}
@@ -237,17 +239,17 @@ Svg::save(Inkscape::Extension::Output *mod, SPDocument *doc, gchar const *filena
Inkscape::XML::Document *rdoc = NULL;
Inkscape::XML::Node *repr = NULL;
if (exportExtensions) {
- repr = sp_document_repr_root (doc);
+ repr = doc->getReprRoot();
} else {
rdoc = sp_repr_document_new ("svg:svg");
repr = rdoc->root();
- repr = sp_document_root (doc)->updateRepr(rdoc, repr, SP_OBJECT_WRITE_BUILD);
+ repr = doc->getRoot()->updateRepr(rdoc, repr, SP_OBJECT_WRITE_BUILD);
pruneExtendedAttributes(repr);
}
if (!sp_repr_save_rebased_file(repr->document(), filename, SP_SVG_NS_URI,
- doc->base, filename)) {
+ doc->getBase(), filename)) {
throw Inkscape::Extension::Output::save_failed();
}
diff --git a/src/extension/internal/win32.cpp b/src/extension/internal/win32.cpp
index 0c711824c..8b4ff13c8 100644
--- a/src/extension/internal/win32.cpp
+++ b/src/extension/internal/win32.cpp
@@ -3,6 +3,7 @@
*/
/* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* This code is in public domain
*/
@@ -226,10 +227,10 @@ PrintWin32::begin (Inkscape::Extension::Print *mod, SPDocument *doc)
};
int res;
- _PageWidth = sp_document_width (doc);
- _PageHeight = sp_document_height (doc);
+ _PageWidth = doc->getWidth ();
+ _PageHeight = doc->getHeight ();
- di.lpszDocName = SP_DOCUMENT_NAME (doc);
+ di.lpszDocName = doc->getName();
SPWin32Modal = TRUE;
diff --git a/src/extension/internal/wpg-input.cpp b/src/extension/internal/wpg-input.cpp
index c37d5705b..70fa28967 100644
--- a/src/extension/internal/wpg-input.cpp
+++ b/src/extension/internal/wpg-input.cpp
@@ -6,6 +6,7 @@
*
* Authors:
* Ted Gould <ted@gould.cx>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Authors
*
@@ -86,7 +87,7 @@ WpgInput::open(Inkscape::Extension::Input * mod, const gchar * uri) {
//printf("I've got a doc: \n%s", painter.document.c_str());
- SPDocument * doc = sp_document_new_from_mem(output.cstr(), strlen(output.cstr()), TRUE);
+ SPDocument * doc = SPDocument::createNewDocFromMem(output.cstr(), strlen(output.cstr()), TRUE);
delete input;
return doc;
}
diff --git a/src/extension/param/notebook.cpp b/src/extension/param/notebook.cpp
index 86e3cefe6..e1ab1de6d 100644
--- a/src/extension/param/notebook.cpp
+++ b/src/extension/param/notebook.cpp
@@ -57,7 +57,7 @@ public:
Gtk::Widget * get_widget(SPDocument * doc, Inkscape::XML::Node * node, sigc::signal<void> * changeSignal);
void paramString (std::list <std::string> &list);
gchar * get_guitext (void) {return _text;};
-
+ Parameter * get_param (const gchar * name);
}; /* class ParamNotebookPage */
@@ -381,7 +381,45 @@ ParamNotebookWdg::changed_page(GtkNotebookPage */*page*/,
return;
}
+/** \brief Search the parameter's name in the notebook content */
+Parameter *
+ParamNotebook::get_param(const gchar * name)
+{
+ if (name == NULL) {
+ throw Extension::param_not_exist();
+ }
+ for (GSList * pglist = pages; pglist != NULL; pglist = g_slist_next(pglist)) {
+ ParamNotebookPage * page = reinterpret_cast<ParamNotebookPage *>(pglist->data);
+ Parameter * subparam = page->get_param(name);
+ if (subparam) {
+ return subparam;
+ }
+ }
+
+ return NULL;
+}
+/** \brief Search the parameter's name in the page content */
+Parameter *
+ParamNotebookPage::get_param(const gchar * name)
+{
+ if (name == NULL) {
+ throw Extension::param_not_exist();
+ }
+ if (this->parameters == NULL) {
+ // the list of parameters is empty
+ throw Extension::param_not_exist();
+ }
+
+ for (GSList * list = this->parameters; list != NULL; list = g_slist_next(list)) {
+ Parameter * param = static_cast<Parameter*>(list->data);
+ if (!strcmp(param->name(), name)) {
+ return param;
+ }
+ }
+
+ return NULL;
+}
/**
\brief Creates a Notebook widget for a notebook parameter
diff --git a/src/extension/param/notebook.h b/src/extension/param/notebook.h
index 24d4ebfc1..fb21c9b63 100644
--- a/src/extension/param/notebook.h
+++ b/src/extension/param/notebook.h
@@ -43,6 +43,8 @@ public:
Gtk::Widget * get_widget(SPDocument * doc, Inkscape::XML::Node * node, sigc::signal<void> * changeSignal);
void string (std::list <std::string> &list);
+ Parameter * get_param (const gchar * name);
+
const gchar * get (const SPDocument * /*doc*/, const Inkscape::XML::Node * /*node*/) { return _value; }
const gchar * set (const int in, SPDocument * doc, Inkscape::XML::Node * node);
}; /* class ParamNotebook */
diff --git a/src/extension/param/parameter.cpp b/src/extension/param/parameter.cpp
index 1347653a2..ac7c8b8dd 100644
--- a/src/extension/param/parameter.cpp
+++ b/src/extension/param/parameter.cpp
@@ -4,6 +4,7 @@
/* Author:
* Ted Gould <ted@gould.cx>
* Johan Engelen <johan@shouraizou.nl>
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2005-2007 Authors
*
@@ -155,8 +156,6 @@ Parameter::make (Inkscape::XML::Node * in_repr, Inkscape::Extension::Extension *
return param;
}
-
-
/** \brief Wrapper to cast to the object and use it's function. */
bool
Parameter::get_bool (const SPDocument * doc, const Inkscape::XML::Node * node)
@@ -347,10 +346,9 @@ Parameter::new_child (Inkscape::XML::Node * parent)
return retval;
}
-Inkscape::XML::Node *
-Parameter::document_param_node (SPDocument * doc)
+Inkscape::XML::Node *Parameter::document_param_node(SPDocument * doc)
{
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node * defs = SP_OBJECT_REPR(SP_DOCUMENT_DEFS(doc));
Inkscape::XML::Node * params = NULL;
@@ -409,6 +407,13 @@ Parameter::string (std::list <std::string> &list)
return;
}
+/** \brief All the code in Notebook::get_param to get the notebook content */
+Parameter *
+Parameter::get_param(const gchar * name)
+{
+ return NULL;
+}
+
Glib::ustring const extension_pref_root = "/extensions/";
} /* namespace Extension */
diff --git a/src/extension/param/parameter.h b/src/extension/param/parameter.h
index beddf5936..d8ed68439 100644
--- a/src/extension/param/parameter.h
+++ b/src/extension/param/parameter.h
@@ -85,6 +85,7 @@ public:
Parameter(name, guitext, NULL, Parameter::SCOPE_USER, false, NULL, ext);
};
virtual ~Parameter (void);
+
bool get_bool (const SPDocument * doc,
const Inkscape::XML::Node * node);
int get_int (const SPDocument * doc,
@@ -120,6 +121,8 @@ public:
virtual void string (std::list <std::string> &list);
virtual void string (std::string &string);
+
+ virtual Parameter * get_param (const gchar * name);
};
} /* namespace Extension */
diff --git a/src/extension/print.h b/src/extension/print.h
index 8ae71b8e6..0f0435c0f 100644
--- a/src/extension/print.h
+++ b/src/extension/print.h
@@ -1,6 +1,7 @@
/*
* Authors:
* Ted Gould <ted@gould.cx>
+ * Abhishek Sharma
*
* Copyright (C) 2002-2004 Authors
*
@@ -14,7 +15,7 @@
#include "display/nr-arena-forward.h"
#include "forward.h"
-
+#include "sp-item.h"
namespace Inkscape {
namespace Extension {
diff --git a/src/extension/system.cpp b/src/extension/system.cpp
index 5412a5cc0..cf58f2733 100644
--- a/src/extension/system.cpp
+++ b/src/extension/system.cpp
@@ -7,6 +7,8 @@
* Authors:
* Ted Gould <ted@gould.cx>
* Johan Engelen <johan@shouraizou.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006-2007 Johan Engelen
* Copyright (C) 2002-2004 Ted Gould
@@ -111,7 +113,7 @@ open(Extension *key, gchar const *filename)
to make sure for this release -- TJG */
doc->setModifiedSinceSave(false);
- sp_document_set_uri(doc, filename);
+ doc->setUri(filename);
return doc;
}
@@ -256,11 +258,11 @@ save(Extension *key, SPDocument *doc, gchar const *filename, bool setextension,
throw Output::file_read_only();
}
- Inkscape::XML::Node *repr = sp_document_repr_root(doc);
+ Inkscape::XML::Node *repr = doc->getReprRoot();
// remember attributes in case this is an unofficial save and/or overwrite fails
- gchar *saved_uri = g_strdup(doc->uri);
+ gchar *saved_uri = g_strdup(doc->getURI());
bool saved_modified = false;
gchar *saved_output_extension = NULL;
gchar *saved_dataloss = NULL;
@@ -268,14 +270,14 @@ save(Extension *key, SPDocument *doc, gchar const *filename, bool setextension,
saved_output_extension = g_strdup(get_file_save_extension(save_method).c_str());
saved_dataloss = g_strdup(repr->attribute("inkscape:dataloss"));
if (official) {
- /* The document is changing name/uri. */
- sp_document_change_uri_and_hrefs(doc, fileName);
+ // The document is changing name/uri.
+ doc->changeUriAndHrefs(fileName);
}
// Update attributes:
{
- bool const saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, false);
+ bool const saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false);
{
// also save the extension for next use
store_file_extension_in_prefs (omod->get_id(), save_method);
@@ -285,7 +287,7 @@ save(Extension *key, SPDocument *doc, gchar const *filename, bool setextension,
repr->setAttribute("inkscape:dataloss", "true");
}
}
- sp_document_set_undo_sensitive(doc, saved);
+ DocumentUndo::setUndoSensitive(doc, saved);
doc->setModifiedSinceSave(false);
}
@@ -295,14 +297,14 @@ save(Extension *key, SPDocument *doc, gchar const *filename, bool setextension,
catch(...) {
// revert attributes in case of official and overwrite
if(check_overwrite && official) {
- bool const saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, false);
+ bool const saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false);
{
store_file_extension_in_prefs (saved_output_extension, save_method);
repr->setAttribute("inkscape:dataloss", saved_dataloss);
}
- sp_document_set_undo_sensitive(doc, saved);
- sp_document_change_uri_and_hrefs(doc, saved_uri);
+ DocumentUndo::setUndoSensitive(doc, saved);
+ doc->changeUriAndHrefs(saved_uri);
}
doc->setModifiedSinceSave(saved_modified);
// free used ressources
@@ -317,13 +319,13 @@ save(Extension *key, SPDocument *doc, gchar const *filename, bool setextension,
// If it is an unofficial save, set the modified attributes back to what they were.
if ( !official) {
- bool const saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, false);
+ bool const saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false);
{
store_file_extension_in_prefs (saved_output_extension, save_method);
repr->setAttribute("inkscape:dataloss", saved_dataloss);
}
- sp_document_set_undo_sensitive(doc, saved);
+ DocumentUndo::setUndoSensitive(doc, saved);
doc->setModifiedSinceSave(saved_modified);
g_free(saved_output_extension);
@@ -590,8 +592,8 @@ get_file_save_path (SPDocument *doc, FileSaveMethod method) {
case FILE_SAVE_METHOD_SAVE_AS:
{
bool use_current_dir = prefs->getBool("/dialogs/save_as/use_current_dir", true);
- if (doc->uri && use_current_dir) {
- path = Glib::path_get_dirname(doc->uri);
+ if (doc->getURI() && use_current_dir) {
+ path = Glib::path_get_dirname(doc->getURI());
} else {
path = prefs->getString("/dialogs/save_as/path");
}
@@ -604,8 +606,8 @@ get_file_save_path (SPDocument *doc, FileSaveMethod method) {
path = prefs->getString("/dialogs/save_copy/path");
break;
case FILE_SAVE_METHOD_INKSCAPE_SVG:
- if (doc->uri) {
- path = Glib::path_get_dirname(doc->uri);
+ if (doc->getURI()) {
+ path = Glib::path_get_dirname(doc->getURI());
} else {
// FIXME: should we use the save_as path here or something else? Maybe we should
// leave this as a choice to the user.
diff --git a/src/file.cpp b/src/file.cpp
index 5a79cdbaf..df668be55 100644
--- a/src/file.cpp
+++ b/src/file.cpp
@@ -7,6 +7,8 @@
* bulia byak <buliabyak@users.sf.net>
* Bruno Dilly <bruno.dilly@gmail.com>
* Stephen Silver <sasilver@users.sourceforge.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
* Copyright (C) 1999-2008 Authors
@@ -61,6 +63,8 @@
#include "uri.h"
#include "xml/rebase-hrefs.h"
+using Inkscape::DocumentUndo;
+
#ifdef WITH_GNOME_VFS
# include <libgnomevfs/gnome-vfs.h>
#endif
@@ -113,22 +117,17 @@ static void sp_file_add_recent(gchar const *uri)
/**
* Create a blank document and add it to the desktop
*/
-SPDesktop*
-sp_file_new(const Glib::ustring &templ)
+SPDesktop *sp_file_new(const Glib::ustring &templ)
{
- char *templName = NULL;
- if (templ.size()>0)
- templName = (char *)templ.c_str();
- SPDocument *doc = sp_document_new(templName, TRUE, true);
+ SPDocument *doc = SPDocument::createNewDoc( !templ.empty() ? templ.c_str() : 0 , TRUE, true );
g_return_val_if_fail(doc != NULL, NULL);
- SPDesktop *dt;
SPViewWidget *dtw = sp_desktop_widget_new(sp_document_namedview(doc, NULL));
g_return_val_if_fail(dtw != NULL, NULL);
- sp_document_unref(doc);
+ doc->doUnref();
sp_create_window(dtw, TRUE);
- dt = static_cast<SPDesktop*>(dtw->view);
+ SPDesktop *dt = static_cast<SPDesktop *>(dtw->view);
sp_namedview_window_from_document(dt);
sp_namedview_update_layers_from_document(dt);
@@ -235,9 +234,9 @@ sp_file_open(const Glib::ustring &uri,
if (existing && existing->virgin && replace_empty) {
// If the current desktop is empty, open the document there
- sp_document_ensure_up_to_date (doc);
+ doc->ensureUpToDate();
desktop->change_document(doc);
- sp_document_resized_signal_emit (doc, sp_document_width(doc), sp_document_height(doc));
+ doc->emitResizedSignal(doc->getWidth(), doc->getHeight());
} else {
// create a whole new desktop and window
SPViewWidget *dtw = sp_desktop_widget_new(sp_document_namedview(doc, NULL));
@@ -247,13 +246,13 @@ sp_file_open(const Glib::ustring &uri,
doc->virgin = FALSE;
// everyone who cares now has a reference, get rid of ours
- sp_document_unref(doc);
+ doc->doUnref();
// resize the window to match the document properties
sp_namedview_window_from_document(desktop);
sp_namedview_update_layers_from_document(desktop);
if (add_to_recent) {
- sp_file_add_recent(SP_DOCUMENT_URI(doc));
+ sp_file_add_recent( doc->getURI() );
}
return TRUE;
@@ -270,8 +269,7 @@ sp_file_open(const Glib::ustring &uri,
/**
* Handle prompting user for "do you want to revert"? Revert on "OK"
*/
-void
-sp_file_revert_dialog()
+void sp_file_revert_dialog()
{
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
g_assert(desktop != NULL);
@@ -279,10 +277,10 @@ sp_file_revert_dialog()
SPDocument *doc = sp_desktop_document(desktop);
g_assert(doc != NULL);
- Inkscape::XML::Node *repr = sp_document_repr_root(doc);
+ Inkscape::XML::Node *repr = doc->getReprRoot();
g_assert(repr != NULL);
- gchar const *uri = doc->uri;
+ gchar const *uri = doc->getURI();
if (!uri) {
desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("Document not saved yet. Cannot revert."));
return;
@@ -548,17 +546,14 @@ sp_file_open_dialog(Gtk::Window &parentWindow, gpointer /*object*/, gpointer /*d
/**
* Remove unreferenced defs from the defs section of the document.
*/
-
-
-void
-sp_file_vacuum()
+void sp_file_vacuum()
{
SPDocument *doc = SP_ACTIVE_DOCUMENT;
- unsigned int diff = vacuum_document (doc);
+ unsigned int diff = doc->vacuumDocument();
- sp_document_done(doc, SP_VERB_FILE_VACUUM,
- _("Vacuum &lt;defs&gt;"));
+ DocumentUndo::done(doc, SP_VERB_FILE_VACUUM,
+ _("Vacuum &lt;defs&gt;"));
SPDesktop *dt = SP_ACTIVE_DESKTOP;
if (diff > 0) {
@@ -760,9 +755,10 @@ sp_file_save_dialog(Gtk::Window &parentWindow, SPDocument *doc, Inkscape::Extens
save_loc = save_path;
save_loc.append(G_DIR_SEPARATOR_S);
+ // TODO fixed buffer is bad:
char formatBuf[256];
int i = 1;
- if (!doc->uri) {
+ if ( !doc->getURI() ) {
// We are saving for the first time; create a unique default filename
snprintf(formatBuf, 255, _("drawing%s"), filename_extension.c_str());
save_loc.append(formatBuf);
@@ -774,7 +770,7 @@ sp_file_save_dialog(Gtk::Window &parentWindow, SPDocument *doc, Inkscape::Extens
save_loc.append(formatBuf);
}
} else {
- snprintf(formatBuf, 255, _("%s"), Glib::path_get_basename(doc->uri).c_str());
+ snprintf(formatBuf, 255, _("%s"), Glib::path_get_basename(doc->getURI()).c_str());
save_loc.append(formatBuf);
}
@@ -836,8 +832,8 @@ sp_file_save_dialog(Gtk::Window &parentWindow, SPDocument *doc, Inkscape::Extens
// FIXME: does the argument !is_copy really convey the correct meaning here?
success = file_save(parentWindow, doc, fileName, selectionType, TRUE, !is_copy, save_method);
- if (success && SP_DOCUMENT_URI(doc)) {
- sp_file_add_recent(SP_DOCUMENT_URI(doc));
+ if (success && doc->getURI()) {
+ sp_file_add_recent( doc->getURI() );
}
save_path = Glib::path_get_dirname(fileName);
@@ -860,7 +856,7 @@ sp_file_save_document(Gtk::Window &parentWindow, SPDocument *doc)
bool success = true;
if (doc->isModifiedSinceSave()) {
- if ( doc->uri == NULL )
+ if ( doc->getURI() == NULL )
{
// Hier sollte in Argument mitgegeben werden, das anzeigt, da� das Dokument das erste
// Mal gespeichert wird, so da� als default .svg ausgew�hlt wird und nicht die zuletzt
@@ -868,7 +864,7 @@ sp_file_save_document(Gtk::Window &parentWindow, SPDocument *doc)
return sp_file_save_dialog(parentWindow, doc, Inkscape::Extension::FILE_SAVE_METHOD_INKSCAPE_SVG);
} else {
Glib::ustring extension = Inkscape::Extension::get_file_save_extension(Inkscape::Extension::FILE_SAVE_METHOD_SAVE_AS);
- Glib::ustring fn = g_strdup(doc->uri);
+ Glib::ustring fn = g_strdup(doc->getURI());
// Try to determine the extension from the uri; this may not lead to a valid extension,
// but this case is caught in the file_save method below (or rather in Extension::save()
// further down the line).
@@ -961,22 +957,22 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
}
if (doc != NULL) {
- Inkscape::XML::rebase_hrefs(doc, in_doc->base, true);
- Inkscape::XML::Document *xml_in_doc = sp_document_repr_doc(in_doc);
+ Inkscape::XML::rebase_hrefs(doc, in_doc->getBase(), true);
+ Inkscape::XML::Document *xml_in_doc = in_doc->getReprDoc();
prevent_id_clashes(doc, in_doc);
SPObject *in_defs = SP_DOCUMENT_DEFS(in_doc);
Inkscape::XML::Node *last_def = SP_OBJECT_REPR(in_defs)->lastChild();
- SPCSSAttr *style = sp_css_attr_from_object(SP_DOCUMENT_ROOT(doc));
+ SPCSSAttr *style = sp_css_attr_from_object(doc->getRoot());
// Count the number of top-level items in the imported document.
guint items_count = 0;
- for (SPObject *child = sp_object_first_child(SP_DOCUMENT_ROOT(doc));
- child != NULL; child = SP_OBJECT_NEXT(child))
- {
- if (SP_IS_ITEM(child)) items_count++;
+ for ( SPObject *child = doc->getRoot()->firstChild(); child; child = child->getNext()) {
+ if (SP_IS_ITEM(child)) {
+ items_count++;
+ }
}
// Create a new group if necessary.
@@ -995,15 +991,13 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
if (desktop) {
place_to_insert = desktop->currentLayer();
} else {
- place_to_insert = SP_DOCUMENT_ROOT(in_doc);
+ place_to_insert = in_doc->getRoot();
}
// Construct a new object representing the imported image,
// and insert it into the current document.
SPObject *new_obj = NULL;
- for (SPObject *child = sp_object_first_child(SP_DOCUMENT_ROOT(doc));
- child != NULL; child = SP_OBJECT_NEXT(child) )
- {
+ for ( SPObject *child = doc->getRoot()->firstChild(); child; child = child->getNext() ) {
if (SP_IS_ITEM(child)) {
Inkscape::XML::Node *newitem = SP_OBJECT_REPR(child)->duplicate(xml_in_doc);
@@ -1021,14 +1015,12 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
else if (SP_OBJECT_REPR(child)->type() == Inkscape::XML::ELEMENT_NODE) {
const gchar *tag = SP_OBJECT_REPR(child)->name();
if (!strcmp(tag, "svg:defs")) {
- for (SPObject *x = sp_object_first_child(child);
- x != NULL; x = SP_OBJECT_NEXT(x))
- {
+ for ( SPObject *x = child->firstChild(); x; x = x->getNext() ) {
SP_OBJECT_REPR(in_defs)->addChild(SP_OBJECT_REPR(x)->duplicate(xml_in_doc), last_def);
}
}
else if (!strcmp(tag, "svg:style")) {
- SP_DOCUMENT_ROOT(in_doc)->appendChildRepr(SP_OBJECT_REPR(child)->duplicate(xml_in_doc));
+ in_doc->getRoot()->appendChildRepr(SP_OBJECT_REPR(child)->duplicate(xml_in_doc));
}
}
}
@@ -1044,14 +1036,14 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
selection->set(SP_ITEM(new_obj));
// preserve parent and viewBox transformations
- // c2p is identity matrix at this point unless sp_document_ensure_up_to_date is called
- sp_document_ensure_up_to_date(doc);
- Geom::Matrix affine = SP_ROOT(SP_DOCUMENT_ROOT(doc))->c2p * sp_item_i2doc_affine(SP_ITEM(place_to_insert)).inverse();
+ // c2p is identity matrix at this point unless ensureUpToDate is called
+ doc->ensureUpToDate();
+ Geom::Matrix affine = SP_ROOT(doc->getRoot())->c2p * SP_ITEM(place_to_insert)->i2doc_affine().inverse();
sp_selection_apply_affine(selection, desktop->dt2doc() * affine * desktop->doc2dt(), true, false);
// move to mouse pointer
{
- sp_document_ensure_up_to_date(sp_desktop_document(desktop));
+ sp_desktop_document(desktop)->ensureUpToDate();
Geom::OptRect sel_bbox = selection->bounds();
if (sel_bbox) {
Geom::Point m( desktop->point() - sel_bbox->midpoint() );
@@ -1060,9 +1052,9 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
}
}
- sp_document_unref(doc);
- sp_document_done(in_doc, SP_VERB_FILE_IMPORT,
- _("Import"));
+ doc->doUnref();
+ DocumentUndo::done(in_doc, SP_VERB_FILE_IMPORT,
+ _("Import"));
} else {
gchar *text = g_strdup_printf(_("Failed to load the requested file %s"), uri.c_str());
@@ -1254,7 +1246,7 @@ sp_file_export_dialog(Gtk::Window &parentWindow)
if (success) {
Glib::RefPtr<Gtk::RecentManager> recent = Gtk::RecentManager::get_default();
- recent->add_item(SP_DOCUMENT_URI(doc));
+ recent->add_item( doc->getURI() );
}
export_path = fileName;
@@ -1307,7 +1299,7 @@ sp_file_export_to_ocal_dialog(Gtk::Window &parentWindow)
static bool gotSuccess = false;
- Inkscape::XML::Node *repr = sp_document_repr_root(doc);
+ Inkscape::XML::Node *repr = doc->getReprRoot();
(void)repr;
if (!doc->uri && !doc->isModifiedSinceSave())
diff --git a/src/filter-chemistry.cpp b/src/filter-chemistry.cpp
index 9f8f63906..4990404a4 100644
--- a/src/filter-chemistry.cpp
+++ b/src/filter-chemistry.cpp
@@ -1,5 +1,3 @@
-#define __SP_FILTER_CHEMISTRY_C__
-
/*
* Various utility methods for filters
*
@@ -7,6 +5,8 @@
* Hugo Rodrigues
* bulia byak
* Niko Kiirala
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006-2008 authors
*
@@ -33,8 +33,7 @@
* Count how many times the filter is used by the styles of o and its
* descendants
*/
-static guint
-count_filter_hrefs(SPObject *o, SPFilter *filter)
+static guint count_filter_hrefs(SPObject *o, SPFilter *filter)
{
if (!o)
return 1;
@@ -49,8 +48,7 @@ count_filter_hrefs(SPObject *o, SPFilter *filter)
i ++;
}
- for (SPObject *child = sp_object_first_child(o);
- child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for ( SPObject *child = o->firstChild(); child; child = child->getNext() ) {
i += count_filter_hrefs(child, filter);
}
@@ -93,14 +91,14 @@ SPFilter *new_filter(SPDocument *document)
SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
// create a new filter
Inkscape::XML::Node *repr;
repr = xml_doc->createElement("svg:filter");
// Append the new filter node to defs
- SP_OBJECT_REPR(defs)->appendChild(repr);
+ defs->appendChild(repr);
Inkscape::GC::release(repr);
// get corresponding object
@@ -116,7 +114,7 @@ SPFilter *new_filter(SPDocument *document)
SPFilterPrimitive *
filter_add_primitive(SPFilter *filter, const Inkscape::Filters::FilterPrimitiveType type)
{
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(filter->document);
+ Inkscape::XML::Document *xml_doc = filter->document->getReprDoc();
//create filter primitive node
Inkscape::XML::Node *repr;
@@ -167,7 +165,8 @@ filter_add_primitive(SPFilter *filter, const Inkscape::Filters::FilterPrimitiveT
}
//set primitive as child of filter node
- filter->repr->appendChild(repr);
+ // XML tree being used directly while/where it shouldn't be...
+ filter->appendChild(repr);
Inkscape::GC::release(repr);
// get corresponding object
@@ -189,7 +188,7 @@ new_filter_gaussian_blur (SPDocument *document, gdouble radius, double expansion
SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
// create a new filter
Inkscape::XML::Node *repr;
@@ -216,7 +215,7 @@ new_filter_gaussian_blur (SPDocument *document, gdouble radius, double expansion
Inkscape::GC::release(b_repr);
// Append the new filter node to defs
- SP_OBJECT_REPR(defs)->appendChild(repr);
+ defs->appendChild(repr);
Inkscape::GC::release(repr);
// get corresponding object
@@ -244,7 +243,7 @@ new_filter_blend_gaussian_blur (SPDocument *document, const char *blendmode, gdo
SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
// create a new filter
Inkscape::XML::Node *repr;
@@ -252,7 +251,7 @@ new_filter_blend_gaussian_blur (SPDocument *document, const char *blendmode, gdo
repr->setAttribute("inkscape:collect", "always");
// Append the new filter node to defs
- SP_OBJECT_REPR(defs)->appendChild(repr);
+ defs->appendChild(repr);
Inkscape::GC::release(repr);
// get corresponding object
@@ -318,7 +317,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)
{
- Geom::OptRect const r = sp_item_bbox_desktop(item, SPItem::GEOMETRIC_BBOX);
+ Geom::OptRect const r = item->getBboxDesktop(SPItem::GEOMETRIC_BBOX);
double width;
double height;
@@ -329,7 +328,7 @@ new_filter_simple_from_item (SPDocument *document, SPItem *item, const char *mod
width = height = 0;
}
- Geom::Matrix i2d (sp_item_i2d_affine (item) );
+ Geom::Matrix i2d (item->i2d_affine () );
return (new_filter_blend_gaussian_blur (document, mode, radius, i2d.descrim(), i2d.expansionX(), i2d.expansionY(), width, height));
}
@@ -343,37 +342,35 @@ new_filter_simple_from_item (SPDocument *document, SPItem *item, const char *mod
* duplicated, so that other elements referring that filter are not modified.
*/
/* TODO: this should be made more generic, not just for blurs */
-SPFilter *
-modify_filter_gaussian_blur_from_item(SPDocument *document, SPItem *item,
- gdouble radius)
+SPFilter *modify_filter_gaussian_blur_from_item(SPDocument *document, SPItem *item,
+ gdouble radius)
{
if (!item->style || !item->style->filter.set) {
return new_filter_simple_from_item(document, item, "normal", radius);
}
SPFilter *filter = SP_FILTER(item->style->getFilter());
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
// If there are more users for this filter, duplicate it
- if (SP_OBJECT_HREFCOUNT(filter) > count_filter_hrefs(item, filter)) {
- Inkscape::XML::Node *repr;
- repr = SP_OBJECT_REPR(item->style->getFilter())->duplicate(xml_doc);
+ if (filter->hrefcount > count_filter_hrefs(item, filter)) {
+ Inkscape::XML::Node *repr = SP_OBJECT_REPR(item->style->getFilter())->duplicate(xml_doc);
SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
- SP_OBJECT_REPR(defs)->appendChild(repr);
+ defs->appendChild(repr);
filter = SP_FILTER( document->getObjectByRepr(repr) );
Inkscape::GC::release(repr);
}
// Determine the required standard deviation value
- Geom::Matrix i2d (sp_item_i2d_affine (item));
+ Geom::Matrix i2d (item->i2d_affine ());
double expansion = i2d.descrim();
double stdDeviation = radius;
if (expansion != 0)
stdDeviation /= expansion;
// Get the object size
- Geom::OptRect const r = sp_item_bbox_desktop(item, SPItem::GEOMETRIC_BBOX);
+ Geom::OptRect const r = item->getBboxDesktop(SPItem::GEOMETRIC_BBOX);
double width;
double height;
if (r) {
diff --git a/src/filters/blend.cpp b/src/filters/blend.cpp
index 870a50537..809bd6c00 100644
--- a/src/filters/blend.cpp
+++ b/src/filters/blend.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEBLEND_CPP__
-
/** \file
* SVG <feBlend> implementation.
*
@@ -8,6 +6,7 @@
* Authors:
* Hugo Rodrigues <haa.rodrigues@gmail.com>
* Niko Kiirala <niko@kiirala.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006,2007 authors
*
@@ -104,8 +103,8 @@ sp_feBlend_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *re
}
/*LOAD ATTRIBUTES FROM REPR HERE*/
- sp_object_read_attr(object, "mode");
- sp_object_read_attr(object, "in2");
+ object->readAttr( "mode" );
+ object->readAttr( "in2" );
/* Unlike normal in, in2 is required attribute. Make sure, we can call
* it by some name. */
@@ -203,8 +202,8 @@ sp_feBlend_update(SPObject *object, SPCtx *ctx, guint flags)
SPFeBlend *blend = SP_FEBLEND(object);
if (flags & SP_OBJECT_MODIFIED_FLAG) {
- sp_object_read_attr(object, "mode");
- sp_object_read_attr(object, "in2");
+ object->readAttr( "mode" );
+ object->readAttr( "in2" );
}
/* Unlike normal in, in2 is required attribute. Make sure, we can call
@@ -214,7 +213,9 @@ sp_feBlend_update(SPObject *object, SPCtx *ctx, guint flags)
{
SPFilter *parent = SP_FILTER(object->parent);
blend->in2 = sp_filter_primitive_name_previous_out(blend);
- object->repr->setAttribute("in2", sp_filter_name_for_image(parent, blend->in2));
+
+ //XML Tree being used directly here while it shouldn't be.
+ object->getRepr()->setAttribute("in2", sp_filter_name_for_image(parent, blend->in2));
}
if (((SPObjectClass *) feBlend_parent_class)->update) {
diff --git a/src/filters/colormatrix.cpp b/src/filters/colormatrix.cpp
index a2d7aefb4..4d54aa579 100644
--- a/src/filters/colormatrix.cpp
+++ b/src/filters/colormatrix.cpp
@@ -1,5 +1,3 @@
-#define __SP_FECOLORMATRIX_CPP__
-
/** \file
* SVG <feColorMatrix> implementation.
*
@@ -8,6 +6,7 @@
* Authors:
* Felipe Sanches <juca@members.fsf.org>
* hugo Rodrigues <haa.rodrigues@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Felipe C. da S. Sanches
* Copyright (C) 2006 Hugo Rodrigues
@@ -99,8 +98,8 @@ sp_feColorMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::No
}
/*LOAD ATTRIBUTES FROM REPR HERE*/
- sp_object_read_attr(object, "type");
- sp_object_read_attr(object, "values");
+ object->readAttr( "type" );
+ object->readAttr( "values" );
}
/**
diff --git a/src/filters/componenttransfer-funcnode.cpp b/src/filters/componenttransfer-funcnode.cpp
index 2fad81797..a245e1c89 100644
--- a/src/filters/componenttransfer-funcnode.cpp
+++ b/src/filters/componenttransfer-funcnode.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEFUNCNODE_CPP__
-
/** \file
* SVG <funcR>, <funcG>, <funcB> and <funcA> implementations.
*/
@@ -8,6 +6,7 @@
* Hugo Rodrigues <haa.rodrigues@gmail.com>
* Niko Kiirala <niko@kiirala.com>
* Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006, 2007, 2008 Authors
*
@@ -168,17 +167,17 @@ sp_fefuncnode_build(SPObject *object, SPDocument *document, Inkscape::XML::Node
}
//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");
+ object->readAttr( "type" );
+ object->readAttr( "tableValues" );
+ object->readAttr( "slope" );
+ object->readAttr( "intercept" );
+ object->readAttr( "amplitude" );
+ object->readAttr( "exponent" );
+ object->readAttr( "offset" );
//is this necessary?
- sp_document_add_resource(document, "fefuncnode", object); //maybe feFuncR, fefuncG, feFuncB and fefuncA ?
+ document->addResource("fefuncnode", object); //maybe feFuncR, fefuncG, feFuncB and fefuncA ?
}
/**
@@ -191,7 +190,7 @@ sp_fefuncnode_release(SPObject *object)
if (SP_OBJECT_DOCUMENT(object)) {
/* Unregister ourselves */
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fefuncnode", SP_OBJECT(object));
+ SP_OBJECT_DOCUMENT(object)->removeResource("fefuncnode", SP_OBJECT(object));
}
//TODO: release resources here
@@ -296,8 +295,8 @@ sp_fefuncnode_update(SPObject *object, SPCtx *ctx, guint flags)
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");
+ //object->readAttr( "azimuth" );
+ //object->readAttr( "elevation" );
}
if (((SPObjectClass *) feFuncNode_parent_class)->update) {
diff --git a/src/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp
index 4d9541203..e2e4922c8 100644
--- a/src/filters/componenttransfer.cpp
+++ b/src/filters/componenttransfer.cpp
@@ -1,5 +1,3 @@
-#define __SP_FECOMPONENTTRANSFER_CPP__
-
/** \file
* SVG <feComponentTransfer> implementation.
*
@@ -7,6 +5,7 @@
/*
* Authors:
* hugo Rodrigues <haa.rodrigues@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Hugo Rodrigues
*
@@ -101,7 +100,7 @@ sp_feComponentTransfer_build(SPObject *object, SPDocument *document, Inkscape::X
/*LOAD ATTRIBUTES FROM REPR HERE*/
//do we need this?
- sp_document_add_resource(document, "feComponentTransfer", object);
+ document->addResource("feComponentTransfer", object);
}
static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_componenttransfer)
diff --git a/src/filters/composite.cpp b/src/filters/composite.cpp
index 2d0ebeda5..66e8e3415 100644
--- a/src/filters/composite.cpp
+++ b/src/filters/composite.cpp
@@ -1,5 +1,3 @@
-#define __SP_FECOMPOSITE_CPP__
-
/** \file
* SVG <feComposite> implementation.
*
@@ -7,6 +5,7 @@
/*
* Authors:
* hugo Rodrigues <haa.rodrigues@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Hugo Rodrigues
*
@@ -103,14 +102,14 @@ sp_feComposite_build(SPObject *object, SPDocument *document, Inkscape::XML::Node
SPFeComposite *comp = SP_FECOMPOSITE(object);
- sp_object_read_attr(object, "operator");
+ object->readAttr( "operator" );
if (comp->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");
+ object->readAttr( "k1" );
+ object->readAttr( "k2" );
+ object->readAttr( "k3" );
+ object->readAttr( "k4" );
}
- sp_object_read_attr(object, "in2");
+ object->readAttr( "in2" );
/* Unlike normal in, in2 is required attribute. Make sure, we can call
* it by some name. */
@@ -242,7 +241,9 @@ sp_feComposite_update(SPObject *object, SPCtx *ctx, guint flags)
{
SPFilter *parent = SP_FILTER(object->parent);
comp->in2 = sp_filter_primitive_name_previous_out(comp);
- object->repr->setAttribute("in2", sp_filter_name_for_image(parent, comp->in2));
+
+ //XML Tree being used directly here while it shouldn't be.
+ object->getRepr()->setAttribute("in2", sp_filter_name_for_image(parent, comp->in2));
}
if (((SPObjectClass *) feComposite_parent_class)->update) {
diff --git a/src/filters/convolvematrix.cpp b/src/filters/convolvematrix.cpp
index 319fe1654..263e6edc4 100644
--- a/src/filters/convolvematrix.cpp
+++ b/src/filters/convolvematrix.cpp
@@ -1,5 +1,3 @@
-#define __SP_FECONVOLVEMATRIX_CPP__
-
/** \file
* SVG <feConvolveMatrix> implementation.
*
@@ -8,6 +6,7 @@
* Authors:
* Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
* hugo Rodrigues <haa.rodrigues@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Hugo Rodrigues
*
@@ -110,15 +109,15 @@ sp_feConvolveMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML:
}
/*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");
+ object->readAttr( "order" );
+ object->readAttr( "kernelMatrix" );
+ object->readAttr( "divisor" );
+ object->readAttr( "bias" );
+ object->readAttr( "targetX" );
+ object->readAttr( "targetY" );
+ object->readAttr( "edgeMode" );
+ object->readAttr( "kernelUnitLength" );
+ object->readAttr( "preserveAlpha" );
}
/**
diff --git a/src/filters/diffuselighting.cpp b/src/filters/diffuselighting.cpp
index 76179d560..7169bb285 100644
--- a/src/filters/diffuselighting.cpp
+++ b/src/filters/diffuselighting.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEDIFFUSELIGHTING_CPP__
-
/** \file
* SVG <feDiffuseLighting> implementation.
*
@@ -8,6 +6,7 @@
* Authors:
* hugo Rodrigues <haa.rodrigues@gmail.com>
* Jean-Rene Reinhard <jr@komite.net>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Hugo Rodrigues
* 2007 authors
@@ -122,10 +121,10 @@ sp_feDiffuseLighting_build(SPObject *object, SPDocument *document, Inkscape::XML
}
/*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");
+ object->readAttr( "surfaceScale" );
+ object->readAttr( "diffuseConstant" );
+ object->readAttr( "kernelUnitLength" );
+ object->readAttr( "lighting-color" );
}
@@ -228,10 +227,10 @@ 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");
+ object->readAttr( "surfaceScale" );
+ object->readAttr( "diffuseConstant" );
+ object->readAttr( "kernelUnit" );
+ object->readAttr( "lighting-color" );
}
if (((SPObjectClass *) feDiffuseLighting_parent_class)->update) {
diff --git a/src/filters/displacementmap.cpp b/src/filters/displacementmap.cpp
index 1c874a8c3..69a678c26 100644
--- a/src/filters/displacementmap.cpp
+++ b/src/filters/displacementmap.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEDISPLACEMENTMAP_CPP__
-
/** \file
* SVG <feDisplacementMap> implementation.
*
@@ -7,6 +5,7 @@
/*
* Authors:
* hugo Rodrigues <haa.rodrigues@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Hugo Rodrigues
*
@@ -99,10 +98,10 @@ sp_feDisplacementMap_build(SPObject *object, SPDocument *document, Inkscape::XML
}
/*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");
+ object->readAttr( "scale" );
+ object->readAttr( "in2" );
+ object->readAttr( "xChannelSelector" );
+ object->readAttr( "yChannelSelector" );
/* Unlike normal in, in2 is required attribute. Make sure, we can call
* it by some name. */
@@ -220,7 +219,9 @@ sp_feDisplacementMap_update(SPObject *object, SPCtx *ctx, guint flags)
{
SPFilter *parent = SP_FILTER(object->parent);
disp->in2 = sp_filter_primitive_name_previous_out(disp);
- object->repr->setAttribute("in2", sp_filter_name_for_image(parent, disp->in2));
+
+ //XML Tree being used directly here while it shouldn't be.
+ object->getRepr()->setAttribute("in2", sp_filter_name_for_image(parent, disp->in2));
}
if (((SPObjectClass *) feDisplacementMap_parent_class)->update) {
diff --git a/src/filters/distantlight.cpp b/src/filters/distantlight.cpp
index d4b59074d..a646267be 100644
--- a/src/filters/distantlight.cpp
+++ b/src/filters/distantlight.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEDISTANTLIGHT_CPP__
-
/** \file
* SVG <fedistantlight> implementation.
*/
@@ -8,6 +6,7 @@
* Hugo Rodrigues <haa.rodrigues@gmail.com>
* Niko Kiirala <niko@kiirala.com>
* Jean-Rene Reinhard <jr@komite.net>
+ * Abhishek Sharma
*
* Copyright (C) 2006,2007 Authors
*
@@ -101,11 +100,11 @@ sp_fedistantlight_build(SPObject *object, SPDocument *document, Inkscape::XML::N
}
//Read values of key attributes from XML nodes into object.
- sp_object_read_attr(object, "azimuth");
- sp_object_read_attr(object, "elevation");
+ object->readAttr( "azimuth" );
+ object->readAttr( "elevation" );
//is this necessary?
- sp_document_add_resource(document, "fedistantlight", object);
+ document->addResource("fedistantlight", object);
}
/**
@@ -118,7 +117,7 @@ sp_fedistantlight_release(SPObject *object)
if (SP_OBJECT_DOCUMENT(object)) {
/* Unregister ourselves */
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fedistantlight", SP_OBJECT(object));
+ SP_OBJECT_DOCUMENT(object)->removeResource("fedistantlight", SP_OBJECT(object));
}
//TODO: release resources here
@@ -189,8 +188,8 @@ sp_fedistantlight_update(SPObject *object, SPCtx *ctx, guint flags)
if (flags & SP_OBJECT_MODIFIED_FLAG) {
/* do something to trigger redisplay, updates? */
- sp_object_read_attr(object, "azimuth");
- sp_object_read_attr(object, "elevation");
+ object->readAttr( "azimuth" );
+ object->readAttr( "elevation" );
}
if (((SPObjectClass *) feDistantLight_parent_class)->update) {
diff --git a/src/filters/flood.cpp b/src/filters/flood.cpp
index ff60e34ee..e1c7ba214 100644
--- a/src/filters/flood.cpp
+++ b/src/filters/flood.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEFLOOD_CPP__
-
/** \file
* SVG <feFlood> implementation.
*
@@ -7,6 +5,7 @@
/*
* Authors:
* hugo Rodrigues <haa.rodrigues@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Hugo Rodrigues
*
@@ -99,8 +98,8 @@ sp_feFlood_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *re
}
/*LOAD ATTRIBUTES FROM REPR HERE*/
- sp_object_read_attr(object, "flood-opacity");
- sp_object_read_attr(object, "flood-color");
+ object->readAttr( "flood-opacity" );
+ object->readAttr( "flood-color" );
}
/**
diff --git a/src/filters/gaussian-blur.cpp b/src/filters/gaussian-blur.cpp
index 28e3bb6a3..8919aece0 100644
--- a/src/filters/gaussian-blur.cpp
+++ b/src/filters/gaussian-blur.cpp
@@ -1,5 +1,3 @@
-#define __SP_GAUSSIANBLUR_CPP__
-
/** \file
* SVG <gaussianBlur> implementation.
*
@@ -8,6 +6,7 @@
* Authors:
* Hugo Rodrigues <haa.rodrigues@gmail.com>
* Niko Kiirala <niko@kiirala.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006,2007 Authors
*
@@ -100,7 +99,7 @@ sp_gaussianBlur_build(SPObject *object, SPDocument *document, Inkscape::XML::Nod
((SPObjectClass *) gaussianBlur_parent_class)->build(object, document, repr);
}
- sp_object_read_attr(object, "stdDeviation");
+ object->readAttr( "stdDeviation" );
}
@@ -143,7 +142,7 @@ static void
sp_gaussianBlur_update(SPObject *object, SPCtx *ctx, guint flags)
{
if (flags & SP_OBJECT_MODIFIED_FLAG) {
- sp_object_read_attr(object, "stdDeviation");
+ object->readAttr( "stdDeviation" );
}
if (((SPObjectClass *) gaussianBlur_parent_class)->update) {
diff --git a/src/filters/image.cpp b/src/filters/image.cpp
index 69a4b6018..bbe775c18 100644
--- a/src/filters/image.cpp
+++ b/src/filters/image.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEIMAGE_CPP__
-
/** \file
* SVG <feImage> implementation.
*
@@ -8,6 +6,7 @@
* Authors:
* Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
* hugo Rodrigues <haa.rodrigues@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Felipe Sanches
* Copyright (C) 2006 Hugo Rodrigues
@@ -100,11 +99,11 @@ static void sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::X
/*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");
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "width" );
+ object->readAttr( "height" );
+ object->readAttr( "xlink:href" );
}
diff --git a/src/filters/mergenode.cpp b/src/filters/mergenode.cpp
index b532d961c..f4c4c6089 100644
--- a/src/filters/mergenode.cpp
+++ b/src/filters/mergenode.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEMERGENODE_CPP__
-
/** \file
* feMergeNode implementation. A feMergeNode contains the name of one
* input image for feMerge.
@@ -8,6 +6,7 @@
* Authors:
* Kees Cook <kees@outflux.net>
* Niko Kiirala <niko@kiirala.com>
+ * Abhishek Sharma
*
* Copyright (C) 2004,2007 authors
*
@@ -85,7 +84,7 @@ sp_feMergeNode_init(SPFeMergeNode *feMergeNode)
static void
sp_feMergeNode_build(SPObject *object, SPDocument */*document*/, Inkscape::XML::Node */*repr*/)
{
- sp_object_read_attr(object, "in");
+ object->readAttr( "in" );
}
/**
diff --git a/src/filters/morphology.cpp b/src/filters/morphology.cpp
index 3d791daa8..bbfa97728 100644
--- a/src/filters/morphology.cpp
+++ b/src/filters/morphology.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEMORPHOLOGY_CPP__
-
/** \file
* SVG <feMorphology> implementation.
*
@@ -8,6 +6,7 @@
* Authors:
* Felipe Sanches <juca@members.fsf.org>
* Hugo Rodrigues <haa.rodrigues@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Hugo Rodrigues
*
@@ -98,8 +97,8 @@ sp_feMorphology_build(SPObject *object, SPDocument *document, Inkscape::XML::Nod
}
/*LOAD ATTRIBUTES FROM REPR HERE*/
- sp_object_read_attr(object, "operator");
- sp_object_read_attr(object, "radius");
+ object->readAttr( "operator" );
+ object->readAttr( "radius" );
}
/**
diff --git a/src/filters/offset.cpp b/src/filters/offset.cpp
index 58dd249a5..360012d3b 100644
--- a/src/filters/offset.cpp
+++ b/src/filters/offset.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEOFFSET_CPP__
-
/** \file
* SVG <feOffset> implementation.
*
@@ -8,6 +6,7 @@
* Authors:
* hugo Rodrigues <haa.rodrigues@gmail.com>
* Niko Kiirala <niko@kiirala.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006,2007 authors
*
@@ -97,8 +96,8 @@ sp_feOffset_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *r
((SPObjectClass *) feOffset_parent_class)->build(object, document, repr);
}
- sp_object_read_attr(object, "dx");
- sp_object_read_attr(object, "dy");
+ object->readAttr( "dx" );
+ object->readAttr( "dy" );
}
/**
@@ -152,8 +151,8 @@ 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");
+ object->readAttr( "dx" );
+ object->readAttr( "dy" );
}
if (((SPObjectClass *) feOffset_parent_class)->update) {
diff --git a/src/filters/pointlight.cpp b/src/filters/pointlight.cpp
index b9625b33e..f09449615 100644
--- a/src/filters/pointlight.cpp
+++ b/src/filters/pointlight.cpp
@@ -1,5 +1,3 @@
-#define __SP_FEPOINTLIGHT_CPP__
-
/** \file
* SVG <fepointlight> implementation.
*/
@@ -8,6 +6,7 @@
* Hugo Rodrigues <haa.rodrigues@gmail.com>
* Niko Kiirala <niko@kiirala.com>
* Jean-Rene Reinhard <jr@komite.net>
+ * Abhishek Sharma
*
* Copyright (C) 2006,2007 Authors
*
@@ -104,12 +103,12 @@ sp_fepointlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Nod
}
//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");
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "z" );
//is this necessary?
- sp_document_add_resource(document, "fepointlight", object);
+ document->addResource("fepointlight", object);
}
/**
@@ -122,7 +121,7 @@ sp_fepointlight_release(SPObject *object)
if (SP_OBJECT_DOCUMENT(object)) {
/* Unregister ourselves */
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fepointlight", SP_OBJECT(object));
+ SP_OBJECT_DOCUMENT(object)->removeResource("fepointlight", SP_OBJECT(object));
}
//TODO: release resources here
@@ -211,9 +210,9 @@ sp_fepointlight_update(SPObject *object, SPCtx *ctx, guint flags)
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");
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "z" );
}
if (((SPObjectClass *) fePointLight_parent_class)->update) {
diff --git a/src/filters/specularlighting.cpp b/src/filters/specularlighting.cpp
index 77e90cd43..acb986d74 100644
--- a/src/filters/specularlighting.cpp
+++ b/src/filters/specularlighting.cpp
@@ -1,5 +1,3 @@
-#define __SP_FESPECULARLIGHTING_CPP__
-
/** \file
* SVG <feSpecularLighting> implementation.
*
@@ -8,6 +6,7 @@
* Authors:
* hugo Rodrigues <haa.rodrigues@gmail.com>
* Jean-Rene Reinhard <jr@komite.net>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Hugo Rodrigues
* 2007 authors
@@ -124,11 +123,11 @@ sp_feSpecularLighting_build(SPObject *object, SPDocument *document, Inkscape::XM
}
/*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");
+ object->readAttr( "surfaceScale" );
+ object->readAttr( "specularConstant" );
+ object->readAttr( "specularExponent" );
+ object->readAttr( "kernelUnitLength" );
+ object->readAttr( "lighting-color" );
}
@@ -254,11 +253,11 @@ 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");
+ object->readAttr( "surfaceScale" );
+ object->readAttr( "specularConstant" );
+ object->readAttr( "specularExponent" );
+ object->readAttr( "kernelUnitLength" );
+ object->readAttr( "lighting-color" );
}
if (((SPObjectClass *) feSpecularLighting_parent_class)->update) {
diff --git a/src/filters/spotlight.cpp b/src/filters/spotlight.cpp
index 51685c330..060b3b04d 100644
--- a/src/filters/spotlight.cpp
+++ b/src/filters/spotlight.cpp
@@ -1,5 +1,3 @@
-#define __SP_FESPOTLIGHT_CPP__
-
/** \file
* SVG <fespotlight> implementation.
*/
@@ -8,6 +6,7 @@
* Hugo Rodrigues <haa.rodrigues@gmail.com>
* Niko Kiirala <niko@kiirala.com>
* Jean-Rene Reinhard <jr@komite.net>
+ * Abhishek Sharma
*
* Copyright (C) 2006,2007 Authors
*
@@ -114,17 +113,17 @@ sp_fespotlight_build(SPObject *object, SPDocument *document, Inkscape::XML::Node
}
//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");
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "z" );
+ object->readAttr( "pointsAtX" );
+ object->readAttr( "pointsAtY" );
+ object->readAttr( "pointsAtZ" );
+ object->readAttr( "specularExponent" );
+ object->readAttr( "limitingConeAngle" );
//is this necessary?
- sp_document_add_resource(document, "fespotlight", object);
+ document->addResource("fespotlight", object);
}
/**
@@ -137,7 +136,7 @@ sp_fespotlight_release(SPObject *object)
if (SP_OBJECT_DOCUMENT(object)) {
/* Unregister ourselves */
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "fespotlight", SP_OBJECT(object));
+ SP_OBJECT_DOCUMENT(object)->removeResource("fespotlight", SP_OBJECT(object));
}
//TODO: release resources here
@@ -309,14 +308,14 @@ sp_fespotlight_update(SPObject *object, SPCtx *ctx, guint flags)
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");
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "z" );
+ object->readAttr( "pointsAtX" );
+ object->readAttr( "pointsAtY" );
+ object->readAttr( "pointsAtZ" );
+ object->readAttr( "specularExponent" );
+ object->readAttr( "limitingConeAngle" );
}
if (((SPObjectClass *) feSpotLight_parent_class)->update) {
diff --git a/src/filters/turbulence.cpp b/src/filters/turbulence.cpp
index 268eca643..739001311 100644
--- a/src/filters/turbulence.cpp
+++ b/src/filters/turbulence.cpp
@@ -1,5 +1,3 @@
-#define __SP_FETURBULENCE_CPP__
-
/** \file
* SVG <feTurbulence> implementation.
*
@@ -8,6 +6,7 @@
* Authors:
* Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
* hugo Rodrigues <haa.rodrigues@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Felipe Sanches
* Copyright (C) 2006 Hugo Rodrigues
@@ -100,11 +99,11 @@ sp_feTurbulence_build(SPObject *object, SPDocument *document, Inkscape::XML::Nod
}
/*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");
+ object->readAttr( "baseFrequency" );
+ object->readAttr( "numOctaves" );
+ object->readAttr( "seed" );
+ object->readAttr( "stitchTiles" );
+ object->readAttr( "type" );
}
/**
diff --git a/src/flood-context.cpp b/src/flood-context.cpp
index 37f3e10ec..f8eec0a19 100644
--- a/src/flood-context.cpp
+++ b/src/flood-context.cpp
@@ -1,5 +1,3 @@
-#define __SP_FLOOD_CONTEXT_C__
-
/** @file
* @brief Bucket fill drawing context, works by bitmap filling an area on a rendered version
* of the current display and then tracing the result using potrace.
@@ -8,6 +6,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* John Bintz <jcoswell@coswellproductions.org>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
* Copyright (C) 2000-2005 authors
@@ -68,6 +68,8 @@
#include "trace/imagemap.h"
#include "trace/potrace/inkscape-potrace.h"
+using Inkscape::DocumentUndo;
+
static void sp_flood_context_class_init(SPFloodContextClass *klass);
static void sp_flood_context_init(SPFloodContext *flood_context);
static void sp_flood_context_dispose(GObject *object);
@@ -420,8 +422,8 @@ static void do_trace(bitmap_coords_info bci, guchar *trace_px, SPDesktop *deskto
std::vector<Inkscape::Trace::TracingEngineResult> results = pte.traceGrayMap(gray_map);
gray_map->destroy(gray_map);
- Inkscape::XML::Node *layer_repr = SP_GROUP(desktop->currentLayer())->repr;
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ //XML Tree being used here directly while it shouldn't be...."
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
long totalNodeCount = 0L;
@@ -484,14 +486,14 @@ static void do_trace(bitmap_coords_info bci, guchar *trace_px, SPDesktop *deskto
g_free(str);
}
- layer_repr->addChild(pathRepr, NULL);
+ desktop->currentLayer()->addChild(pathRepr,NULL);
SPObject *reprobj = document->getObjectByRepr(pathRepr);
if (reprobj) {
- sp_item_write_transform(SP_ITEM(reprobj), pathRepr, transform, NULL);
+ SP_ITEM(reprobj)->doWriteTransform(pathRepr, transform, NULL);
// premultiply the item transform by the accumulated parent transform in the paste layer
- Geom::Matrix local (sp_item_i2doc_affine(SP_GROUP(desktop->currentLayer())));
+ Geom::Matrix local (SP_GROUP(desktop->currentLayer())->i2doc_affine());
if (!local.isIdentity()) {
gchar const *t_str = pathRepr->attribute("transform");
Geom::Matrix item_t (Geom::identity());
@@ -777,11 +779,11 @@ static void sp_flood_do_flood_fill(SPEventContext *event_context, GdkEvent *even
/* Create new arena */
NRArena *arena = NRArena::create();
- unsigned dkey = sp_item_display_key_new(1);
+ unsigned dkey = SPItem::display_key_new(1);
- sp_document_ensure_up_to_date (document);
+ document->ensureUpToDate();
- SPItem *document_root = SP_ITEM(SP_DOCUMENT_ROOT(document));
+ SPItem *document_root = SP_ITEM(document->getRoot());
Geom::OptRect bbox = document_root->getBounds(Geom::identity());
if (!bbox) {
@@ -801,7 +803,7 @@ static void sp_flood_do_flood_fill(SPEventContext *event_context, GdkEvent *even
unsigned int height = (int)ceil(screen.height() * zoom_scale * padding);
Geom::Point origin(screen.min()[Geom::X],
- sp_document_height(document) - screen.height() - screen.min()[Geom::Y]);
+ document->getHeight() - screen.height() - screen.min()[Geom::Y]);
origin[Geom::X] = origin[Geom::X] + (screen.width() * ((1 - padding) / 2));
origin[Geom::Y] = origin[Geom::Y] + (screen.height() * ((1 - padding) / 2));
@@ -810,7 +812,7 @@ static void sp_flood_do_flood_fill(SPEventContext *event_context, GdkEvent *even
Geom::Matrix affine = scale * Geom::Translate(-origin * scale);
/* Create ArenaItems and set transform */
- NRArenaItem *root = sp_item_invoke_show(SP_ITEM(sp_document_root(document)), arena, dkey, SP_ITEM_SHOW_DISPLAY);
+ NRArenaItem *root = SP_ITEM(document->getRoot())->invoke_show( arena, dkey, SP_ITEM_SHOW_DISPLAY);
nr_arena_item_set_transform(NR_ARENA_ITEM(root), affine);
NRGC gc(NULL);
@@ -849,7 +851,8 @@ static void sp_flood_do_flood_fill(SPEventContext *event_context, GdkEvent *even
cairo_surface_destroy(s);
// Hide items
- sp_item_invoke_hide(SP_ITEM(sp_document_root(document)), dkey);
+ SP_ITEM(document->getRoot())->invoke_hide(dkey);
+
nr_object_unref((NRObject *) arena);
guchar *trace_px = g_new(guchar, width * height);
@@ -904,7 +907,7 @@ static void sp_flood_do_flood_fill(SPEventContext *event_context, GdkEvent *even
}
for (unsigned int i = 0; i < fill_points.size(); i++) {
- Geom::Point pw = Geom::Point(fill_points[i][Geom::X] / zoom_scale, sp_document_height(document) + (fill_points[i][Geom::Y] / zoom_scale)) * affine;
+ Geom::Point pw = Geom::Point(fill_points[i][Geom::X] / zoom_scale, document->getHeight() + (fill_points[i][Geom::Y] / zoom_scale)) * affine;
pw[Geom::X] = (int)MIN(width - 1, MAX(0, pw[Geom::X]));
pw[Geom::Y] = (int)MIN(height - 1, MAX(0, pw[Geom::Y]));
@@ -1111,7 +1114,7 @@ static void sp_flood_do_flood_fill(SPEventContext *event_context, GdkEvent *even
g_free(trace_px);
- sp_document_done(document, SP_VERB_CONTEXT_PAINTBUCKET, _("Fill bounded area"));
+ DocumentUndo::done(document, SP_VERB_CONTEXT_PAINTBUCKET, _("Fill bounded area"));
}
static gint sp_flood_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event)
@@ -1128,10 +1131,9 @@ static gint sp_flood_context_item_handler(SPEventContext *event_context, SPItem
SPItem *item = sp_event_context_find_item (desktop, button_w, TRUE, TRUE);
- Inkscape::XML::Node *pathRepr = SP_OBJECT_REPR(item);
- /* Set style */
- sp_desktop_apply_style_tool (desktop, pathRepr, "/tools/paintbucket", false);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_PAINTBUCKET, _("Set style on object"));
+ // Set style
+ desktop->applyCurrentOrToolStyle(item, "/tools/paintbucket", false);
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_PAINTBUCKET, _("Set style on object"));
ret = TRUE;
}
break;
@@ -1270,7 +1272,7 @@ static void sp_flood_finish(SPFloodContext *rc)
sp_canvas_end_forced_full_redraws(desktop->canvas);
sp_desktop_selection(desktop)->set(rc->item);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_PAINTBUCKET,
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_PAINTBUCKET,
_("Fill bounded area"));
rc->item = NULL;
diff --git a/src/forward.h b/src/forward.h
index d4a98fbff..97d2c15ed 100644
--- a/src/forward.h
+++ b/src/forward.h
@@ -6,6 +6,7 @@
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
@@ -46,34 +47,8 @@ GType sp_event_context_get_type ();
class SPDocument;
class SPDocumentClass;
-#define SP_TYPE_DOCUMENT (sp_document_get_type ())
-#define SP_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_DOCUMENT, SPDocument))
-#define SP_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_DOCUMENT))
-
-GType sp_document_get_type ();
-
/* Objects */
-class SPObject;
-class SPObjectClass;
-
-#define SP_TYPE_OBJECT (sp_object_get_type ())
-#define SP_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_OBJECT, SPObject))
-#define SP_OBJECT_CLASS(clazz) (G_TYPE_CHECK_CLASS_CAST((clazz), SP_TYPE_OBJECT, SPObjectClass))
-#define SP_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_OBJECT))
-
-GType sp_object_get_type ();
-
-class SPItem;
-class SPItemClass;
-
-#define SP_TYPE_ITEM (sp_item_get_type ())
-#define SP_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ITEM, SPItem))
-#define SP_ITEM_CLASS(clazz) (G_TYPE_CHECK_CLASS_CAST((clazz), SP_TYPE_ITEM, SPItemClass))
-#define SP_IS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ITEM))
-
-GType sp_item_get_type ();
-
class SPGroup;
class SPGroupClass;
diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp
index 7d0498947..03c10768d 100644
--- a/src/gradient-chemistry.cpp
+++ b/src/gradient-chemistry.cpp
@@ -6,6 +6,7 @@
* bulia byak
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2010 Authors
* Copyright (C) 2007 Johan Engelen
@@ -104,7 +105,7 @@ static SPGradient *sp_gradient_get_private_normalized(SPDocument *document, SPGr
SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
// create a new private gradient of the requested type
Inkscape::XML::Node *repr;
if (type == SP_GRADIENT_TYPE_LINEAR) {
@@ -157,8 +158,7 @@ guint count_gradient_hrefs(SPObject *o, SPGradient *gr)
i ++;
}
- for (SPObject *child = sp_object_first_child(o);
- child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for ( SPObject *child = o->firstChild(); child; child = child->getNext() ) {
i += count_gradient_hrefs(child, gr);
}
@@ -195,7 +195,7 @@ SPGradient *sp_gradient_fork_private_if_necessary(SPGradient *gr, SPGradient *ve
// Check the number of uses of the gradient within this object;
// if we are private and there are no other users,
- if (!vector->isSwatch() && (SP_OBJECT_HREFCOUNT(gr) <= count_gradient_hrefs(user, gr))) {
+ if (!vector->isSwatch() && (gr->hrefcount <= count_gradient_hrefs(user, gr))) {
// check vector
if ( gr != vector && gr->ref->getObject() != vector ) {
/* our href is not the vector, and vector is different from gr; relink */
@@ -210,7 +210,7 @@ SPGradient *sp_gradient_fork_private_if_necessary(SPGradient *gr, SPGradient *ve
if ((gr->hasStops()) ||
(gr->state != SP_GRADIENT_STATE_UNKNOWN) ||
(SP_OBJECT_PARENT(gr) != SP_OBJECT(defs)) ||
- (SP_OBJECT_HREFCOUNT(gr) > 1)) {
+ (gr->hrefcount > 1)) {
// we have to clone a fresh new private gradient for the given vector
// create an empty one
@@ -251,9 +251,9 @@ SPGradient *sp_gradient_fork_vector_if_necessary(SPGradient *gr)
if (!prefs->getBool("/options/forkgradientvectors/value", true))
return gr;
- if (SP_OBJECT_HREFCOUNT(gr) > 1) {
+ if (gr->hrefcount > 1) {
SPDocument *doc = SP_OBJECT_DOCUMENT(gr);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *repr = SP_OBJECT_REPR (gr)->duplicate(xml_doc);
SP_OBJECT_REPR (SP_DOCUMENT_DEFS (doc))->addChild(repr, NULL);
@@ -295,7 +295,7 @@ SPGradient *sp_gradient_reset_to_userspace(SPGradient *gr, SPItem *item)
Inkscape::XML::Node *repr = SP_OBJECT_REPR(gr);
// calculate the bbox of the item
- sp_document_ensure_up_to_date(SP_OBJECT_DOCUMENT(item));
+ SP_OBJECT_DOCUMENT(item)->ensureUpToDate();
Geom::OptRect bbox = item->getBounds(Geom::identity()); // we need "true" bbox without item_i2d_affine
if (!bbox)
@@ -361,7 +361,7 @@ SPGradient *sp_gradient_convert_to_userspace(SPGradient *gr, SPItem *item, gchar
Inkscape::XML::Node *repr = SP_OBJECT_REPR(gr);
// calculate the bbox of the item
- sp_document_ensure_up_to_date(SP_OBJECT_DOCUMENT(item));
+ SP_OBJECT_DOCUMENT(item)->ensureUpToDate();
Geom::Matrix bbox2user;
Geom::OptRect bbox = item->getBounds(Geom::identity()); // we need "true" bbox without item_i2d_affine
if ( bbox ) {
@@ -738,8 +738,7 @@ void sp_item_gradient_reverse_vector(SPItem *item, bool fill_or_stroke)
GSList *child_reprs = NULL;
GSList *child_objects = NULL;
std::vector<double> offsets;
- for (SPObject *child = sp_object_first_child(vector);
- child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for ( SPObject *child = vector->firstChild(); child; child = child->getNext()) {
child_reprs = g_slist_prepend (child_reprs, SP_OBJECT_REPR(child));
child_objects = g_slist_prepend (child_objects, child);
offsets.push_back(sp_repr_get_double_attribute(SP_OBJECT_REPR(child), "offset", 0));
@@ -789,7 +788,7 @@ void sp_item_gradient_set_coords(SPItem *item, guint point_type, guint point_i,
gradient = sp_gradient_convert_to_userspace (gradient, item, fill_or_stroke? "fill" : "stroke");
- Geom::Matrix i2d (sp_item_i2d_affine (item));
+ Geom::Matrix i2d (item->i2d_affine ());
Geom::Point p = p_w * i2d.inverse();
p *= (gradient->gradientTransform).inverse();
// now p is in gradient's original coordinates
@@ -1062,7 +1061,7 @@ Geom::Point sp_item_gradient_get_coords(SPItem *item, guint point_type, guint po
}
if (SP_GRADIENT(gradient)->getUnits() == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) {
- sp_document_ensure_up_to_date(SP_OBJECT_DOCUMENT(item));
+ SP_OBJECT_DOCUMENT(item)->ensureUpToDate();
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,
@@ -1070,7 +1069,7 @@ Geom::Point sp_item_gradient_get_coords(SPItem *item, guint point_type, guint po
bbox->min()[Geom::X], bbox->min()[Geom::Y]);
}
}
- p *= Geom::Matrix(gradient->gradientTransform) * (Geom::Matrix)sp_item_i2d_affine(item);
+ p *= Geom::Matrix(gradient->gradientTransform) * (Geom::Matrix)item->i2d_affine();
return from_2geom(p);
}
@@ -1107,11 +1106,11 @@ SPGradient *sp_item_set_gradient(SPItem *item, SPGradient *gr, SPGradientType ty
/* Current fill style is the gradient of the required type */
SPGradient *current = SP_GRADIENT(ps);
- //g_message("hrefcount %d count %d\n", SP_OBJECT_HREFCOUNT(current), count_gradient_hrefs(SP_OBJECT(item), current));
+ //g_message("hrefcount %d count %d\n", current->hrefcount, count_gradient_hrefs(SP_OBJECT(item), current));
if (!current->isSwatch()
- && (SP_OBJECT_HREFCOUNT(current) == 1 ||
- SP_OBJECT_HREFCOUNT(current) == count_gradient_hrefs(SP_OBJECT(item), current))) {
+ && (current->hrefcount == 1 ||
+ current->hrefcount == count_gradient_hrefs(SP_OBJECT(item), current))) {
// current is private and it's either used once, or all its uses are by children of item;
// so just change its href to vector
diff --git a/src/gradient-context.cpp b/src/gradient-context.cpp
index 9aec46d5f..768370509 100644
--- a/src/gradient-context.cpp
+++ b/src/gradient-context.cpp
@@ -4,6 +4,7 @@
* Authors:
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Johan Engelen
* Copyright (C) 2005 Authors
@@ -47,6 +48,8 @@
#include "libnr/nr-point-fns.h"
+using Inkscape::DocumentUndo;
+
static void sp_gradient_context_class_init(SPGradientContextClass *klass);
static void sp_gradient_context_init(SPGradientContext *gr_context);
static void sp_gradient_context_dispose(GObject *object);
@@ -384,7 +387,7 @@ sp_gradient_context_add_stops_between_selected_stops (SPGradientContext *rc)
}
if (g_slist_length(these_stops) > 0 && doc) {
- sp_document_done (doc, SP_VERB_CONTEXT_GRADIENT, _("Add gradient stop"));
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_GRADIENT, _("Add gradient stop"));
drag->updateDraggers();
// so that it does not automatically update draggers in idle loop, as this would deselect
drag->local_change = true;
@@ -452,7 +455,7 @@ sp_gradient_simplify(SPGradientContext *rc, double tolerance)
}
if (g_slist_length(todel) > 0) {
- sp_document_done (doc, SP_VERB_CONTEXT_GRADIENT, _("Simplify gradient"));
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_GRADIENT, _("Simplify gradient"));
drag->local_change = true;
drag->updateDraggers();
drag->selectByCoords(coords);
@@ -476,8 +479,8 @@ sp_gradient_context_add_stop_near_point (SPGradientContext *rc, SPItem *item, G
ec->get_drag()->addStopNearPoint (item, mouse_p, tolerance/desktop->current_zoom());
- sp_document_done (sp_desktop_document (desktop), SP_VERB_CONTEXT_GRADIENT,
- _("Add gradient stop"));
+ DocumentUndo::done(sp_desktop_document (desktop), SP_VERB_CONTEXT_GRADIENT,
+ _("Add gradient stop"));
ec->get_drag()->updateDraggers();
}
@@ -528,8 +531,8 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
sp_gradient_reset_to_userspace(priv, item);
}
- sp_document_done (sp_desktop_document (desktop), SP_VERB_CONTEXT_GRADIENT,
- _("Create default gradient"));
+ DocumentUndo::done(sp_desktop_document (desktop), SP_VERB_CONTEXT_GRADIENT,
+ _("Create default gradient"));
}
ret = TRUE;
}
@@ -813,8 +816,8 @@ sp_gradient_context_root_handler(SPEventContext *event_context, GdkEvent *event)
}
}
// we did an undoable action
- sp_document_done (sp_desktop_document (desktop), SP_VERB_CONTEXT_GRADIENT,
- _("Invert gradient"));
+ DocumentUndo::done(sp_desktop_document (desktop), SP_VERB_CONTEXT_GRADIENT,
+ _("Invert gradient"));
ret = TRUE;
}
break;
@@ -925,7 +928,7 @@ static void sp_gradient_drag(SPGradientContext &rc, Geom::Point const pt, guint
-1, // ignore number (though it is always 1)
fill_or_stroke, 99999, 99999, etime);
}
- // We did an undoable action, but sp_document_done will be called by the knot when released
+ // We did an undoable action, but SPDocumentUndo::done will be called by the knot when released
// status text; we do not track coords because this branch is run once, not all the time
// during drag
diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp
index d5ab64794..2e9a21acf 100644
--- a/src/gradient-drag.cpp
+++ b/src/gradient-drag.cpp
@@ -5,6 +5,7 @@
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Johan Engelen
* Copyright (C) 2005,2010 Authors
@@ -44,6 +45,8 @@
#include "sp-namedview.h"
#include "selection-chemistry.h"
+using Inkscape::DocumentUndo;
+
#define GR_KNOT_COLOR_NORMAL 0xffffff00
#define GR_KNOT_COLOR_MOUSEOVER 0xff000000
#define GR_KNOT_COLOR_SELECTED 0x0000ff00
@@ -185,7 +188,7 @@ Glib::ustring GrDrag::makeStopSafeColor( gchar const *str, bool &isNull )
Glib::ustring::size_type pos = colorStr.find("url(#");
if ( pos != Glib::ustring::npos ) {
Glib::ustring targetName = colorStr.substr(pos + 5, colorStr.length() - 6);
- const GSList *gradients = sp_document_get_resource_list(desktop->doc(), "gradient");
+ const GSList *gradients = desktop->doc()->getResourceList("gradient");
for (const GSList *item = gradients; item; item = item->next) {
SPGradient* grad = SP_GRADIENT(item->data);
if ( targetName == grad->getId() ) {
@@ -194,7 +197,7 @@ Glib::ustring GrDrag::makeStopSafeColor( gchar const *str, bool &isNull )
if (firstStop) {
Glib::ustring stopColorStr;
if (firstStop->currentColor) {
- stopColorStr = sp_object_get_style_property(firstStop, "color", NULL);
+ stopColorStr = firstStop->getStyleProperty("color", NULL);
} else {
stopColorStr = firstStop->specified_color.toString();
}
@@ -622,8 +625,8 @@ gr_knot_moved_handler(SPKnot *knot, Geom::Point const &ppointer, guint state, gp
d_new->updateKnotShape ();
d_new->updateTip ();
d_new->updateDependencies(true);
- sp_document_done (sp_desktop_document (d_new->parent->desktop), SP_VERB_CONTEXT_GRADIENT,
- _("Merge gradient handles"));
+ DocumentUndo::done(sp_desktop_document (d_new->parent->desktop), SP_VERB_CONTEXT_GRADIENT,
+ _("Merge gradient handles"));
return;
}
}
@@ -927,8 +930,8 @@ gr_knot_ungrabbed_handler (SPKnot *knot, unsigned int state, gpointer data)
dragger->updateDependencies(true);
// we did an undoable action
- sp_document_done (sp_desktop_document (dragger->parent->desktop), SP_VERB_CONTEXT_GRADIENT,
- _("Move gradient handle"));
+ DocumentUndo::done(sp_desktop_document (dragger->parent->desktop), SP_VERB_CONTEXT_GRADIENT,
+ _("Move gradient handle"));
}
/**
@@ -980,8 +983,8 @@ gr_knot_clicked_handler(SPKnot */*knot*/, guint state, gpointer data)
}
SP_OBJECT_REPR(gradient)->removeChild(SP_OBJECT_REPR(stop));
- sp_document_done (SP_OBJECT_DOCUMENT (gradient), SP_VERB_CONTEXT_GRADIENT,
- _("Delete gradient stop"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT (gradient), SP_VERB_CONTEXT_GRADIENT,
+ _("Delete gradient stop"));
}
} else {
// select the dragger
@@ -1140,7 +1143,7 @@ GrDragger::updateTip ()
if (g_slist_length (this->draggables) == 1) {
GrDraggable *draggable = (GrDraggable *) this->draggables->data;
- char *item_desc = sp_item_description(draggable->item);
+ char *item_desc = draggable->item->description();
switch (draggable->point_type) {
case POINT_LG_MID:
case POINT_RG_MID1:
@@ -1784,7 +1787,7 @@ GrDrag::updateLevels ()
for (GSList const* i = this->selection->itemList(); i != NULL; i = i->next) {
SPItem *item = SP_ITEM(i->data);
- Geom::OptRect rect = sp_item_bbox_desktop (item);
+ Geom::OptRect rect = item->getBboxDesktop ();
if (rect) {
// Remember the edges of the bbox and the center axis
hor_levels.push_back(rect->min()[Geom::Y]);
@@ -1863,7 +1866,7 @@ GrDrag::selected_move (double x, double y, bool write_repr, bool scale_radial)
if (write_repr && did) {
// we did an undoable action
- sp_document_maybe_done (sp_desktop_document (desktop), "grmoveh", SP_VERB_CONTEXT_GRADIENT,
+ DocumentUndo::maybeDone(sp_desktop_document (desktop), "grmoveh", SP_VERB_CONTEXT_GRADIENT,
_("Move gradient handle(s)"));
return;
}
@@ -1899,7 +1902,7 @@ GrDrag::selected_move (double x, double y, bool write_repr, bool scale_radial)
if (write_repr && did) {
// we did an undoable action
- sp_document_maybe_done (sp_desktop_document (desktop), "grmovem", SP_VERB_CONTEXT_GRADIENT,
+ DocumentUndo::maybeDone(sp_desktop_document (desktop), "grmovem", SP_VERB_CONTEXT_GRADIENT,
_("Move gradient mid stop(s)"));
}
}
@@ -2047,11 +2050,11 @@ GrDrag::deleteSelected (bool just_one)
// cannot use vector->vector.stops.size() because the vector might be invalidated by deletion of a midstop
// manually count the children, don't know if there already exists a function for this...
int len = 0;
- for ( SPObject *child = sp_object_first_child(stopinfo->vector) ;
- child != NULL ;
- child = SP_OBJECT_NEXT(child) )
+ for ( SPObject *child = (stopinfo->vector)->firstChild() ; child ; child = child->getNext() )
{
- if ( SP_IS_STOP(child) ) len ++;
+ if ( SP_IS_STOP(child) ) {
+ len ++;
+ }
}
if (len > 2)
{
@@ -2188,7 +2191,7 @@ GrDrag::deleteSelected (bool just_one)
}
if (document) {
- sp_document_done ( document, SP_VERB_CONTEXT_GRADIENT, _("Delete gradient stop(s)") );
+ DocumentUndo::done( document, SP_VERB_CONTEXT_GRADIENT, _("Delete gradient stop(s)") );
}
}
diff --git a/src/graphlayout.cpp b/src/graphlayout.cpp
index 0905cd94c..4f536beb3 100644
--- a/src/graphlayout.cpp
+++ b/src/graphlayout.cpp
@@ -4,6 +4,7 @@
/*
* Authors:
* Tim Dwyer <Tim.Dwyer@infotech.monash.edu.au>
+ * Abhishek Sharma
*
* Copyright (C) 2005 Authors
*
@@ -126,7 +127,7 @@ void graphlayout(GSList const *const items) {
++i)
{
SPItem *u=*i;
- Geom::OptRect const item_box(sp_item_bbox_desktop(u));
+ Geom::OptRect const item_box(u->getBboxDesktop());
if(item_box) {
Geom::Point ll(item_box->min());
Geom::Point ur(item_box->max());
@@ -228,7 +229,7 @@ void graphlayout(GSList const *const items) {
map<string,unsigned>::iterator i=nodelookup.find(u->getId());
if(i!=nodelookup.end()) {
Rectangle* r=rs[i->second];
- Geom::OptRect item_box(sp_item_bbox_desktop(u));
+ Geom::OptRect item_box(u->getBboxDesktop());
if(item_box) {
Geom::Point const curr(item_box->midpoint());
Geom::Point const dest(r->getCentreX(),r->getCentreY());
diff --git a/src/helper-fns.h b/src/helper-fns.h
index 05e65fea8..f407364a5 100644
--- a/src/helper-fns.h
+++ b/src/helper-fns.h
@@ -22,7 +22,7 @@
// can be more clear.
#define HELPERFNS_NO_WARNING false
-/* convert localized ascii representation to double
+/* convert ascii representation to double
* the function can only be used to convert numbers as given by gui elements that use localized representation
* @param value ascii representation of the number
* @return the converted number
@@ -37,7 +37,7 @@ inline double helperfns_read_number(gchar const *value, bool warning = true) {
return 0;
}
char *end;
- double ret = g_strtod(value, &end);
+ double ret = g_ascii_strtod(value, &end);
if (*end) {
if (warning) {
g_warning("helper-fns::helperfns_read_number() Unable to convert \"%s\" to number", value);
@@ -62,7 +62,7 @@ inline bool helperfns_read_bool(gchar const *value, bool default_value){
return default_value;
}
-/* convert localized ascii representation to double
+/* convert ascii representation to double
* the function can only be used to convert numbers as given by gui elements that use localized representation
* numbers are delimeted by space
* @param value ascii representation of the number
@@ -77,7 +77,7 @@ inline std::vector<gdouble> helperfns_read_vector(const gchar* value, int size){
is >> str;
char *end;
- double ret = g_strtod(str.c_str(), &end);
+ double ret = g_ascii_strtod(str.c_str(), &end);
if (*end) {
g_warning("helper-fns::helperfns_read_vector() Unable to convert \"%s\" to number", str.c_str());
// We could leave this out, too. If strtod can't convert
@@ -89,7 +89,7 @@ inline std::vector<gdouble> helperfns_read_vector(const gchar* value, int size){
return v;
}
-/* convert localized ascii representation to double
+/* convert ascii representation to double
* the function can only be used to convert numbers as given by gui elements that use localized representation
* numbers are delimeted by space
* @param value ascii representation of the number
@@ -103,7 +103,7 @@ inline std::vector<gdouble> helperfns_read_vector(const gchar* value){
while(*beg)
{
char *end;
- double ret = g_strtod(beg, &end);
+ double ret = g_ascii_strtod(beg, &end);
if (end==beg){
g_warning("helper-fns::helperfns_read_vector() Unable to convert \"%s\" to number", beg);
// We could leave this out, too. If strtod can't convert
diff --git a/src/helper/pixbuf-ops.cpp b/src/helper/pixbuf-ops.cpp
index baf621348..b2daa152e 100644
--- a/src/helper/pixbuf-ops.cpp
+++ b/src/helper/pixbuf-ops.cpp
@@ -1,10 +1,10 @@
-#define __SP_PIXBUF_OPS_C__
-
/*
* Helpers for SPItem -> gdk_pixbuf related stuff
*
* Authors:
* John Cliff <simarilius@yahoo.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008 John Cliff
*
@@ -33,11 +33,11 @@
#include "helper/pixbuf-ops.h"
+// TODO look for copy-n-past duplication of this function:
/**
* Hide all items that are not listed in list, recursively, skipping groups and defs.
*/
-static void
-hide_other_items_recursively(SPObject *o, GSList *list, unsigned dkey)
+static void hide_other_items_recursively(SPObject *o, GSList *list, unsigned dkey)
{
if ( SP_IS_ITEM(o)
&& !SP_IS_DEFS(o)
@@ -46,12 +46,12 @@ hide_other_items_recursively(SPObject *o, GSList *list, unsigned dkey)
&& !SP_IS_USE(o)
&& !g_slist_find(list, o) )
{
- sp_item_invoke_hide(SP_ITEM(o), dkey);
+ SP_ITEM(o)->invoke_hide(dkey);
}
// recurse
if (!g_slist_find(list, o)) {
- for (SPObject *child = sp_object_first_child(o) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = o->firstChild() ; child; child = child->getNext() ) {
hide_other_items_recursively(child, list, dkey);
}
}
@@ -99,16 +99,16 @@ sp_generate_internal_bitmap(SPDocument *doc, gchar const */*filename*/,
/* Create new arena for offscreen rendering*/
NRArena *arena = NRArena::create();
nr_arena_set_renderoffscreen(arena);
- unsigned dkey = sp_item_display_key_new(1);
+ unsigned dkey = SPItem::display_key_new(1);
- sp_document_ensure_up_to_date (doc);
+ doc->ensureUpToDate();
Geom::Rect screen=Geom::Rect(Geom::Point(x0,y0), Geom::Point(x1, y1));
double padding = 1.0;
Geom::Point origin(screen.min()[Geom::X],
- sp_document_height(doc) - screen[Geom::Y].extent() - screen.min()[Geom::Y]);
+ doc->getHeight() - screen[Geom::Y].extent() - screen.min()[Geom::Y]);
origin[Geom::X] = origin[Geom::X] + (screen[Geom::X].extent() * ((1 - padding) / 2));
origin[Geom::Y] = origin[Geom::Y] + (screen[Geom::Y].extent() * ((1 - padding) / 2));
@@ -117,7 +117,7 @@ sp_generate_internal_bitmap(SPDocument *doc, gchar const */*filename*/,
Geom::Matrix affine = scale * Geom::Translate(-origin * scale);
/* Create ArenaItems and set transform */
- NRArenaItem *root = sp_item_invoke_show(SP_ITEM(sp_document_root(doc)), arena, dkey, SP_ITEM_SHOW_DISPLAY);
+ NRArenaItem *root = SP_ITEM(doc->getRoot())->invoke_show( arena, dkey, SP_ITEM_SHOW_DISPLAY);
nr_arena_item_set_transform(NR_ARENA_ITEM(root), affine);
NRGC gc(NULL);
@@ -126,7 +126,7 @@ sp_generate_internal_bitmap(SPDocument *doc, gchar const */*filename*/,
// We show all and then hide all items we don't want, instead of showing only requested items,
// because that would not work if the shown item references something in defs
if (items_only) {
- hide_other_items_recursively(sp_document_root(doc), items_only, dkey);
+ hide_other_items_recursively(doc->getRoot(), items_only, dkey);
}
NRRectL final_bbox;
@@ -164,7 +164,7 @@ sp_generate_internal_bitmap(SPDocument *doc, gchar const */*filename*/,
g_warning("sp_generate_internal_bitmap: not enough memory to create pixel buffer. Need %lld.", size);
cairo_surface_destroy(surface);
}
- sp_item_invoke_hide (SP_ITEM(sp_document_root(doc)), dkey);
+ SP_ITEM(doc->getRoot())->invoke_hide(dkey);
nr_object_unref((NRObject *) arena);
// gdk_pixbuf_save (pixbuf, "C:\\temp\\internal.jpg", "jpeg", NULL, "quality","100", NULL);
diff --git a/src/helper/png-write.cpp b/src/helper/png-write.cpp
index 83e4ce0cb..53cc168d2 100644
--- a/src/helper/png-write.cpp
+++ b/src/helper/png-write.cpp
@@ -1,11 +1,11 @@
-#define __SP_PNG_WRITE_C__
-
/*
* PNG file format utilities
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Whoever wrote this example in libpng documentation
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 authors
*
@@ -368,8 +368,7 @@ sp_export_get_rows(guchar const **rows, void **to_free, int row, int num_rows, v
/**
* Hide all items that are not listed in list, recursively, skipping groups and defs.
*/
-static void
-hide_other_items_recursively(SPObject *o, GSList *list, unsigned dkey)
+static void hide_other_items_recursively(SPObject *o, GSList *list, unsigned dkey)
{
if ( SP_IS_ITEM(o)
&& !SP_IS_DEFS(o)
@@ -377,12 +376,12 @@ hide_other_items_recursively(SPObject *o, GSList *list, unsigned dkey)
&& !SP_IS_GROUP(o)
&& !g_slist_find(list, o) )
{
- sp_item_invoke_hide(SP_ITEM(o), dkey);
+ SP_ITEM(o)->invoke_hide(dkey);
}
// recurse
if (!g_slist_find(list, o)) {
- for (SPObject *child = sp_object_first_child(o) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = o->firstChild() ; child; child = child->getNext() ) {
hide_other_items_recursively(child, list, dkey);
}
}
@@ -428,10 +427,10 @@ sp_export_png_file(SPDocument *doc, gchar const *filename,
return true;
}
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
/* 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));
+ Geom::Point translation = Geom::Point(-area[Geom::X][0], area[Geom::Y][1] - doc->getHeight());
/* 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
@@ -464,16 +463,16 @@ sp_export_png_file(SPDocument *doc, gchar const *filename,
NRArena *const arena = NRArena::create();
// export with maximum blur rendering quality
nr_arena_set_renderoffscreen(arena);
- unsigned const dkey = sp_item_display_key_new(1);
+ unsigned const dkey = SPItem::display_key_new(1);
/* Create ArenaItems and set transform */
- ebp.root = sp_item_invoke_show(SP_ITEM(sp_document_root(doc)), arena, dkey, SP_ITEM_SHOW_DISPLAY);
+ ebp.root = SP_ITEM(doc->getRoot())->invoke_show(arena, dkey, SP_ITEM_SHOW_DISPLAY);
nr_arena_item_set_transform(NR_ARENA_ITEM(ebp.root), affine);
// We show all and then hide all items we don't want, instead of showing only requested items,
// because that would not work if the shown item references something in defs
if (items_only) {
- hide_other_items_recursively(sp_document_root(doc), items_only, dkey);
+ hide_other_items_recursively(doc->getRoot(), items_only, dkey);
}
ebp.status = status;
@@ -490,7 +489,7 @@ sp_export_png_file(SPDocument *doc, gchar const *filename,
}
// Hide items, this releases arenaitem
- sp_item_invoke_hide(SP_ITEM(sp_document_root(doc)), dkey);
+ SP_ITEM(doc->getRoot())->invoke_hide(dkey);
/* Free arena */
nr_object_unref((NRObject *) arena);
diff --git a/src/helper/stock-items.cpp b/src/helper/stock-items.cpp
index 1c184da72..4ec61c54a 100644
--- a/src/helper/stock-items.cpp
+++ b/src/helper/stock-items.cpp
@@ -1,5 +1,3 @@
-#define __INK_STOCK_ITEMS__
-
/*
* Stock-items
*
@@ -7,6 +5,8 @@
*
* Authors:
* John Cliff <simarilius@yahoo.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright 2004 John Cliff
*
@@ -56,11 +56,11 @@ static SPObject * sp_marker_load_from_svg(gchar const *name, SPDocument *current
if (!edoc && !doc) {
gchar *markers = g_build_filename(INKSCAPE_MARKERSDIR, "/markers.svg", NULL);
if (Inkscape::IO::file_test(markers, G_FILE_TEST_IS_REGULAR)) {
- doc = sp_document_new(markers, FALSE);
+ doc = SPDocument::createNewDoc(markers, FALSE);
}
g_free(markers);
if (doc) {
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
} else {
edoc = TRUE;
}
@@ -70,7 +70,7 @@ static SPObject * sp_marker_load_from_svg(gchar const *name, SPDocument *current
SPObject *object = doc->getObjectById(name);
if (object && SP_IS_MARKER(object)) {
SPDefs *defs= (SPDefs *) SP_DOCUMENT_DEFS(current_doc);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(current_doc);
+ Inkscape::XML::Document *xml_doc = current_doc->getReprDoc();
Inkscape::XML::Node *mark_repr = SP_OBJECT_REPR(object)->duplicate(xml_doc);
SP_OBJECT_REPR(defs)->addChild(mark_repr, NULL);
SPObject *cloned_item = current_doc->getObjectByRepr(mark_repr);
@@ -94,16 +94,16 @@ sp_pattern_load_from_svg(gchar const *name, SPDocument *current_doc)
if (!edoc && !doc) {
gchar *patterns = g_build_filename(INKSCAPE_PATTERNSDIR, "/patterns.svg", NULL);
if (Inkscape::IO::file_test(patterns, G_FILE_TEST_IS_REGULAR)) {
- doc = sp_document_new(patterns, FALSE);
+ doc = SPDocument::createNewDoc(patterns, FALSE);
}
if (!doc) {
gchar *patterns = g_build_filename(CREATE_PATTERNSDIR, "/patterns.svg", NULL);
if (Inkscape::IO::file_test(patterns, G_FILE_TEST_IS_REGULAR)) {
- doc = sp_document_new(patterns, FALSE);
+ doc = SPDocument::createNewDoc(patterns, FALSE);
}
g_free(patterns);
if (doc) {
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
} else {
edoc = TRUE;
}
@@ -114,7 +114,7 @@ sp_pattern_load_from_svg(gchar const *name, SPDocument *current_doc)
SPObject *object = doc->getObjectById(name);
if (object && SP_IS_PATTERN(object)) {
SPDefs *defs= (SPDefs *) SP_DOCUMENT_DEFS(current_doc);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(current_doc);
+ Inkscape::XML::Document *xml_doc = current_doc->getReprDoc();
Inkscape::XML::Node *pat_repr = SP_OBJECT_REPR(object)->duplicate(xml_doc);
SP_OBJECT_REPR(defs)->addChild(pat_repr, NULL);
Inkscape::GC::release(pat_repr);
@@ -137,16 +137,16 @@ sp_gradient_load_from_svg(gchar const *name, SPDocument *current_doc)
if (!edoc && !doc) {
gchar *gradients = g_build_filename(INKSCAPE_GRADIENTSDIR, "/gradients.svg", NULL);
if (Inkscape::IO::file_test(gradients, G_FILE_TEST_IS_REGULAR)) {
- doc = sp_document_new(gradients, FALSE);
+ doc = SPDocument::createNewDoc(gradients, FALSE);
}
if (!doc) {
gchar *gradients = g_build_filename(CREATE_GRADIENTSDIR, "/gradients.svg", NULL);
if (Inkscape::IO::file_test(gradients, G_FILE_TEST_IS_REGULAR)) {
- doc = sp_document_new(gradients, FALSE);
+ doc = SPDocument::createNewDoc(gradients, FALSE);
}
g_free(gradients);
if (doc) {
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
} else {
edoc = TRUE;
}
@@ -157,7 +157,7 @@ sp_gradient_load_from_svg(gchar const *name, SPDocument *current_doc)
SPObject *object = doc->getObjectById(name);
if (object && SP_IS_GRADIENT(object)) {
SPDefs *defs= (SPDefs *) SP_DOCUMENT_DEFS(current_doc);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(current_doc);
+ Inkscape::XML::Document *xml_doc = current_doc->getReprDoc();
Inkscape::XML::Node *pat_repr = SP_OBJECT_REPR(object)->duplicate(xml_doc);
SP_OBJECT_REPR(defs)->addChild(pat_repr, NULL);
Inkscape::GC::release(pat_repr);
@@ -195,13 +195,11 @@ SPObject *get_stock_item(gchar const *urn)
SPDesktop *desktop = inkscape_active_desktop();
SPDocument *doc = sp_desktop_document(desktop);
- SPDefs *defs= (SPDefs *) SP_DOCUMENT_DEFS(doc);
+ SPDefs *defs = reinterpret_cast<SPDefs *>(SP_DOCUMENT_DEFS(doc));
SPObject *object = NULL;
if (!strcmp(base, "marker")) {
- for (SPObject *child = sp_object_first_child(SP_OBJECT(defs));
- child != NULL;
- child = SP_OBJECT_NEXT(child))
+ for ( SPObject *child = defs->firstChild(); child; child = child->getNext() )
{
if (SP_OBJECT_REPR(child)->attribute("inkscape:stockid") &&
!strcmp(name_p, SP_OBJECT_REPR(child)->attribute("inkscape:stockid")) &&
@@ -213,11 +211,9 @@ SPObject *get_stock_item(gchar const *urn)
}
else if (!strcmp(base,"pattern")) {
- for (SPObject *child = sp_object_first_child(SP_OBJECT(defs)) ;
- child != NULL;
- child = SP_OBJECT_NEXT(child) )
+ for ( SPObject *child = defs->firstChild() ; child; child = child->getNext() )
{
- if (SP_OBJECT_REPR(child)->attribute("inkscape:stockid") &&
+ if (child->getRepr()->attribute("inkscape:stockid") &&
!strcmp(name_p, SP_OBJECT_REPR(child)->attribute("inkscape:stockid")) &&
SP_IS_PATTERN(child))
{
@@ -227,9 +223,7 @@ SPObject *get_stock_item(gchar const *urn)
}
else if (!strcmp(base,"gradient")) {
- for (SPObject *child = sp_object_first_child(SP_OBJECT(defs));
- child != NULL;
- child = SP_OBJECT_NEXT(child))
+ for ( SPObject *child = defs->firstChild(); child; child = child->getNext() )
{
if (SP_OBJECT_REPR(child)->attribute("inkscape:stockid") &&
!strcmp(name_p, SP_OBJECT_REPR(child)->attribute("inkscape:stockid")) &&
diff --git a/src/id-clash.cpp b/src/id-clash.cpp
index 43ce393dd..0594fe8e6 100644
--- a/src/id-clash.cpp
+++ b/src/id-clash.cpp
@@ -1,9 +1,10 @@
-#define __ID_CLASH_C__
/** \file
* Routines for resolving ID clashes when importing or pasting.
*
* Authors:
* Stephen Silver <sasilver@users.sourceforge.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008 authors
*
@@ -164,9 +165,8 @@ find_references(SPObject *elem, refmap_type *refmap)
}
}
- /* recurse */
- for (SPObject *child = sp_object_first_child(elem);
- child; child = SP_OBJECT_NEXT(child) )
+ // recurse
+ for (SPObject *child = elem->firstChild(); child; child = child->getNext() )
{
find_references(child, refmap);
}
@@ -203,9 +203,8 @@ change_clashing_ids(SPDocument *imported_doc, SPDocument *current_doc,
id_changes->push_back(id_changeitem_type(elem, old_id));
}
- /* recurse */
- for (SPObject *child = sp_object_first_child(elem);
- child; child = SP_OBJECT_NEXT(child) )
+ // recurse
+ for (SPObject *child = elem->firstChild(); child; child = child->getNext() )
{
change_clashing_ids(imported_doc, current_doc, child, refmap, id_changes);
}
@@ -263,7 +262,7 @@ prevent_id_clashes(SPDocument *imported_doc, SPDocument *current_doc)
{
refmap_type *refmap = new refmap_type;
id_changelist_type id_changes;
- SPObject *imported_root = SP_DOCUMENT_ROOT(imported_doc);
+ SPObject *imported_root = imported_doc->getRoot();
find_references(imported_root, refmap);
change_clashing_ids(imported_doc, current_doc, imported_root, refmap,
diff --git a/src/ink-comboboxentry-action.cpp b/src/ink-comboboxentry-action.cpp
index cfaf09901..74034e537 100644
--- a/src/ink-comboboxentry-action.cpp
+++ b/src/ink-comboboxentry-action.cpp
@@ -481,9 +481,19 @@ gboolean ink_comboboxentry_action_set_active_text( Ink_ComboBoxEntry_Action* ink
// Show or hide warning
if( ink_comboboxentry_action->active == -1 && ink_comboboxentry_action->warning != NULL ) {
#if GTK_CHECK_VERSION(2,16,0)
- gtk_entry_set_icon_from_icon_name( ink_comboboxentry_action->entry,
- GTK_ENTRY_ICON_SECONDARY,
- GTK_STOCK_DIALOG_WARNING );
+ {
+ GtkStockItem item;
+ gboolean isStock = gtk_stock_lookup( GTK_STOCK_DIALOG_WARNING, &item );
+ if (isStock) {
+ gtk_entry_set_icon_from_stock( ink_comboboxentry_action->entry,
+ GTK_ENTRY_ICON_SECONDARY,
+ GTK_STOCK_DIALOG_WARNING );
+ } else {
+ gtk_entry_set_icon_from_icon_name( ink_comboboxentry_action->entry,
+ GTK_ENTRY_ICON_SECONDARY,
+ GTK_STOCK_DIALOG_WARNING );
+ }
+ }
// Can't add tooltip until icon set
gtk_entry_set_icon_tooltip_text( ink_comboboxentry_action->entry,
GTK_ENTRY_ICON_SECONDARY,
@@ -497,6 +507,9 @@ gboolean ink_comboboxentry_action_set_active_text( Ink_ComboBoxEntry_Action* ink
gtk_entry_set_icon_from_icon_name( GTK_ENTRY(ink_comboboxentry_action->entry),
GTK_ENTRY_ICON_SECONDARY,
NULL );
+ gtk_entry_set_icon_from_stock( GTK_ENTRY(ink_comboboxentry_action->entry),
+ GTK_ENTRY_ICON_SECONDARY,
+ NULL );
#else // GTK_CHECK_VERSION(2,16,0)
gtk_image_set_from_stock( GTK_IMAGE(ink_comboboxentry_action->indicator), NULL, GTK_ICON_SIZE_SMALL_TOOLBAR);
gtk_widget_set_tooltip_text( ink_comboboxentry_action->indicator, NULL );
diff --git a/src/inkscape.cpp b/src/inkscape.cpp
index 8b31ba267..430977567 100644
--- a/src/inkscape.cpp
+++ b/src/inkscape.cpp
@@ -330,8 +330,8 @@ static gint inkscape_autosave(gpointer)
++docnum;
- Inkscape::XML::Node *repr = sp_document_repr_root(doc);
- // g_debug("Document %d: \"%s\" %s", docnum, doc ? doc->name : "(null)", doc ? (doc->isModifiedSinceSave() ? "(dirty)" : "(clean)") : "(null)");
+ Inkscape::XML::Node *repr = doc->getReprRoot();
+ // g_debug("Document %d: \"%s\" %s", docnum, doc ? doc->getName() : "(null)", doc ? (doc->isModifiedSinceSave() ? "(dirty)" : "(clean)") : "(null)");
if (doc->isModifiedSinceSave()) {
gchar *oldest_autosave = 0;
@@ -530,7 +530,7 @@ inkscape_trackalt() {
void inkscape_trackalt(guint trackvalue)
{
- inkscape->trackalt = trackvalue;
+ inkscape->trackalt = trackvalue;
}
@@ -553,6 +553,13 @@ inkscape_deactivate_desktop_private (Inkscape::Application */*inkscape*/, SPDesk
#define SP_INDENT 8
+static bool crashIsHappening = false;
+
+bool inkscapeIsCrashing()
+{
+ return crashIsHappening;
+}
+
static void
inkscape_crash_handler (int /*signum*/)
{
@@ -580,6 +587,8 @@ inkscape_crash_handler (int /*signum*/)
}
recursion = TRUE;
+ crashIsHappening = true;
+
EventTracker<SimpleEvent<Inkscape::Debug::Event::CORE> > tracker("crash");
tracker.set<SimpleEvent<> >("emergency-save");
@@ -600,13 +609,13 @@ inkscape_crash_handler (int /*signum*/)
++iter) {
SPDocument *doc = iter->first;
Inkscape::XML::Node *repr;
- repr = sp_document_repr_root (doc);
+ repr = doc->getReprRoot();
if (doc->isModifiedSinceSave()) {
const gchar *docname;
/* originally, the document name was retrieved from
* the sodipod:docname attribute */
- docname = doc->name;
+ docname = doc->getName();
if (docname) {
/* Removes an emergency save suffix if present: /(.*)\.[0-9_]*\.[0-9_]*\.[~\.]*$/\1/ */
const char* d0 = strrchr ((char*)docname, '.');
@@ -634,7 +643,7 @@ inkscape_crash_handler (int /*signum*/)
// Find a location
const char* locations[] = {
- doc->base,
+ doc->getBase(),
g_get_home_dir(),
g_get_tmp_dir(),
curdir,
@@ -658,7 +667,7 @@ inkscape_crash_handler (int /*signum*/)
savednames = g_slist_prepend (savednames, g_strdup (c));
fclose (file);
} else {
- failednames = g_slist_prepend (failednames, (doc->name) ? g_strdup (doc->name) : g_strdup (_("Untitled document")));
+ failednames = g_slist_prepend (failednames, (doc->getName()) ? g_strdup(doc->getName()) : g_strdup (_("Untitled document")));
}
count++;
}
diff --git a/src/inkscape.h b/src/inkscape.h
index d9de54782..64cee1560 100644
--- a/src/inkscape.h
+++ b/src/inkscape.h
@@ -43,6 +43,8 @@ Inkscape::XML::Node *inkscape_get_menus (Inkscape::Application * inkscape);
Inkscape::Application *inkscape_get_instance();
gboolean inkscape_use_gui();
+bool inkscapeIsCrashing();
+
SPDesktop * inkscape_find_desktop_by_dkey (unsigned int dkey);
#define SP_ACTIVE_EVENTCONTEXT inkscape_active_event_context ()
diff --git a/src/inkview.cpp b/src/inkview.cpp
index c151991dd..09adb8c2d 100644
--- a/src/inkview.cpp
+++ b/src/inkview.cpp
@@ -1,5 +1,3 @@
-#define __SPSVGVIEW_C__
-
/*
* Inkscape - an ambitious vector drawing program
*
@@ -14,6 +12,7 @@
* Chema Celorio <chema@celorio.com>
* Pawel Palucha
* ... and various people who have worked with various projects
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -167,7 +166,7 @@ sp_svgview_main_key_press (GtkWidget */*widget*/, GdkEventKey *event, struct SPS
default:
break;
}
- gtk_window_set_title(GTK_WINDOW(ss->window), SP_DOCUMENT_NAME(ss->doc));
+ gtk_window_set_title(GTK_WINDOW(ss->window), ss->doc->getName());
return TRUE;
}
@@ -273,13 +272,13 @@ main (int argc, const char **argv)
ss.slides = g_renew (char *, ss.slides, ss.size);
}
- ss.doc = sp_document_new_from_mem ((const gchar *)gba->data,
+ ss.doc = SPDocument::createNewDocFromMem ((const gchar *)gba->data,
gba->len,
TRUE);
gchar *last_filename = jar_file_reader.get_last_filename();
if (ss.doc) {
ss.slides[ss.length++] = strdup (last_filename);
- sp_document_set_uri (ss.doc, strdup(last_filename));
+ (ss.doc)->setUri (strdup(last_filename));
}
g_byte_array_free(gba, TRUE);
g_free(last_filename);
@@ -299,7 +298,7 @@ main (int argc, const char **argv)
ss.slides[ss.length++] = strdup (argv[i]);
if (!ss.doc) {
- ss.doc = sp_document_new (ss.slides[ss.current], TRUE, false);
+ ss.doc = SPDocument::createNewDoc (ss.slides[ss.current], TRUE, false);
if (!ss.doc)
++ss.current;
}
@@ -313,21 +312,21 @@ main (int argc, const char **argv)
return 1; /* none of the slides loadable */
w = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title (GTK_WINDOW (w), SP_DOCUMENT_NAME (ss.doc));
+ gtk_window_set_title( GTK_WINDOW(w), ss.doc->getName() );
gtk_window_set_default_size (GTK_WINDOW (w),
- MIN ((int)sp_document_width (ss.doc), (int)gdk_screen_width () - 64),
- MIN ((int)sp_document_height (ss.doc), (int)gdk_screen_height () - 64));
+ MIN ((int)(ss.doc)->getWidth (), (int)gdk_screen_width () - 64),
+ MIN ((int)(ss.doc)->getHeight (), (int)gdk_screen_height () - 64));
gtk_window_set_policy (GTK_WINDOW (w), TRUE, TRUE, FALSE);
ss.window = w;
g_signal_connect (G_OBJECT (w), "delete_event", (GCallback) sp_svgview_main_delete, &ss);
g_signal_connect (G_OBJECT (w), "key_press_event", (GCallback) sp_svgview_main_key_press, &ss);
- sp_document_ensure_up_to_date (ss.doc);
+ (ss.doc)->ensureUpToDate();
ss.view = sp_svg_view_widget_new (ss.doc);
- sp_document_unref (ss.doc);
+ (ss.doc)->doUnref ();
sp_svg_view_widget_set_resize (SP_SVG_VIEW_WIDGET (ss.view), FALSE,
- sp_document_width (ss.doc), sp_document_height (ss.doc));
+ (ss.doc)->getWidth (), (ss.doc)->getHeight ());
gtk_widget_show (ss.view);
gtk_container_add (GTK_CONTAINER (w), ss.view);
@@ -444,7 +443,7 @@ static void
sp_svgview_set_document(struct SPSlideShow *ss, SPDocument *doc, int current)
{
if (doc && doc != ss->doc) {
- sp_document_ensure_up_to_date (doc);
+ doc->ensureUpToDate();
reinterpret_cast<SPSVGView*>(SP_VIEW_WIDGET_VIEW (ss->view))->setDocument (doc);
ss->doc = doc;
ss->current = current;
@@ -459,7 +458,7 @@ sp_svgview_show_next (struct SPSlideShow *ss)
SPDocument *doc = NULL;
int current = ss->current;
while (!doc && (current < ss->length - 1)) {
- doc = sp_document_new (ss->slides[++current], TRUE, false);
+ doc = SPDocument::createNewDoc (ss->slides[++current], TRUE, false);
}
sp_svgview_set_document(ss, doc, current);
@@ -475,7 +474,7 @@ sp_svgview_show_prev (struct SPSlideShow *ss)
SPDocument *doc = NULL;
int current = ss->current;
while (!doc && (current > 0)) {
- doc = sp_document_new (ss->slides[--current], TRUE, false);
+ doc = SPDocument::createNewDoc (ss->slides[--current], TRUE, false);
}
sp_svgview_set_document(ss, doc, current);
@@ -493,7 +492,7 @@ sp_svgview_goto_first (struct SPSlideShow *ss)
while ( !doc && (current < ss->length - 1)) {
if (current == ss->current)
break;
- doc = sp_document_new (ss->slides[current++], TRUE, false);
+ doc = SPDocument::createNewDoc (ss->slides[current++], TRUE, false);
}
sp_svgview_set_document(ss, doc, current - 1);
@@ -511,7 +510,7 @@ sp_svgview_goto_last (struct SPSlideShow *ss)
while (!doc && (current >= 0)) {
if (current == ss->current)
break;
- doc = sp_document_new (ss->slides[current--], TRUE, false);
+ doc = SPDocument::createNewDoc (ss->slides[current--], TRUE, false);
}
sp_svgview_set_document(ss, doc, current + 1);
diff --git a/src/interface.cpp b/src/interface.cpp
index 471ecc458..62af21a99 100644
--- a/src/interface.cpp
+++ b/src/interface.cpp
@@ -1,5 +1,3 @@
-#define __SP_INTERFACE_C__
-
/** @file
* @brief Main UI stuff
*/
@@ -7,6 +5,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Frank Felfe <innerspace@iname.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2005 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -73,6 +73,8 @@
#include "ige-mac-menu.h"
#endif
+using Inkscape::DocumentUndo;
+
/* Drag and Drop */
typedef enum {
URI_LIST,
@@ -134,6 +136,8 @@ static void sp_ui_menu_item_set_name(SPAction *action,
void *data);
static void sp_recent_open(GtkRecentChooser *, gpointer);
+static void injectRenamedIcons();
+
SPActionEventVector menu_item_event_vector = {
{NULL},
NULL,
@@ -408,6 +412,11 @@ sp_ui_menu_deselect(gpointer object)
void
sp_ui_menuitem_add_icon( GtkWidget *item, gchar *icon_name )
{
+ static bool iconsInjected = false;
+ if ( !iconsInjected ) {
+ iconsInjected = true;
+ injectRenamedIcons();
+ }
GtkWidget *icon;
icon = sp_icon_new( Inkscape::ICON_SIZE_MENU, icon_name );
@@ -1120,7 +1129,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
gtk_widget_translate_coordinates( widget, &(desktop->canvas->widget), x, y, &destX, &destY );
Geom::Point where( sp_canvas_window_to_world( desktop->canvas, Geom::Point( destX, destY ) ) );
- SPItem *item = desktop->item_at_point( where, true );
+ SPItem *item = desktop->getItemAtPoint( where, true );
if ( item )
{
bool fillnotstroke = (drag_context->action != GDK_ACTION_MOVE);
@@ -1159,7 +1168,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
g_free(str);
str = 0;
- sp_object_setAttribute( SP_OBJECT(item),
+ SP_OBJECT(item)->setAttribute(
fillnotstroke ? "inkscape:x-fill-tag":"inkscape:x-stroke-tag",
palName.c_str(),
false );
@@ -1177,7 +1186,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
sp_desktop_apply_css_recursive( item, css, true );
item->updateRepr();
- sp_document_done( doc , SP_VERB_NONE,
+ SPDocumentUndo::done( doc , SP_VERB_NONE,
_("Drop color"));
if ( srgbProf ) {
@@ -1211,13 +1220,13 @@ sp_ui_drag_data_received(GtkWidget *widget,
//0x0ff & (data->data[3] >> 8),
));
- SPItem *item = desktop->item_at_point( where, true );
+ SPItem *item = desktop->getItemAtPoint( where, true );
bool consumed = false;
if (desktop->event_context && desktop->event_context->get_drag()) {
consumed = desktop->event_context->get_drag()->dropColor(item, colorspec, button_dt);
if (consumed) {
- sp_document_done( doc , SP_VERB_NONE, _("Drop color on gradient"));
+ DocumentUndo::done( doc , SP_VERB_NONE, _("Drop color on gradient") );
desktop->event_context->get_drag()->updateDraggers();
}
}
@@ -1225,7 +1234,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
//if (!consumed && tools_active(desktop, TOOLS_TEXT)) {
// consumed = sp_text_context_drop_color(c, button_doc);
// if (consumed) {
- // sp_document_done( doc , SP_VERB_NONE, _("Drop color on gradient stop"));
+ // SPDocumentUndo::done( doc , SP_VERB_NONE, _("Drop color on gradient stop"));
// }
//}
@@ -1246,7 +1255,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
( !SP_OBJECT_STYLE(item)->stroke.isNone() ?
desktop->current_zoom() *
SP_OBJECT_STYLE (item)->stroke_width.computed *
- sp_item_i2d_affine(item).descrim() * 0.5
+ item->i2d_affine().descrim() * 0.5
: 0.0)
+ prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
@@ -1263,8 +1272,8 @@ sp_ui_drag_data_received(GtkWidget *widget,
sp_desktop_apply_css_recursive( item, css, true );
item->updateRepr();
- sp_document_done( doc , SP_VERB_NONE,
- _("Drop color"));
+ DocumentUndo::done( doc , SP_VERB_NONE,
+ _("Drop color") );
}
}
}
@@ -1291,7 +1300,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
unsigned int b = color.getB();
SPGradient* matches = 0;
- const GSList *gradients = sp_document_get_resource_list(doc, "gradient");
+ const GSList *gradients = doc->getResourceList("gradient");
for (const GSList *item = gradients; item; item = item->next) {
SPGradient* grad = SP_GRADIENT(item->data);
if ( color.descr == grad->getId() ) {
@@ -1321,13 +1330,13 @@ sp_ui_drag_data_received(GtkWidget *widget,
Geom::Point const button_dt(desktop->w2d(where));
Geom::Point const button_doc(desktop->dt2doc(button_dt));
- SPItem *item = desktop->item_at_point( where, true );
+ SPItem *item = desktop->getItemAtPoint( where, true );
bool consumed = false;
if (desktop->event_context && desktop->event_context->get_drag()) {
consumed = desktop->event_context->get_drag()->dropColor(item, colorspec.c_str(), button_dt);
if (consumed) {
- sp_document_done( doc , SP_VERB_NONE, _("Drop color on gradient"));
+ DocumentUndo::done( doc , SP_VERB_NONE, _("Drop color on gradient") );
desktop->event_context->get_drag()->updateDraggers();
}
}
@@ -1349,7 +1358,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
( !SP_OBJECT_STYLE(item)->stroke.isNone() ?
desktop->current_zoom() *
SP_OBJECT_STYLE (item)->stroke_width.computed *
- sp_item_i2d_affine(item).descrim() * 0.5
+ item->i2d_affine().descrim() * 0.5
: 0.0)
+ prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
@@ -1366,8 +1375,8 @@ sp_ui_drag_data_received(GtkWidget *widget,
sp_desktop_apply_css_recursive( item, css, true );
item->updateRepr();
- sp_document_done( doc , SP_VERB_NONE,
- _("Drop color"));
+ DocumentUndo::done( doc , SP_VERB_NONE,
+ _("Drop color") );
}
}
}
@@ -1390,7 +1399,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
Inkscape::XML::Node *newgroup = rnewdoc->createElement("svg:g");
newgroup->setAttribute("style", style);
- Inkscape::XML::Document * xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document * xml_doc = doc->getReprDoc();
for (Inkscape::XML::Node *child = repr->firstChild(); child != NULL; child = child->next()) {
Inkscape::XML::Node *newchild = child->duplicate(xml_doc);
newgroup->appendChild(newchild);
@@ -1409,7 +1418,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
// move to mouse pointer
{
- sp_document_ensure_up_to_date(sp_desktop_document(desktop));
+ sp_desktop_document(desktop)->ensureUpToDate();
Geom::OptRect sel_bbox = selection->bounds();
if (sel_bbox) {
Geom::Point m( desktop->point() - sel_bbox->midpoint() );
@@ -1418,8 +1427,8 @@ sp_ui_drag_data_received(GtkWidget *widget,
}
Inkscape::GC::release(newgroup);
- sp_document_done(doc, SP_VERB_NONE,
- _("Drop SVG"));
+ DocumentUndo::done( doc, SP_VERB_NONE,
+ _("Drop SVG") );
break;
}
@@ -1452,8 +1461,8 @@ sp_ui_drag_data_received(GtkWidget *widget,
ext->set_param_optiongroup("link", save ? "embed" : "link");
ext->set_gui(true);
- sp_document_done( doc , SP_VERB_NONE,
- _("Drop bitmap image"));
+ DocumentUndo::done( doc , SP_VERB_NONE,
+ _("Drop bitmap image") );
break;
}
}
@@ -1595,6 +1604,32 @@ sp_ui_menu_item_set_name(SPAction */*action*/, Glib::ustring name, void *data)
//a menu item in yet another way...
}
+void injectRenamedIcons()
+{
+ Glib::RefPtr<Gtk::IconTheme> iconTheme = Gtk::IconTheme::get_default();
+
+ std::vector< std::pair<Glib::ustring, Glib::ustring> > renamed;
+ renamed.push_back(std::make_pair("gtk-file", "document-x-generic"));
+ renamed.push_back(std::make_pair("gtk-directory", "folder"));
+
+ for ( std::vector< std::pair<Glib::ustring, Glib::ustring> >::iterator it = renamed.begin(); it < renamed.end(); ++it ) {
+ bool hasIcon = iconTheme->has_icon(it->first);
+ bool hasSecondIcon = iconTheme->has_icon(it->second);
+
+ if ( !hasIcon && hasSecondIcon ) {
+ Glib::ArrayHandle<int> sizes = iconTheme->get_icon_sizes(it->second);
+ for ( Glib::ArrayHandle<int>::iterator it2 = sizes.begin(); it2 < sizes.end(); ++it2 ) {
+ Glib::RefPtr<Gdk::Pixbuf> pb = iconTheme->load_icon( it->second, *it2 );
+ if ( pb ) {
+ // install a private copy of the pixbuf to avoid pinning a theme
+ Glib::RefPtr<Gdk::Pixbuf> pbCopy = pb->copy();
+ Gtk::IconTheme::add_builtin_icon( it->first, *it2, pbCopy );
+ }
+ }
+ }
+ }
+}
+
/*
Local Variables:
diff --git a/src/interface.h b/src/interface.h
index 30fda6a39..01732e911 100644
--- a/src/interface.h
+++ b/src/interface.h
@@ -1,5 +1,5 @@
-#ifndef __SP_INTERFACE_H__
-#define __SP_INTERFACE_H__
+#ifndef SEEN_SP_INTERFACE_H
+#define SEEN_SP_INTERFACE_H
/*
* Main UI stuff
@@ -7,6 +7,7 @@
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Frank Felfe <innerspace@iname.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -17,7 +18,7 @@
#include <gtk/gtkstyle.h>
#include "forward.h"
-
+#include "sp-item.h"
/**
* Create a new document window.
@@ -69,7 +70,7 @@ void sp_ui_dialog_title_string (Inkscape::Verb * verb, gchar* c);
void sp_ui_error_dialog (const gchar * message);
bool sp_ui_overwrite_file (const gchar * filename);
-#endif
+#endif // SEEN_SP_INTERFACE_H
/*
Local Variables:
diff --git a/src/jabber_whiteboard/dialog/choose-desktop.cpp b/src/jabber_whiteboard/dialog/choose-desktop.cpp
index d46fd0161..bdcabd17f 100644
--- a/src/jabber_whiteboard/dialog/choose-desktop.cpp
+++ b/src/jabber_whiteboard/dialog/choose-desktop.cpp
@@ -31,8 +31,8 @@ void ChooseDesktop::cancelCallback()
}
void ChooseDesktop::doubleClickCallback(
- const Gtk::TreeModel::Path &path,
- Gtk::TreeViewColumn *col)
+ const Gtk::TreeModel::Path & /*path*/,
+ Gtk::TreeViewColumn * /*col*/)
{
response(Gtk::RESPONSE_OK);
hide();
@@ -71,7 +71,7 @@ bool ChooseDesktop::doSetup()
SPDesktop *desktop = (SPDesktop *)*p;
Gtk::TreeModel::Row row = *(desktopListStore->append());
- row[desktopColumns.nameColumn] = (desktop->doc())->name;
+ row[desktopColumns.nameColumn] = desktop->doc()->getName();
row[desktopColumns.desktopColumn] = (SPDesktop *)*p;
p++;
}
diff --git a/src/jabber_whiteboard/node-tracker.cpp b/src/jabber_whiteboard/node-tracker.cpp
index a506d472a..9f40a7dc6 100644
--- a/src/jabber_whiteboard/node-tracker.cpp
+++ b/src/jabber_whiteboard/node-tracker.cpp
@@ -37,8 +37,8 @@ namespace Whiteboard {
* A special node is a node that can only appear once in a document.
*/
char const* specialnodekeys[] = {
- DOCUMENT_ROOT_NODE,
- DOCUMENT_NAMEDVIEW_NODE,
+ DOCUMENT_ROOT_NODE,
+ DOCUMENT_NAMEDVIEW_NODE,
};
/**
@@ -47,8 +47,8 @@ char const* specialnodekeys[] = {
* A special node is a node that can only appear once in a document.
*/
char const* specialnodenames[] = {
- DOCUMENT_ROOT_NAME,
- DOCUMENT_NAMEDVIEW_NAME,
+ DOCUMENT_ROOT_NAME,
+ DOCUMENT_NAMEDVIEW_NAME,
};
XMLNodeTracker::XMLNodeTracker(SessionManager* sm) :
@@ -94,7 +94,7 @@ XMLNodeTracker::setSessionManager(const SessionManager *val)
void
XMLNodeTracker::put(const Glib::ustring &key, const XML::Node &nodeArg)
-{
+{
keyNodeTable.put(key, &nodeArg);
}
@@ -159,7 +159,7 @@ XMLNodeTracker::isTracking(const XML::Node &node)
bool
XMLNodeTracker::isRootNode(const XML::Node &node)
{
- XML::Node* docroot = sp_document_repr_root(_sm->getDocument());
+ XML::Node* docroot = _sm->getDocument()->getReprRoot();
return (docroot == &node);
}
@@ -182,7 +182,7 @@ XMLNodeTracker::remove(const XML::Node &nodeArg)
bool
XMLNodeTracker::isSpecialNode(const Glib::ustring &name)
{
- return (_specialnodes.find(name.data()) != _specialnodes.end());
+ return (_specialnodes.find(name.data()) != _specialnodes.end());
}
Glib::ustring
@@ -273,23 +273,22 @@ XMLNodeTracker::dump()
}
}
-void
-XMLNodeTracker::reset()
+void XMLNodeTracker::reset()
{
_clear();
// Find and insert special nodes
// root node
- put(_rootKey, *(sp_document_repr_root(_sm->getDocument())));
+ put(_rootKey, *(_sm->getDocument()->getReprRoot()));
// namedview node
SPObject* namedview = sp_item_group_get_child_by_name(
(SPGroup *)_sm->getDocument()->root,
NULL, DOCUMENT_NAMEDVIEW_NAME);
if (!namedview) {
- g_warning("namedview node does not exist; it will be created during synchronization");
+ g_warning("namedview node does not exist; it will be created during synchronization");
} else {
- put(_namedviewKey, *(SP_OBJECT_REPR(namedview)));
+ put(_namedviewKey, *(SP_OBJECT_REPR(namedview)));
}
}
diff --git a/src/jabber_whiteboard/session-manager.cpp b/src/jabber_whiteboard/session-manager.cpp
index 0dcd744c3..60d0b7378 100644
--- a/src/jabber_whiteboard/session-manager.cpp
+++ b/src/jabber_whiteboard/session-manager.cpp
@@ -4,6 +4,7 @@
* Authors:
* David Yip <yipdw@rose-hulman.edu>
* Bob Jamison (Pedro port)
+ * Abhishek Sharma
*
* Copyright (c) 2005 Authors
*
@@ -56,15 +57,15 @@ SessionManager *sessionManagerInstance = NULL;
void SessionManager::showClient()
{
- SessionManager::instance().gui.show();
+ SessionManager::instance().gui.show();
}
-SessionManager&
-SessionManager::instance()
+SessionManager &SessionManager::instance()
{
- if (!sessionManagerInstance)
+ if (!sessionManagerInstance) {
sessionManagerInstance = new SessionManager();
- return *sessionManagerInstance;
+ }
+ return *sessionManagerInstance;
}
SessionManager::SessionManager()
@@ -226,8 +227,8 @@ SessionManager::processWhiteboardEvent(Pedro::XmppEvent const& event)
{
Pedro::Element* root = event.getDOM();
if (root == NULL) {
- g_warning("Received null DOM; ignoring message.");
- return;
+ g_warning("Received null DOM; ignoring message.");
+ return;
}
Pedro::DOMString session = root->getTagAttribute("wb", "session");
@@ -296,11 +297,11 @@ SessionManager::checkInvitationQueue()
if (invitations.size() > 0)
{
// There's an invitation to process; process it.
- Invitation invitation = invitations.front();
+ Invitation invitation = invitations.front();
Glib::ustring from = invitation.first;
Glib::ustring sessionId = invitation.second;
- Glib::ustring primary =
+ Glib::ustring primary =
"<span weight=\"bold\" size=\"larger\">" +
String::ucompose(_("<b>%1</b> has invited you to a whiteboard session."), from) +
"</span>\n\n" +
@@ -366,7 +367,7 @@ makeInkboardDocument(int code, gchar const* rootname, State::SessionType type, G
Glib::ustring name = String::ucompose(
_("Inkboard session (%1 to %2)"), SessionManager::instance().getClient().getJid(), to);
- doc = sp_document_create(rdoc, NULL, NULL, name.c_str(), TRUE);
+ doc = SPDocument::createDoc(rdoc, NULL, NULL, name.c_str(), TRUE);
g_return_val_if_fail(doc != NULL, NULL);
return doc;
@@ -378,17 +379,14 @@ makeInkboardDocument(int code, gchar const* rootname, State::SessionType type, G
// in file.cpp.
//
// \see sp_file_new
-SPDesktop*
-makeInkboardDesktop(SPDocument* doc)
+SPDesktop *makeInkboardDesktop(SPDocument* doc)
{
- SPDesktop* dt;
-
SPViewWidget *dtw = sp_desktop_widget_new(sp_document_namedview(doc, NULL));
g_return_val_if_fail(dtw != NULL, NULL);
- sp_document_unref(doc);
+ doc->doUnref();
sp_create_window(dtw, TRUE);
- dt = static_cast<SPDesktop*>(dtw->view);
+ SPDesktop *dt = static_cast<SPDesktop*>(dtw->view);
sp_namedview_window_from_document(dt);
sp_namedview_update_layers_from_document(dt);
diff --git a/src/knot-holder-entity.cpp b/src/knot-holder-entity.cpp
index c4a22d28f..767a660be 100644
--- a/src/knot-holder-entity.cpp
+++ b/src/knot-holder-entity.cpp
@@ -1,11 +1,10 @@
-#define __KNOT_HOLDER_ENTITY_C__
-
/** \file
* KnotHolderEntity definition.
*
* Authors:
* Mitsuru Oka <oka326@parkcity.ne.jp>
* Maximilian Albert <maximilian.albert@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2001 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -76,7 +75,7 @@ KnotHolderEntity::~KnotHolderEntity()
void
KnotHolderEntity::update_knot()
{
- Geom::Matrix const i2d(sp_item_i2d_affine(item));
+ Geom::Matrix const i2d(item->i2d_affine());
Geom::Point dp(knot_get() * i2d);
@@ -88,7 +87,7 @@ KnotHolderEntity::update_knot()
Geom::Point
KnotHolderEntity::snap_knot_position(Geom::Point const &p)
{
- Geom::Matrix const i2d (sp_item_i2d_affine(item));
+ Geom::Matrix const i2d (item->i2d_affine());
Geom::Point s = p * i2d;
SnapManager &m = desktop->namedview->snap_manager;
@@ -102,7 +101,7 @@ KnotHolderEntity::snap_knot_position(Geom::Point const &p)
Geom::Point
KnotHolderEntity::snap_knot_position_constrained(Geom::Point const &p, Inkscape::Snapper::SnapConstraint const &constraint)
{
- Geom::Matrix const i2d (sp_item_i2d_affine(item));
+ Geom::Matrix const i2d (item->i2d_affine());
Geom::Point s = p * i2d;
SnapManager &m = desktop->namedview->snap_manager;
@@ -158,7 +157,7 @@ PatternKnotHolderEntityXY::knot_set(Geom::Point const &p, Geom::Point const &ori
if (state) {
Geom::Point const q = p_snapped - sp_pattern_extract_trans(pat);
- sp_item_adjust_pattern(item, Geom::Matrix(Geom::Translate(q)));
+ item->adjust_pattern(Geom::Matrix(Geom::Translate(q)));
}
item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
@@ -208,7 +207,7 @@ PatternKnotHolderEntityAngle::knot_set(Geom::Point const &p, Geom::Point const &
Geom::Point const t = sp_pattern_extract_trans(pat);
rot[4] = t[Geom::X];
rot[5] = t[Geom::Y];
- sp_item_adjust_pattern(item, rot, true);
+ item->adjust_pattern(rot, true);
item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
@@ -242,7 +241,7 @@ PatternKnotHolderEntityScale::knot_set(Geom::Point const &p, Geom::Point const &
Geom::Point const t = sp_pattern_extract_trans(pat);
rot[4] = t[Geom::X];
rot[5] = t[Geom::Y];
- sp_item_adjust_pattern(item, rot, true);
+ item->adjust_pattern(rot, true);
item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
diff --git a/src/knot.cpp b/src/knot.cpp
index 824f16c3e..28c991fde 100644
--- a/src/knot.cpp
+++ b/src/knot.cpp
@@ -1,11 +1,10 @@
-#define __SP_KNOT_C__
-
/** \file
* SPKnot implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2005 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -29,6 +28,8 @@
#include "message-context.h"
#include "event-context.h"
+using Inkscape::DocumentUndo;
+
#define KNOT_EVENT_MASK (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | \
GDK_POINTER_MOTION_MASK | \
GDK_POINTER_MOTION_HINT_MASK | \
@@ -427,7 +428,7 @@ static int sp_knot_handler(SPCanvasItem */*item*/, GdkEvent *event, SPKnot *knot
g_signal_emit(knot,
knot_signals[UNGRABBED], 0,
event->button.state);
- sp_document_undo(sp_desktop_document(knot->desktop));
+ DocumentUndo::undo(sp_desktop_document(knot->desktop));
knot->desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Node or handle drag canceled."));
transform_escaped = true;
consumed = TRUE;
diff --git a/src/knotholder.cpp b/src/knotholder.cpp
index df5c1cad9..f5e28618e 100644
--- a/src/knotholder.cpp
+++ b/src/knotholder.cpp
@@ -1,5 +1,3 @@
-#define __KNOT_HOLDER_C__
-
/*
* Container for SPKnot visual handles
*
@@ -7,12 +5,15 @@
* Mitsuru Oka <oka326@parkcity.ne.jp>
* bulia byak <buliabyak@users.sf.net>
* Maximilian Albert <maximilian.albert@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2001-2008 authors
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
+#include <glibmm/i18n.h>
+
#include "document.h"
#include "sp-shape.h"
#include "knot.h"
@@ -36,13 +37,14 @@
#include "xml/repr.h" // for debugging only
-#include <glibmm/i18n.h>
+using Inkscape::DocumentUndo;
class SPDesktop;
KnotHolder::KnotHolder(SPDesktop *desktop, SPItem *item, SPKnotHolderReleasedFunc relhandler)
{
- Inkscape::XML::Node *repr = SP_OBJECT(item)->repr;
+ //XML Tree being used directly here while it shouldn't be...
+ Inkscape::XML::Node *repr = SP_OBJECT(item)->getRepr();
if (!desktop || !item || !SP_IS_ITEM(item)) {
g_print ("Error! Throw an exception, please!\n");
@@ -83,7 +85,7 @@ KnotHolder::~KnotHolder() {
void
KnotHolder::update_knots()
{
- Geom::Matrix const i2d(sp_item_i2d_affine(item));
+ Geom::Matrix const i2d(item->i2d_affine());
for(std::list<KnotHolderEntity *>::iterator i = entity.begin(); i != entity.end(); ++i) {
KnotHolderEntity *e = *i;
@@ -121,7 +123,7 @@ KnotHolder::knot_clicked_handler(SPKnot *knot, guint state)
}
if (SP_IS_SHAPE(item)) {
- sp_shape_set_shape(SP_SHAPE(item));
+ SP_SHAPE(item)->setShape();
}
knot_holder->update_knots();
@@ -146,8 +148,8 @@ KnotHolder::knot_clicked_handler(SPKnot *knot, guint state)
}
// for drag, this is done by ungrabbed_handler, but for click we must do it here
- sp_document_done(SP_OBJECT_DOCUMENT(item), object_verb,
- _("Change handle"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT(item), object_verb,
+ _("Change handle"));
}
void
@@ -163,14 +165,14 @@ KnotHolder::knot_moved_handler(SPKnot *knot, Geom::Point const &p, guint state)
for(std::list<KnotHolderEntity *>::iterator i = this->entity.begin(); i != this->entity.end(); ++i) {
KnotHolderEntity *e = *i;
if (e->knot == knot) {
- Geom::Point const q = p * sp_item_i2d_affine(item).inverse();
- e->knot_set(q, e->knot->drag_origin * sp_item_i2d_affine(item).inverse(), state);
+ Geom::Point const q = p * item->i2d_affine().inverse();
+ e->knot_set(q, e->knot->drag_origin * item->i2d_affine().inverse(), state);
break;
}
}
if (SP_IS_SHAPE (item)) {
- sp_shape_set_shape(SP_SHAPE (item));
+ SP_SHAPE (item)->setShape();
}
this->update_knots();
@@ -225,8 +227,8 @@ KnotHolder::knot_ungrabbed_handler(SPKnot */*knot*/)
object_verb = SP_VERB_SELECTION_DYNAMIC_OFFSET;
}
- sp_document_done(SP_OBJECT_DOCUMENT (object), object_verb,
- _("Move handle"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT (object), object_verb,
+ _("Move handle"));
}
}
diff --git a/src/layer-fns.cpp b/src/layer-fns.cpp
index 7cf582f7a..84f21cd97 100644
--- a/src/layer-fns.cpp
+++ b/src/layer-fns.cpp
@@ -3,6 +3,7 @@
*
* Authors:
* MenTaLguY <mental@rydia.net>
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2004 MenTaLguY
*
@@ -19,6 +20,8 @@
#include "util/find-last-if.h"
#include "layer-fns.h"
+// TODO move the documentation comments into the .h file
+
namespace Inkscape {
namespace {
@@ -36,7 +39,7 @@ SPObject *next_sibling_layer(SPObject *layer) {
using std::find_if;
return find_if<SPObject::SiblingIterator>(
- SP_OBJECT_NEXT(layer), NULL, &is_layer
+ layer->getNext(), NULL, &is_layer
);
}
@@ -174,7 +177,7 @@ SPObject *create_layer(SPObject *root, SPObject *layer, LayerRelativePosition po
id = g_strdup_printf("layer%d", layer_suffix++);
} while (document->getObjectById(id));
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:g");
repr->setAttribute("inkscape:groupmode", "layer");
repr->setAttribute("id", id);
diff --git a/src/layer-manager.cpp b/src/layer-manager.cpp
index 1e1bb8c33..95cefc229 100644
--- a/src/layer-manager.cpp
+++ b/src/layer-manager.cpp
@@ -3,6 +3,7 @@
* to a particular desktop
*
* Copyright 2006 MenTaLguY <mental@rydia.net>
+ * Abhishek Sharma
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
@@ -183,7 +184,7 @@ void LayerManager::renameLayer( SPObject* obj, gchar const *label, bool uniquify
}
std::set<Glib::ustring> currentNames;
- GSList const *layers=sp_document_get_resource_list(_document, "layer");
+ GSList const *layers=_document->getResourceList("layer");
SPObject *root=_desktop->currentRoot();
if ( root ) {
for ( GSList const *iter=layers ; iter ; iter = iter->next ) {
@@ -218,7 +219,7 @@ void LayerManager::_setDocument(SPDocument *document) {
}
_document = document;
if (document) {
- _resource_connection = sp_document_resources_changed_connect(document, "layer", sigc::mem_fun(*this, &LayerManager::_rebuild));
+ _resource_connection = document->connectResourcesChanged("layer", sigc::mem_fun(*this, &LayerManager::_rebuild));
}
_rebuild();
}
@@ -248,7 +249,7 @@ void LayerManager::_rebuild() {
if (!_document) // http://sourceforge.net/mailarchive/forum.php?thread_name=5747bce9a7ed077c1b4fc9f0f4f8a5e0%40localhost&forum_name=inkscape-devel
return;
- GSList const *layers = sp_document_get_resource_list(_document, "layer");
+ GSList const *layers = _document->getResourceList("layer");
SPObject *root=_desktop->currentRoot();
if ( root ) {
_addOne(root);
@@ -269,13 +270,15 @@ void LayerManager::_rebuild() {
if ( group->layerMode() == SPGroup::LAYER ) {
// If we have a layer-group as the one or a parent, ensure it is listed as a valid layer.
needsAdd &= ( g_slist_find(const_cast<GSList *>(layers), curr) != NULL );
- if ( (!(group->repr)) || (!(group->repr->parent())) ) {
+ // XML Tree being used here directly while it shouldn't be...
+ if ( (!(group->getRepr())) || (!(group->getRepr()->parent())) ) {
needsAdd = false;
}
} else {
// If a non-layer group is a parent of layer groups, then show it also as a layer.
// TODO add the magic Inkscape group mode?
- if ( group->repr && group->repr->parent() ) {
+ // XML Tree being used directly while it shouldn't be...
+ if ( group->getRepr() && group->getRepr()->parent() ) {
additional.insert(group);
} else {
needsAdd = false;
diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp
index 9dbd27b50..3ea57de23 100644
--- a/src/live_effects/effect.cpp
+++ b/src/live_effects/effect.cpp
@@ -1,7 +1,6 @@
-#define INKSCAPE_LIVEPATHEFFECT_CPP
-
/*
* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+ * Abhishek Sharma
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
@@ -256,11 +255,10 @@ Effect::New(EffectType lpenr, LivePathEffectObject *lpeobj)
return neweffect;
}
-void
-Effect::createAndApply(const char* name, SPDocument *doc, SPItem *item)
+void Effect::createAndApply(const char* name, SPDocument *doc, SPItem *item)
{
// Path effect definition
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("inkscape:path-effect");
repr->setAttribute("effect", name);
@@ -524,7 +522,7 @@ Effect::getHelperPaths(SPLPEItem *lpeitem)
// rather than copying PathVectors all over the place
if (show_orig_path) {
// add original path to helperpaths
- SPCurve* curve = sp_shape_get_curve (SP_SHAPE(lpeitem));
+ SPCurve* curve = SP_SHAPE(lpeitem)->getCurve ();
hp_vec.push_back(curve->get_pathvector());
}
diff --git a/src/live_effects/lpe-knot.cpp b/src/live_effects/lpe-knot.cpp
index 86d0907a1..fef4e1f87 100644
--- a/src/live_effects/lpe-knot.cpp
+++ b/src/live_effects/lpe-knot.cpp
@@ -3,6 +3,7 @@
*/
/* Authors:
* Jean-Francois Barraud <jf.barraud@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Authors
*
@@ -509,7 +510,7 @@ void collectPathsAndWidths (SPLPEItem const *lpeitem, std::vector<Geom::Path> &p
if (SP_IS_PATH(lpeitem)) {
c = sp_path_get_curve_for_edit(SP_PATH(lpeitem));
} else {
- c = sp_shape_get_curve(SP_SHAPE(lpeitem));
+ c = SP_SHAPE(lpeitem)->getCurve();
}
if (c) {
Geom::PathVector subpaths = c->get_pathvector();
@@ -647,8 +648,8 @@ KnotHolderEntityCrossingSwitcher::knot_click(guint state)
//std::cout<<"crossing set to"<<lpe->crossing_points[s].sign<<".\n";
}
lpe->crossing_points_vector.param_set_and_write_new_value(lpe->crossing_points.to_vector());
- sp_document_done(lpe->getSPDoc(), SP_VERB_DIALOG_LIVE_PATH_EFFECT, /// @todo Is this the right verb?
- _("Change knot crossing"));
+ DocumentUndo::done(lpe->getSPDoc(), SP_VERB_DIALOG_LIVE_PATH_EFFECT, /// @todo Is this the right verb?
+ _("Change knot crossing"));
// FIXME: this should not directly ask for updating the item. It should write to SVG, which triggers updating.
// sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), false, true);
diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp
index a3a0faf37..1af2ed6ca 100644
--- a/src/live_effects/lpe-mirror_symmetry.cpp
+++ b/src/live_effects/lpe-mirror_symmetry.cpp
@@ -1,4 +1,3 @@
-#define INKSCAPE_LPE_MIRROR_SYMMETRY_CPP
/** \file
* LPE <mirror_symmetry> implementation: mirrors a path with respect to a given line.
*/
@@ -6,6 +5,7 @@
* Authors:
* Maximilian Albert
* Johan Engelen
+ * Abhishek Sharma
*
* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
* Copyright (C) Maximilin Albert 2008 <maximilian.albert@gmail.com>
@@ -46,7 +46,7 @@ LPEMirrorSymmetry::doOnApply (SPLPEItem *lpeitem)
using namespace Geom;
SPItem *item = SP_ITEM(lpeitem);
- Geom::Matrix t = sp_item_i2d_affine(item);
+ Geom::Matrix t = item->i2d_affine();
Geom::Rect bbox = *item->getBounds(t); // fixme: what happens if getBounds does not return a valid rect?
Point A(bbox.left(), bbox.bottom());
diff --git a/src/live_effects/lpegroupbbox.cpp b/src/live_effects/lpegroupbbox.cpp
index 3820b5ba7..e6fc95f86 100644
--- a/src/live_effects/lpegroupbbox.cpp
+++ b/src/live_effects/lpegroupbbox.cpp
@@ -1,7 +1,6 @@
-#define INKSCAPE_LPEGROUPBBOX_CPP
-
/*
* Copyright (C) Steren Giannini 2008 <steren.giannini@gmail.com>
+ * Abhishek Sharma
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
@@ -31,7 +30,7 @@ GroupBBoxEffect::original_bbox(SPLPEItem *lpeitem, bool absolute)
Geom::Matrix transform;
if (absolute) {
- transform = sp_item_i2doc_affine(item);
+ transform = item->i2doc_affine();
}
else {
transform = Geom::identity();
diff --git a/src/live_effects/lpeobject.cpp b/src/live_effects/lpeobject.cpp
index aa916318d..389e18d20 100644
--- a/src/live_effects/lpeobject.cpp
+++ b/src/live_effects/lpeobject.cpp
@@ -1,7 +1,6 @@
-#define INKSCAPE_LIVEPATHEFFECT_OBJECT_CPP
-
/*
* Copyright (C) Johan Engelen 2007-2008 <j.b.c.engelen@utwente.nl>
+ * Abhishek Sharma
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
@@ -104,14 +103,14 @@ LivePathEffectObject::livepatheffect_build(SPObject *object, SPDocument *documen
if (((SPObjectClass *) livepatheffect_parent_class)->build)
(* ((SPObjectClass *) livepatheffect_parent_class)->build)(object, document, repr);
- sp_object_read_attr(object, "effect");
+ object->readAttr( "effect" );
if (repr) {
repr->addListener (&livepatheffect_repr_events, object);
}
/* Register ourselves, is this necessary? */
-// sp_document_add_resource(document, "path-effect", object);
+// document->addResource("path-effect", object);
}
/**
@@ -132,7 +131,7 @@ LivePathEffectObject::livepatheffect_release(SPObject *object)
/*
if (SP_OBJECT_DOCUMENT(object)) {
// Unregister ourselves
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "livepatheffect", SP_OBJECT(object));
+ sp_document_removeResource(SP_OBJECT_DOCUMENT(object), "livepatheffect", SP_OBJECT(object));
}
if (gradient->ref) {
@@ -247,12 +246,11 @@ livepatheffect_on_repr_attr_changed ( Inkscape::XML::Node * /*repr*/,
* returns 'this' when no forking was necessary (and therefore no duplicate was made)
* Check out sp_lpe_item_fork_path_effects_if_necessary !
*/
-LivePathEffectObject *
-LivePathEffectObject::fork_private_if_necessary(unsigned int nr_of_allowed_users)
+LivePathEffectObject *LivePathEffectObject::fork_private_if_necessary(unsigned int nr_of_allowed_users)
{
- if (SP_OBJECT_HREFCOUNT(this) > nr_of_allowed_users) {
+ if (hrefcount > nr_of_allowed_users) {
SPDocument *doc = SP_OBJECT_DOCUMENT(this);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *dup_repr = SP_OBJECT_REPR (this)->duplicate(xml_doc);
SP_OBJECT_REPR (SP_DOCUMENT_DEFS (doc))->addChild(dup_repr, NULL);
diff --git a/src/live_effects/parameter/path-reference.h b/src/live_effects/parameter/path-reference.h
index 67508e531..3bedecccb 100644
--- a/src/live_effects/parameter/path-reference.h
+++ b/src/live_effects/parameter/path-reference.h
@@ -5,11 +5,13 @@
* The reference corresponding to href of LPE PathParam.
*
* Copyright (C) 2008 Johan Engelen
+ * Abhishek Sharma
*
* Released under GNU GPL, read the file 'COPYING' for more information.
*/
#include <forward.h>
+#include "sp-item.h"
#include <uri-references.h>
#include <sigc++/sigc++.h>
diff --git a/src/live_effects/parameter/path.cpp b/src/live_effects/parameter/path.cpp
index d8d5b0a7c..8d9b2376f 100644
--- a/src/live_effects/parameter/path.cpp
+++ b/src/live_effects/parameter/path.cpp
@@ -1,7 +1,6 @@
-#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_PATH_CPP
-
/*
* Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
+ * Abhishek Sharma
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
@@ -209,7 +208,7 @@ PathParam::param_editOncanvas(SPItem *item, SPDesktop * dt)
ShapeRecord r;
r.role = SHAPE_ROLE_LPE_PARAM;
- r.edit_transform = sp_item_i2d_affine(item); // TODO is it right?
+ r.edit_transform = item->i2d_affine(); // TODO is it right?
if (!href) {
r.item = reinterpret_cast<SPItem*>(param_effect->getLPEObj());
r.lpe_key = param_key;
@@ -366,7 +365,7 @@ PathParam::linked_modified(SPObject *linked_obj, guint /*flags*/)
{
SPCurve *curve = NULL;
if (SP_IS_SHAPE(linked_obj)) {
- curve = sp_shape_get_curve(SP_SHAPE(linked_obj));
+ curve = SP_SHAPE(linked_obj)->getCurve();
}
if (SP_IS_TEXT(linked_obj)) {
curve = SP_TEXT(linked_obj)->getNormalizedBpath();
@@ -414,8 +413,8 @@ PathParam::on_paste_button_click()
Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get();
Glib::ustring svgd = cm->getPathParameter(SP_ACTIVE_DESKTOP);
paste_param_path(svgd.data());
- sp_document_done(param_effect->getSPDoc(), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
- _("Paste path parameter"));
+ DocumentUndo::done(param_effect->getSPDoc(), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
+ _("Paste path parameter"));
}
void
@@ -446,8 +445,8 @@ PathParam::on_link_button_click()
// check if linking to object to which LPE is applied (maybe delegated to PathReference
param_write_to_repr(pathid.c_str());
- sp_document_done(param_effect->getSPDoc(), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
- _("Link path parameter to path"));
+ DocumentUndo::done(param_effect->getSPDoc(), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
+ _("Link path parameter to path"));
}
}
diff --git a/src/lpe-tool-context.cpp b/src/lpe-tool-context.cpp
index 8aa350d86..f25949296 100644
--- a/src/lpe-tool-context.cpp
+++ b/src/lpe-tool-context.cpp
@@ -4,6 +4,7 @@
* Authors:
* Maximilian Albert <maximilian.albert@gmail.com>
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1998 The Free Software Foundation
* Copyright (C) 1999-2005 authors
@@ -392,8 +393,8 @@ lpetool_context_switch_mode(SPLPEToolContext *lc, Inkscape::LivePathEffect::Effe
void
lpetool_get_limiting_bbox_corners(SPDocument *document, Geom::Point &A, Geom::Point &B) {
- Geom::Coord w = sp_document_width(document);
- Geom::Coord h = sp_document_height(document);
+ Geom::Coord w = document->getWidth();
+ Geom::Coord h = document->getHeight();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
double ulx = prefs->getDouble("/tools/lpetool/bbox_upperleftx", 0);
@@ -472,7 +473,7 @@ lpetool_create_measuring_items(SPLPEToolContext *lc, Inkscape::Selection *select
for (GSList const *i = selection->itemList(); i != NULL; i = i->next) {
if (SP_IS_PATH(i->data)) {
path = SP_PATH(i->data);
- curve = sp_shape_get_curve(SP_SHAPE(path));
+ curve = SP_SHAPE(path)->getCurve();
Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = paths_to_pw(curve->get_pathvector());
canvas_text = (SPCanvasText *) sp_canvastext_new(tmpgrp, lc->desktop, Geom::Point(0,0), "");
if (!show)
@@ -514,7 +515,7 @@ lpetool_update_measuring_items(SPLPEToolContext *lc)
std::map<SPPath *, SPCanvasItem*>::iterator i;
for (i = lc->measuring_items->begin(); i != lc->measuring_items->end(); ++i) {
path = i->first;
- curve = sp_shape_get_curve(SP_SHAPE(path));
+ curve = SP_SHAPE(path)->getCurve();
Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2 = Geom::paths_to_pw(curve->get_pathvector());
SPUnitId unitid = static_cast<SPUnitId>(prefs->getInt("/tools/lpetool/unitid", SP_UNIT_PX));
SPUnit unit = sp_unit_get_by_id(unitid);
diff --git a/src/main.cpp b/src/main.cpp
index eda6d0b03..a1b21cc4d 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,5 +1,3 @@
-#define __MAIN_C__
-
/** \file
* Inkscape - an ambitious vector drawing program
*
@@ -15,6 +13,8 @@
* Pawel Palucha
* Bryce Harrington <bryce@bryceharrington.com>
* ... and various people who have worked with various projects
+ * Jon A. Cruz <jon@oncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2004 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -1023,7 +1023,7 @@ void sp_process_file_list(GSList *fl)
g_warning("Specified document %s cannot be opened (does not exist or not a valid SVG file)", filename);
} else {
if (sp_vacuum_defs) {
- vacuum_document(doc);
+ doc->vacuumDocument();
}
if (sp_vacuum_defs && !sp_export_svg) {
// save under the name given in the command line
@@ -1040,9 +1040,9 @@ void sp_process_file_list(GSList *fl)
Inkscape::XML::Node *repr;
rdoc = sp_repr_document_new("svg:svg");
repr = rdoc->root();
- repr = sp_document_root(doc)->updateRepr(rdoc, repr, SP_OBJECT_WRITE_BUILD);
+ repr = doc->getRoot()->updateRepr(rdoc, repr, SP_OBJECT_WRITE_BUILD);
sp_repr_save_rebased_file(repr->document(), sp_export_svg, SP_SVG_NS_URI,
- doc->base, sp_export_svg);
+ doc->getBase(), sp_export_svg);
}
if (sp_export_ps) {
do_export_ps_pdf(doc, sp_export_ps, "image/x-postscript");
@@ -1196,15 +1196,15 @@ do_query_dimension (SPDocument *doc, bool extent, Geom::Dim2 const axis, const g
return;
}
} else {
- o = SP_DOCUMENT_ROOT(doc);
+ o = doc->getRoot();
}
if (o) {
- sp_document_ensure_up_to_date (doc);
+ doc->ensureUpToDate();
SPItem *item = ((SPItem *) o);
// "true" SVG bbox for scripting
- Geom::OptRect area = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect area = item->getBounds(item->i2doc_affine());
if (area) {
Inkscape::SVGOStringStream os;
if (extent) {
@@ -1219,15 +1219,12 @@ do_query_dimension (SPDocument *doc, bool extent, Geom::Dim2 const axis, const g
}
}
-static void
-do_query_all (SPDocument *doc)
+static void do_query_all(SPDocument *doc)
{
- SPObject *o = NULL;
-
- o = SP_DOCUMENT_ROOT(doc);
+ SPObject *o = doc->getRoot();
if (o) {
- sp_document_ensure_up_to_date (doc);
+ doc->ensureUpToDate();
do_query_all_recurse(o);
}
}
@@ -1237,7 +1234,7 @@ do_query_all_recurse (SPObject *o)
{
SPItem *item = ((SPItem *) o);
if (o->getId() && SP_IS_ITEM(item)) {
- Geom::OptRect area = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect area = item->getBounds(item->i2doc_affine());
if (area) {
Inkscape::SVGOStringStream os;
os << o->getId();
@@ -1277,12 +1274,12 @@ sp_do_export_png(SPDocument *doc)
SPObject *o_area = NULL;
if (sp_export_id && sp_export_area_drawing) {
o = doc->getObjectById(sp_export_id);
- o_area = SP_DOCUMENT_ROOT (doc);
+ o_area = doc->getRoot();
} else if (sp_export_id) {
o = doc->getObjectById(sp_export_id);
o_area = o;
} else if (sp_export_area_drawing) {
- o = SP_DOCUMENT_ROOT (doc);
+ o = doc->getRoot();
o_area = o;
}
@@ -1330,9 +1327,9 @@ sp_do_export_png(SPDocument *doc)
}
// write object bbox to area
- sp_document_ensure_up_to_date (doc);
+ doc->ensureUpToDate();
Geom::OptRect areaMaybe;
- sp_item_invoke_bbox((SPItem *) o_area, areaMaybe, sp_item_i2d_affine((SPItem *) o_area), TRUE);
+ static_cast<SPItem *>(o_area)->invoke_bbox( areaMaybe, static_cast<SPItem *>(o_area)->i2d_affine(), TRUE);
if (areaMaybe) {
area = *areaMaybe;
} else {
@@ -1355,9 +1352,9 @@ sp_do_export_png(SPDocument *doc)
area = Geom::Rect(Geom::Interval(x0,x1), Geom::Interval(y0,y1));
} else if (sp_export_area_page || !(sp_export_id || sp_export_area_drawing)) {
/* Export the whole page: note: Inkscape uses 'page' in all menus and dialogs, not 'canvas' */
- sp_document_ensure_up_to_date (doc);
+ doc->ensureUpToDate();
Geom::Point origin (SP_ROOT(doc->root)->x.computed, SP_ROOT(doc->root)->y.computed);
- area = Geom::Rect(origin, origin + sp_document_dimensions(doc));
+ area = Geom::Rect(origin, origin + doc->getDimensions());
}
// set filename and dpi from options, if not yet set from the hints
@@ -1451,8 +1448,8 @@ sp_do_export_png(SPDocument *doc)
gchar *path = 0;
if (filename_from_hint) {
//Make relative paths go from the document location, if possible:
- if (!g_path_is_absolute(filename) && doc->uri) {
- gchar *dirname = g_path_get_dirname(doc->uri);
+ if (!g_path_is_absolute(filename) && doc->getURI()) {
+ gchar *dirname = g_path_get_dirname(doc->getURI());
if (dirname) {
path = g_build_filename(dirname, filename, NULL);
g_free(dirname);
diff --git a/src/marker.cpp b/src/marker.cpp
index f89dd2bc0..e403bd71f 100644
--- a/src/marker.cpp
+++ b/src/marker.cpp
@@ -1,11 +1,10 @@
-#define __MARKER_C__
-
/*
* SVG <marker> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Bryce Harrington <bryce@bryceharrington.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2003 Lauris Kaplinski
* 2004-2006 Bryce Harrington
@@ -135,14 +134,14 @@ sp_marker_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *re
group = (SPGroup *) object;
marker = (SPMarker *) object;
- sp_object_read_attr (object, "markerUnits");
- sp_object_read_attr (object, "refX");
- sp_object_read_attr (object, "refY");
- sp_object_read_attr (object, "markerWidth");
- sp_object_read_attr (object, "markerHeight");
- sp_object_read_attr (object, "orient");
- sp_object_read_attr (object, "viewBox");
- sp_object_read_attr (object, "preserveAspectRatio");
+ object->readAttr( "markerUnits" );
+ object->readAttr( "refX" );
+ object->readAttr( "refY" );
+ object->readAttr( "markerWidth" );
+ object->readAttr( "markerHeight" );
+ object->readAttr( "orient" );
+ object->readAttr( "viewBox" );
+ object->readAttr( "preserveAspectRatio" );
if (((SPObjectClass *) parent_class)->build)
((SPObjectClass *) parent_class)->build (object, document, repr);
@@ -518,8 +517,10 @@ sp_marker_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::X
repr->setAttribute("orient", NULL);
}
/* fixme: */
- repr->setAttribute("viewBox", object->repr->attribute("viewBox"));
- repr->setAttribute("preserveAspectRatio", object->repr->attribute("preserveAspectRatio"));
+ //XML Tree being used directly here while it shouldn't be....
+ repr->setAttribute("viewBox", object->getRepr()->attribute("viewBox"));
+ //XML Tree being used directly here while it shouldn't be....
+ repr->setAttribute("preserveAspectRatio", object->getRepr()->attribute("preserveAspectRatio"));
if (((SPObjectClass *) (parent_class))->write)
((SPObjectClass *) (parent_class))->write (object, xml_doc, repr, flags);
@@ -710,11 +711,10 @@ sp_marker_view_remove (SPMarker *marker, SPMarkerView *view, unsigned int destro
delete view;
}
-const gchar *
-generate_marker (GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Matrix /*transform*/, Geom::Matrix move)
+const gchar *generate_marker(GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Matrix /*transform*/, Geom::Matrix move)
{
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
- Inkscape::XML::Node *defsrepr = SP_OBJECT_REPR (SP_DOCUMENT_DEFS (document));
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
+ Inkscape::XML::Node *defsrepr = SP_DOCUMENT_DEFS(document)->getRepr();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:marker");
@@ -741,7 +741,7 @@ generate_marker (GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::M
dup_transform = Geom::identity();
dup_transform *= move;
- sp_item_write_transform(copy, SP_OBJECT_REPR(copy), dup_transform);
+ copy->doWriteTransform(SP_OBJECT_REPR(copy), dup_transform);
}
Inkscape::GC::release(repr);
diff --git a/src/object-edit.cpp b/src/object-edit.cpp
index 314a45700..f9947b619 100644
--- a/src/object-edit.cpp
+++ b/src/object-edit.cpp
@@ -1,5 +1,3 @@
-#define __SP_OBJECT_EDIT_C__
-
/*
* Node editing extension to objects
*
@@ -7,6 +5,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Mitsuru Oka
* Maximilian Albert <maximilian.albert@gmail.com>
+ * Abhishek Sharma
*
* Licensed under GNU GPL
*/
@@ -165,7 +164,6 @@ RectKnotHolderEntityRX::knot_click(guint state)
SP_OBJECT_REPR(rect)->setAttribute("ry", SP_OBJECT_REPR(rect)->attribute("rx"));
}
- update_knot();
}
Geom::Point
@@ -476,7 +474,7 @@ Box3DKnotHolderEntity::knot_set_generic(SPItem *item, unsigned int knot_id, Geom
g_assert(item != NULL);
SPBox3D *box = SP_BOX3D(item);
- Geom::Matrix const i2d (sp_item_i2d_affine (item));
+ Geom::Matrix const i2d (item->i2d_affine ());
Box3D::Axis movement;
if ((knot_id < 4) != (state & GDK_SHIFT_MASK)) {
@@ -652,7 +650,7 @@ Box3DKnotHolderEntityCenter::knot_set(Geom::Point const &new_pos, Geom::Point co
Geom::Point const s = snap_knot_position(new_pos);
SPBox3D *box = SP_BOX3D(item);
- Geom::Matrix const i2d (sp_item_i2d_affine (item));
+ Geom::Matrix const i2d (item->i2d_affine ());
box3d_set_center (SP_BOX3D(item), s * i2d, origin * i2d, !(state & GDK_SHIFT_MASK) ? Box3D::XY : Box3D::Z,
state & GDK_CONTROL_MASK);
diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp
index 51b494498..43651f002 100644
--- a/src/object-snapper.cpp
+++ b/src/object-snapper.cpp
@@ -5,6 +5,8 @@
* Authors:
* Carl Hetherington <inkscape@carlh.net>
* Diederik van Lierop <mail@diedenrezi.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2005 - 2010 Authors
*
@@ -100,7 +102,8 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent,
Geom::Rect bbox_to_snap_incl = bbox_to_snap; // _incl means: will include the snapper tolerance
bbox_to_snap_incl.expandBy(getSnapperTolerance()); // see?
- for (SPObject* o = sp_object_first_child(parent); o != NULL; o = SP_OBJECT_NEXT(o)) {
+ for ( SPObject *o = parent->firstChild(); o; o = o->getNext() ) {
+ g_assert(_snapmanager->getDesktop() != NULL);
if (SP_IS_ITEM(o) && !(_snapmanager->getDesktop()->itemIsHidden(SP_ITEM(o)) && !clip_or_mask)) {
// Snapping to items in a locked layer is allowed
// Don't snap to hidden objects, unless they're a clipped path or a mask
@@ -123,11 +126,11 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent,
// we should also consider that path or mask for snapping to
obj = SP_OBJECT(item->clip_ref->getObject());
if (obj) {
- _findCandidates(obj, it, false, bbox_to_snap, true, sp_item_i2doc_affine(item));
+ _findCandidates(obj, it, false, bbox_to_snap, true, item->i2doc_affine());
}
obj = SP_OBJECT(item->mask_ref->getObject());
if (obj) {
- _findCandidates(obj, it, false, bbox_to_snap, true, sp_item_i2doc_affine(item));
+ _findCandidates(obj, it, false, bbox_to_snap, true, item->i2doc_affine());
}
}
}
@@ -139,12 +142,11 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent,
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)
- sp_item_invoke_bbox(item,
- bbox_of_item,
- sp_item_i2doc_affine(item) * additional_affine * _snapmanager->getDesktop()->doc2dt(),
+ item->invoke_bbox(bbox_of_item,
+ item->i2doc_affine() * additional_affine * _snapmanager->getDesktop()->doc2dt(),
true);
} else {
- sp_item_invoke_bbox(item, bbox_of_item, sp_item_i2d_affine(item), true);
+ item->invoke_bbox( bbox_of_item, item->i2d_affine(), true);
}
if (bbox_of_item) {
// See if the item is within range
@@ -242,7 +244,7 @@ void Inkscape::ObjectSnapper::_collectNodes(Inkscape::SnapSourceType const &t,
}
}
- sp_item_snappoints(root_item, *_points_to_snap_to, &_snapmanager->snapprefs);
+ root_item->getSnappoints(*_points_to_snap_to, &_snapmanager->snapprefs);
// restore the original snap preferences
_snapmanager->snapprefs.setSnapIntersectionCS(old_pref);
@@ -254,7 +256,7 @@ void Inkscape::ObjectSnapper::_collectNodes(Inkscape::SnapSourceType const &t,
// Discard the bbox of a clipped path / mask, because we don't want to snap to both the bbox
// of the item AND the bbox of the clipping path at the same time
if (!(*i).clip_or_mask) {
- Geom::OptRect b = sp_item_bbox_desktop(root_item, bbox_type);
+ Geom::OptRect b = root_item->getBboxDesktop(bbox_type);
getBBoxPoints(b, _points_to_snap_to, true, _snapmanager->snapprefs.getSnapToBBoxNode(), _snapmanager->snapprefs.getSnapBBoxEdgeMidpoints(), _snapmanager->snapprefs.getSnapBBoxMidpoints());
}
}
@@ -342,7 +344,7 @@ void Inkscape::ObjectSnapper::_snapTranslatingGuide(SnappedConstraints &sc,
* Returns index of first NR_END bpath in array.
*/
-void Inkscape::ObjectSnapper::_collectPaths(Geom::Point p,
+void Inkscape::ObjectSnapper::_collectPaths(Geom::Point /*p*/,
Inkscape::SnapSourceType const source_type,
bool const &first_point) const
{
@@ -384,7 +386,7 @@ void Inkscape::ObjectSnapper::_collectPaths(Geom::Point p,
root_item = sp_use_root(SP_USE((*i).item));
g_return_if_fail(root_item);
} else {
- i2doc = sp_item_i2doc_affine((*i).item);
+ i2doc = (*i).item->i2doc_affine();
root_item = (*i).item;
}
@@ -420,7 +422,7 @@ void Inkscape::ObjectSnapper::_collectPaths(Geom::Point p,
// Geom::PathVector *pv = pathvector_for_curve(root_item, curve, true, true, Geom::identity(), (*i).additional_affine);
Geom::PathVector *pv = new Geom::PathVector(curve->get_pathvector());
- (*pv) *= sp_item_i2d_affine(root_item) * (*i).additional_affine * _snapmanager->getDesktop()->doc2dt(); // (_edit_transform * _i2d_transform);
+ (*pv) *= root_item->i2d_affine() * (*i).additional_affine * _snapmanager->getDesktop()->doc2dt(); // (_edit_transform * _i2d_transform);
_paths_to_snap_to->push_back(Inkscape::SnapCandidatePath(pv, SNAPTARGET_PATH, Geom::OptRect())); // Perhaps for speed, get a reference to the Geom::pathvector, and store the transformation besides it.
curve->unref();
@@ -436,10 +438,10 @@ void Inkscape::ObjectSnapper::_collectPaths(Geom::Point p,
// of the item AND the bbox of the clipping path at the same time
if (!(*i).clip_or_mask) {
Geom::OptRect rect;
- sp_item_invoke_bbox(root_item, rect, i2doc, TRUE, bbox_type);
+ root_item->invoke_bbox( rect, i2doc, TRUE, bbox_type);
if (rect) {
Geom::PathVector *path = _getPathvFromRect(*rect);
- rect = sp_item_bbox_desktop(root_item, bbox_type);
+ rect = root_item->getBboxDesktop(bbox_type);
_paths_to_snap_to->push_back(Inkscape::SnapCandidatePath(path, SNAPTARGET_BBOX_EDGE, rect));
}
}
@@ -659,7 +661,7 @@ void Inkscape::ObjectSnapper::freeSnap(SnappedConstraints &sc,
/* Get a list of all the SPItems that we will try to snap to */
if (p.getSourceNum() <= 0) {
Geom::Rect const local_bbox_to_snap = bbox_to_snap ? *bbox_to_snap : Geom::Rect(p.getPoint(), p.getPoint());
- _findCandidates(sp_document_root(_snapmanager->getDocument()), it, p.getSourceNum() <= 0, local_bbox_to_snap, false, Geom::identity());
+ _findCandidates(_snapmanager->getDocument()->getRoot(), it, p.getSourceNum() <= 0, local_bbox_to_snap, false, Geom::identity());
}
// TODO: Argh, UGLY! Get rid of this here, move this logic to the snap manager
@@ -722,7 +724,7 @@ void Inkscape::ObjectSnapper::constrainedSnap( SnappedConstraints &sc,
/* Get a list of all the SPItems that we will try to snap to */
if (p.getSourceNum() <= 0) {
Geom::Rect const local_bbox_to_snap = bbox_to_snap ? *bbox_to_snap : Geom::Rect(pp, pp);
- _findCandidates(sp_document_root(_snapmanager->getDocument()), it, p.getSourceNum() <= 0, local_bbox_to_snap, false, Geom::identity());
+ _findCandidates(_snapmanager->getDocument()->getRoot(), it, p.getSourceNum() <= 0, local_bbox_to_snap, false, Geom::identity());
}
// A constrained snap, is a snap in only one degree of freedom (specified by the constraint line).
@@ -763,7 +765,7 @@ void Inkscape::ObjectSnapper::guideFreeSnap(SnappedConstraints &sc,
std::vector<SPItem*> cand;
std::vector<SPItem const *> const it; //just an empty list
- _findCandidates(sp_document_root(_snapmanager->getDocument()), &it, true, Geom::Rect(p, p), false, Geom::identity());
+ _findCandidates(_snapmanager->getDocument()->getRoot(), &it, true, Geom::Rect(p, p), false, Geom::identity());
_snapTranslatingGuide(sc, p, guide_normal);
}
@@ -778,7 +780,7 @@ void Inkscape::ObjectSnapper::guideConstrainedSnap(SnappedConstraints &sc,
std::vector<SPItem*> cand;
std::vector<SPItem const *> const it; //just an empty list
- _findCandidates(sp_document_root(_snapmanager->getDocument()), &it, true, Geom::Rect(p, p), false, Geom::identity());
+ _findCandidates(_snapmanager->getDocument()->getRoot(), &it, true, Geom::Rect(p, p), false, Geom::identity());
_snapTranslatingGuide(sc, p, guide_normal);
}
@@ -817,7 +819,7 @@ void Inkscape::ObjectSnapper::_clear_paths() const
Geom::PathVector* Inkscape::ObjectSnapper::_getBorderPathv() const
{
- Geom::Rect const border_rect = Geom::Rect(Geom::Point(0,0), Geom::Point(sp_document_width(_snapmanager->getDocument()),sp_document_height(_snapmanager->getDocument())));
+ Geom::Rect const border_rect = Geom::Rect(Geom::Point(0,0), Geom::Point((_snapmanager->getDocument())->getWidth(),(_snapmanager->getDocument())->getHeight()));
return _getPathvFromRect(border_rect);
}
@@ -834,8 +836,8 @@ Geom::PathVector* Inkscape::ObjectSnapper::_getPathvFromRect(Geom::Rect const re
void Inkscape::ObjectSnapper::_getBorderNodes(std::vector<SnapCandidatePoint> *points) const
{
- Geom::Coord w = sp_document_width(_snapmanager->getDocument());
- Geom::Coord h = sp_document_height(_snapmanager->getDocument());
+ Geom::Coord w = (_snapmanager->getDocument())->getWidth();
+ Geom::Coord h = (_snapmanager->getDocument())->getHeight();
points->push_back(Inkscape::SnapCandidatePoint(Geom::Point(0,0), SNAPSOURCE_UNDEFINED, SNAPTARGET_PAGE_CORNER));
points->push_back(Inkscape::SnapCandidatePoint(Geom::Point(0,h), SNAPSOURCE_UNDEFINED, SNAPTARGET_PAGE_CORNER));
points->push_back(Inkscape::SnapCandidatePoint(Geom::Point(w,h), SNAPSOURCE_UNDEFINED, SNAPTARGET_PAGE_CORNER));
diff --git a/src/path-chemistry.cpp b/src/path-chemistry.cpp
index 6a796b2ed..bec3c5cbf 100644
--- a/src/path-chemistry.cpp
+++ b/src/path-chemistry.cpp
@@ -1,5 +1,3 @@
-#define __SP_PATH_CHEMISTRY_C__
-
/*
* Here are handlers for modifying selections, specific to paths
*
@@ -7,6 +5,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Jasper van de Gronde <th.v.d.gronde@hccnet.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2008 Authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -39,6 +39,8 @@
#include "selection-chemistry.h"
#include "path-chemistry.h"
+using Inkscape::DocumentUndo;
+
void
sp_selected_path_combine(SPDesktop *desktop)
{
@@ -135,12 +137,14 @@ sp_selected_path_combine(SPDesktop *desktop)
SP_OBJECT(first)->deleteObject(false);
// delete the topmost.
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
// restore id, transform, path effect, and style
repr->setAttribute("id", id);
- if (transform) repr->setAttribute("transform", transform);
+ if (transform) {
+ repr->setAttribute("transform", transform);
+ }
repr->setAttribute("style", style);
g_free(style);
@@ -150,10 +154,11 @@ sp_selected_path_combine(SPDesktop *desktop)
// set path data corresponding to new curve
gchar *dstring = sp_svg_write_path(curve->get_pathvector());
curve->unref();
- if (path_effect)
+ if (path_effect) {
repr->setAttribute("inkscape:original-d", dstring);
- else
+ } else {
repr->setAttribute("d", dstring);
+ }
g_free(dstring);
// add the new group to the parent of the topmost
@@ -162,8 +167,8 @@ sp_selected_path_combine(SPDesktop *desktop)
// move to the position of the topmost, reduced by the number of deleted items
repr->setPosition(position > 0 ? position : 0);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_COMBINE,
- _("Combine"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_COMBINE,
+ _("Combine"));
selection->set(repr);
@@ -213,8 +218,10 @@ sp_selected_path_break_apart(SPDesktop *desktop)
gint pos = SP_OBJECT_REPR(item)->position();
char const *id = SP_OBJECT_REPR(item)->attribute("id");
- gchar *style = g_strdup(SP_OBJECT(item)->repr->attribute("style"));
- gchar *path_effect = g_strdup(SP_OBJECT(item)->repr->attribute("inkscape:path-effect"));
+ // XML Tree being used directly here while it shouldn't be...
+ gchar *style = g_strdup(SP_OBJECT(item)->getRepr()->attribute("style"));
+ // XML Tree being used directly here while it shouldn't be...
+ gchar *path_effect = g_strdup(SP_OBJECT(item)->getRepr()->attribute("inkscape:path-effect"));
Geom::PathVector apv = curve->get_pathvector() * SP_ITEM(path)->transform;
@@ -272,8 +279,8 @@ sp_selected_path_break_apart(SPDesktop *desktop)
desktop->clearWaitingCursor();
if (did) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_BREAK_APART,
- _("Break apart"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_BREAK_APART,
+ _("Break apart"));
} else {
sp_desktop_message_stack(desktop)->flash(Inkscape::ERROR_MESSAGE, _("<b>No path(s)</b> to break apart in the selection."));
}
@@ -314,8 +321,8 @@ sp_selected_path_to_curves(SPDesktop *desktop, bool interactive)
if (interactive) {
desktop->clearWaitingCursor();
if (did) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_OBJECT_TO_CURVE,
- _("Object to path"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_OBJECT_TO_CURVE,
+ _("Object to path"));
} else {
sp_desktop_message_stack(desktop)->flash(Inkscape::ERROR_MESSAGE, _("<b>No objects</b> to convert to path in the selection."));
return;
@@ -532,7 +539,7 @@ sp_selected_item_to_curved_repr(SPItem *item, guint32 /*text_grouping_policy*/)
SPCurve *curve = NULL;
if (SP_IS_SHAPE(item)) {
- curve = sp_shape_get_curve(SP_SHAPE(item));
+ curve = SP_SHAPE(item)->getCurve();
}
if (!curve)
@@ -627,8 +634,8 @@ sp_selected_path_reverse(SPDesktop *desktop)
desktop->clearWaitingCursor();
if (did) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_REVERSE,
- _("Reverse path"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_REVERSE,
+ _("Reverse path"));
} else {
sp_desktop_message_stack(desktop)->flash(Inkscape::ERROR_MESSAGE, _("<b>No paths</b> to reverse in the selection."));
}
diff --git a/src/persp3d.cpp b/src/persp3d.cpp
index 543d7efde..74208444b 100644
--- a/src/persp3d.cpp
+++ b/src/persp3d.cpp
@@ -1,10 +1,10 @@
-#define __PERSP3D_C__
-
/*
* Class modelling a 3D perspective as an SPObject
*
* Authors:
* Maximilian Albert <Anhalter42@gmx.de>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2007 authors
*
@@ -23,6 +23,8 @@
#include "desktop-handles.h"
#include <glibmm/i18n.h>
+using Inkscape::DocumentUndo;
+
static void persp3d_class_init(Persp3DClass *klass);
static void persp3d_init(Persp3D *persp);
@@ -116,10 +118,10 @@ static void persp3d_build(SPObject *object, SPDocument *document, Inkscape::XML:
/* calls sp_object_set for the respective attributes */
// The transformation matrix is updated according to the values we read for the VPs
- sp_object_read_attr(object, "inkscape:vp_x");
- sp_object_read_attr(object, "inkscape:vp_y");
- sp_object_read_attr(object, "inkscape:vp_z");
- sp_object_read_attr(object, "inkscape:persp3d-origin");
+ object->readAttr( "inkscape:vp_x" );
+ object->readAttr( "inkscape:vp_y" );
+ object->readAttr( "inkscape:vp_z" );
+ object->readAttr( "inkscape:persp3d-origin" );
if (repr) {
repr->addListener (&persp3d_repr_events, object);
@@ -206,20 +208,19 @@ persp3d_update(SPObject *object, SPCtx *ctx, guint flags)
((SPObjectClass *) persp3d_parent_class)->update(object, ctx, flags);
}
-Persp3D *
-persp3d_create_xml_element (SPDocument *document, Persp3DImpl *dup) {// if dup is given, copy the attributes over
+Persp3D *persp3d_create_xml_element(SPDocument *document, Persp3DImpl *dup) {// if dup is given, copy the attributes over
SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *repr;
/* if no perspective is given, create a default one */
repr = xml_doc->createElement("inkscape:perspective");
repr->setAttribute("sodipodi:type", "inkscape:persp3d");
- Proj::Pt2 proj_vp_x = Proj::Pt2 (0.0, sp_document_height(document)/2, 1.0);
+ Proj::Pt2 proj_vp_x = Proj::Pt2 (0.0, document->getHeight()/2, 1.0);
Proj::Pt2 proj_vp_y = Proj::Pt2 (0.0, 1000.0, 0.0);
- Proj::Pt2 proj_vp_z = Proj::Pt2 (sp_document_width(document), sp_document_height(document)/2, 1.0);
- Proj::Pt2 proj_origin = Proj::Pt2 (sp_document_width(document)/2, sp_document_height(document)/3, 1.0);
+ Proj::Pt2 proj_vp_z = Proj::Pt2 (document->getWidth(), document->getHeight()/2, 1.0);
+ Proj::Pt2 proj_origin = Proj::Pt2 (document->getWidth()/2, document->getHeight()/3, 1.0);
if (dup) {
proj_vp_x = dup->tmat.column (Proj::X);
@@ -246,20 +247,18 @@ persp3d_create_xml_element (SPDocument *document, Persp3DImpl *dup) {// if dup i
SP_OBJECT_REPR(defs)->addChild(repr, NULL);
Inkscape::GC::release(repr);
- return (Persp3D *) sp_object_get_child_by_repr (SP_OBJECT(defs), repr);
+ return (Persp3D *) SP_OBJECT(defs)->get_child_by_repr (repr);
}
-Persp3D *
-persp3d_document_first_persp (SPDocument *document) {
- SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
- Inkscape::XML::Node *repr;
- for (SPObject *child = sp_object_first_child(defs); child != NULL; child = SP_OBJECT_NEXT(child) ) {
- repr = SP_OBJECT_REPR(child);
+Persp3D *persp3d_document_first_persp(SPDocument *document)
+{
+ Persp3D *first = 0;
+ for ( SPObject *child = SP_DOCUMENT_DEFS(document)->firstChild(); child && !first; child = child->getNext() ) {
if (SP_IS_PERSP3D(child)) {
- return SP_PERSP3D(child);
+ first = SP_PERSP3D(child);
}
}
- return NULL;
+ return first;
}
/**
@@ -341,8 +340,8 @@ persp3d_toggle_VP (Persp3D *persp, Proj::Axis axis, bool set_undo) {
persp3d_update_box_reprs (persp);
SP_OBJECT(persp)->updateRepr(SP_OBJECT_WRITE_EXT);
if (set_undo) {
- sp_document_done(sp_desktop_document(inkscape_active_desktop()), SP_VERB_CONTEXT_3DBOX,
- _("Toggle vanishing point"));
+ DocumentUndo::done(sp_desktop_document(inkscape_active_desktop()), SP_VERB_CONTEXT_3DBOX,
+ _("Toggle vanishing point"));
}
}
@@ -352,8 +351,8 @@ persp3d_toggle_VPs (std::list<Persp3D *> p, Proj::Axis axis) {
for (std::list<Persp3D *>::iterator i = p.begin(); i != p.end(); ++i) {
persp3d_toggle_VP((*i), axis, false);
}
- sp_document_done(sp_desktop_document(inkscape_active_desktop()), SP_VERB_CONTEXT_3DBOX,
- _("Toggle multiple vanishing points"));
+ DocumentUndo::done(sp_desktop_document(inkscape_active_desktop()), SP_VERB_CONTEXT_3DBOX,
+ _("Toggle multiple vanishing points"));
}
void
@@ -564,12 +563,9 @@ persp3d_print_debugging_info (Persp3D *persp) {
g_print ("========================\n");
}
-void
-persp3d_print_debugging_info_all(SPDocument *document) {
- SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
- Inkscape::XML::Node *repr;
- for (SPObject *child = sp_object_first_child(defs); child != NULL; child = SP_OBJECT_NEXT(child) ) {
- repr = SP_OBJECT_REPR(child);
+void persp3d_print_debugging_info_all(SPDocument *document)
+{
+ for ( SPObject *child = SP_DOCUMENT_DEFS(document)->firstChild(); child; child = child->getNext() ) {
if (SP_IS_PERSP3D(child)) {
persp3d_print_debugging_info(SP_PERSP3D(child));
}
diff --git a/src/pixmaps/cursor-attract.xpm b/src/pixmaps/cursor-attract.xpm
index 23e999304..56033b287 100644
--- a/src/pixmaps/cursor-attract.xpm
+++ b/src/pixmaps/cursor-attract.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_attract_xpm[] = {
-"32 32 6 1",
+"32 32 3 1",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/pixmaps/cursor-repel.xpm b/src/pixmaps/cursor-repel.xpm
index 3415ce490..d365cddc3 100644
--- a/src/pixmaps/cursor-repel.xpm
+++ b/src/pixmaps/cursor-repel.xpm
@@ -1,6 +1,6 @@
/* XPM */
static char const *cursor_repel_xpm[] = {
-"32 32 6 1",
+"32 32 3 1",
" c None",
". c #FFFFFF",
"+ c #000000",
diff --git a/src/print.cpp b/src/print.cpp
index ba29b17ad..e0601aa33 100644
--- a/src/print.cpp
+++ b/src/print.cpp
@@ -1,5 +1,3 @@
-#define __SP_PRINT_C__
-
/** \file
* Frontend to printing
*/
@@ -7,6 +5,8 @@
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
* Kees Cook <kees@outflux.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* This code is in public domain
*/
@@ -90,7 +90,7 @@ sp_print_preview_document(SPDocument *doc)
Inkscape::Extension::Print *mod;
unsigned int ret;
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_DEFAULT);
@@ -102,16 +102,16 @@ sp_print_preview_document(SPDocument *doc)
/* fixme: This has to go into module constructor somehow */
/* Create new arena */
- mod->base = SP_ITEM(sp_document_root(doc));
+ mod->base = SP_ITEM(doc->getRoot());
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);
+ mod->dkey = SPItem::display_key_new(1);
+ mod->root = (mod->base)->invoke_show(mod->arena, mod->dkey, SP_ITEM_SHOW_DISPLAY);
/* Print document */
ret = mod->begin(doc);
- sp_item_invoke_print(mod->base, &context);
+ (mod->base)->invoke_print(&context);
ret = mod->finish();
/* Release arena */
- sp_item_invoke_hide(mod->base, mod->dkey);
+ (mod->base)->invoke_hide(mod->dkey);
mod->base = NULL;
mod->root = NULL;
nr_object_unref((NRObject *) mod->arena);
@@ -124,14 +124,14 @@ sp_print_preview_document(SPDocument *doc)
void
sp_print_document(Gtk::Window& parentWindow, SPDocument *doc)
{
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
// Build arena
- SPItem *base = SP_ITEM(sp_document_root(doc));
+ SPItem *base = SP_ITEM(doc->getRoot());
NRArena *arena = NRArena::create();
- unsigned int dkey = sp_item_display_key_new(1);
+ unsigned int dkey = SPItem::display_key_new(1);
// TODO investigate why we are grabbing root and then ignoring it.
- NRArenaItem *root = sp_item_invoke_show(base, arena, dkey, SP_ITEM_SHOW_DISPLAY);
+ NRArenaItem *root = base->invoke_show(arena, dkey, SP_ITEM_SHOW_DISPLAY);
// Run print dialog
Inkscape::UI::Dialog::Print printop(doc,base);
@@ -139,7 +139,7 @@ sp_print_document(Gtk::Window& parentWindow, SPDocument *doc)
(void)res; // TODO handle this
// Release arena
- sp_item_invoke_hide(base, dkey);
+ base->invoke_hide(dkey);
nr_object_unref((NRObject *) arena);
}
@@ -152,7 +152,7 @@ sp_print_document_to_file(SPDocument *doc, gchar const *filename)
gchar *oldoutput;
unsigned int ret;
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
mod = Inkscape::Extension::get_print(SP_MODULE_KEY_PRINT_PS);
oldconst = mod->get_param_string("destination");
@@ -163,16 +163,16 @@ sp_print_document_to_file(SPDocument *doc, gchar const *filename)
context.module = mod;
/* fixme: This has to go into module constructor somehow */
/* Create new arena */
- mod->base = SP_ITEM(sp_document_root(doc));
+ mod->base = SP_ITEM(doc->getRoot());
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);
+ mod->dkey = SPItem::display_key_new(1);
+ mod->root = (mod->base)->invoke_show(mod->arena, mod->dkey, SP_ITEM_SHOW_DISPLAY);
/* Print document */
ret = mod->begin(doc);
- sp_item_invoke_print(mod->base, &context);
+ (mod->base)->invoke_print(&context);
ret = mod->finish();
/* Release arena */
- sp_item_invoke_hide(mod->base, mod->dkey);
+ (mod->base)->invoke_hide(mod->dkey);
mod->base = NULL;
mod->root = NULL;
nr_object_unref((NRObject *) mod->arena);
diff --git a/src/profile-manager.cpp b/src/profile-manager.cpp
index b70926947..27ab75497 100644
--- a/src/profile-manager.cpp
+++ b/src/profile-manager.cpp
@@ -2,6 +2,7 @@
* Inkscape::ProfileManager - a view of a document's color profiles.
*
* Copyright 2007 Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
@@ -18,7 +19,7 @@ ProfileManager::ProfileManager(SPDocument *document) :
_doc(document),
_knownProfiles()
{
- _resource_connection = sp_document_resources_changed_connect( _doc, "iccprofile", sigc::mem_fun(*this, &ProfileManager::_resourcesChanged) );
+ _resource_connection = _doc->connectResourcesChanged( "iccprofile", sigc::mem_fun(*this, &ProfileManager::_resourcesChanged) );
}
ProfileManager::~ProfileManager()
@@ -31,7 +32,7 @@ void ProfileManager::_resourcesChanged()
{
std::vector<SPObject*> newList;
if (_doc) {
- const GSList *current = sp_document_get_resource_list( _doc, "iccprofile" );
+ const GSList *current = _doc->getResourceList( "iccprofile" );
while ( current ) {
newList.push_back(SP_OBJECT(current->data));
current = g_slist_next(current);
diff --git a/src/rdf.cpp b/src/rdf.cpp
index 99b56a103..c9378cf53 100644
--- a/src/rdf.cpp
+++ b/src/rdf.cpp
@@ -6,6 +6,7 @@
/* Authors:
* Kees Cook <kees@outflux.net>
* Jon Phillips <jon@rejon.org>
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2004 Kees Cook <kees@outflux.net>
* Copyright (C) 2006 Jon Phillips <jon@rejon.org>
@@ -295,6 +296,50 @@ struct rdf_work_entity_t rdf_work_entities [] = {
}
};
+
+// Simple start of C++-ification:
+class RDFImpl
+{
+public:
+ /**
+ * Some implementations do not put RDF stuff inside <metadata>,
+ * so we need to check for it and add it if we don't see it.
+ */
+ static void ensureParentIsMetadata( SPDocument *doc, Inkscape::XML::Node *node );
+
+ static Inkscape::XML::Node const *getRdfRootRepr( SPDocument const * doc );
+ static Inkscape::XML::Node *ensureRdfRootRepr( SPDocument * doc );
+
+ static Inkscape::XML::Node const *getXmlRepr( SPDocument const * doc, gchar const * name );
+ static Inkscape::XML::Node *getXmlRepr( SPDocument * doc, gchar const * name );
+ static Inkscape::XML::Node *ensureXmlRepr( SPDocument * doc, gchar const * name );
+
+ static Inkscape::XML::Node const *getWorkRepr( SPDocument const * doc, gchar const * name );
+ static Inkscape::XML::Node *ensureWorkRepr( SPDocument * doc, gchar const * name );
+
+ static const gchar *getWorkEntity(SPDocument const * doc, struct rdf_work_entity_t & entity);
+ static unsigned int setWorkEntity(SPDocument * doc, struct rdf_work_entity_t & entity, gchar const * text);
+
+ static void setDefaults( SPDocument * doc );
+
+ /**
+ * \brief Pull the text out of an RDF entity, depends on how it's stored
+ * \return A pointer to the entity's static contents as a string
+ * \param repr The XML element to extract from
+ * \param entity The desired RDF/Work entity
+ *
+ */
+ static const gchar *getReprText( Inkscape::XML::Node const * repr, struct rdf_work_entity_t const & entity );
+
+ static unsigned int setReprText( Inkscape::XML::Node * repr,
+ struct rdf_work_entity_t const & entity,
+ gchar const * text );
+
+ static struct rdf_license_t *getLicense(SPDocument const * document);
+
+ static void setLicense(SPDocument * doc, struct rdf_license_t const * license);
+};
+
/**
* \brief Retrieves a known RDF/Work entity by name
* \return A pointer to an RDF/Work entity
@@ -431,23 +476,14 @@ rdf_string(struct rdf_t * rdf)
*/
-/**
- * \brief Pull the text out of an RDF entity, depends on how it's stored
- * \return A pointer to the entity's static contents as a string
- * \param repr The XML element to extract from
- * \param entity The desired RDF/Work entity
- *
- */
-const gchar *
-rdf_get_repr_text ( Inkscape::XML::Node * repr, struct rdf_work_entity_t * entity )
+const gchar *RDFImpl::getReprText( Inkscape::XML::Node const * repr, struct rdf_work_entity_t const & entity )
{
g_return_val_if_fail (repr != NULL, NULL);
- g_return_val_if_fail (entity != NULL, NULL);
static gchar * bag = NULL;
gchar * holder = NULL;
- Inkscape::XML::Node * temp=NULL;
- switch (entity->datatype) {
+ Inkscape::XML::Node const * temp = NULL;
+ switch (entity.datatype) {
case RDF_CONTENT:
temp = sp_repr_children(repr);
if ( temp == NULL ) return NULL;
@@ -510,13 +546,11 @@ rdf_get_repr_text ( Inkscape::XML::Node * repr, struct rdf_work_entity_t * entit
return NULL;
}
-unsigned int
-rdf_set_repr_text ( Inkscape::XML::Node * repr,
- struct rdf_work_entity_t * entity,
- gchar const * text )
+unsigned int RDFImpl::setReprText( Inkscape::XML::Node * repr,
+ struct rdf_work_entity_t const & entity,
+ gchar const * text )
{
g_return_val_if_fail ( repr != NULL, 0);
- g_return_val_if_fail ( entity != NULL, 0);
g_return_val_if_fail ( text != NULL, 0);
gchar * str = NULL;
gchar** strlist = NULL;
@@ -530,12 +564,12 @@ rdf_set_repr_text ( Inkscape::XML::Node * repr,
g_return_val_if_fail (xmldoc != NULL, FALSE);
// set document's title element to the RDF title
- if (!strcmp(entity->name, "title")) {
+ if (!strcmp(entity.name, "title")) {
SPDocument *doc = SP_ACTIVE_DOCUMENT;
if(doc && doc->root) doc->root->setTitle(text);
}
- switch (entity->datatype) {
+ switch (entity.datatype) {
case RDF_CONTENT:
temp = sp_repr_children(parent);
if ( temp == NULL ) {
@@ -643,187 +677,263 @@ rdf_set_repr_text ( Inkscape::XML::Node * repr,
return 0;
}
-Inkscape::XML::Node *
-rdf_get_rdf_root_repr ( SPDocument * doc, bool build )
+void RDFImpl::ensureParentIsMetadata( SPDocument *doc, Inkscape::XML::Node *node )
{
- g_return_val_if_fail (doc != NULL, NULL);
- g_return_val_if_fail (doc->rroot != NULL, NULL);
-
- Inkscape::XML::Document * xmldoc = sp_document_repr_doc(doc);
- g_return_val_if_fail (xmldoc != NULL, NULL);
-
- Inkscape::XML::Node * rdf = sp_repr_lookup_name ( doc->rroot, XML_TAG_NAME_RDF );
+ if ( !node ) {
+ g_critical("Null node passed to ensureParentIsMetadata().");
+ } else if ( !node->parent() ) {
+ g_critical( "No parent node when verifying <metadata> placement." );
+ } else {
+ Inkscape::XML::Node * currentParent = node->parent();
+ if ( strcmp( currentParent->name(), XML_TAG_NAME_METADATA ) != 0 ) {
+ Inkscape::XML::Node * metadata = doc->getReprDoc()->createElement( XML_TAG_NAME_METADATA );
+ if ( !metadata ) {
+ g_critical("Unable to create metadata element.");
+ } else {
+ // attach the metadata node
+ currentParent->appendChild( metadata );
+ Inkscape::GC::release( metadata );
+
+ // move the node into it
+ Inkscape::GC::anchor( node );
+ sp_repr_unparent( node );
+ metadata->appendChild( node );
+ Inkscape::GC::release( node );
+ }
+ }
+ }
+}
- if (rdf == NULL) {
- //printf("missing XML '%s'\n",XML_TAG_NAME_RDF);
- if (!build) return NULL;
+Inkscape::XML::Node const *RDFImpl::getRdfRootRepr( SPDocument const * doc )
+{
+ Inkscape::XML::Node const *rdf = 0;
+ if ( !doc ) {
+ g_critical("Null doc passed to getRdfRootRepr()");
+ } else if ( !doc->getReprDoc() ) {
+ g_critical("XML doc is null.");
+ } else {
+ rdf = sp_repr_lookup_name( doc->getReprDoc(), XML_TAG_NAME_RDF );
+ }
- Inkscape::XML::Node * svg = sp_repr_lookup_name ( doc->rroot, XML_TAG_NAME_SVG );
- g_return_val_if_fail ( svg != NULL, NULL );
+ return rdf;
+}
- Inkscape::XML::Node * parent = sp_repr_lookup_name ( svg, XML_TAG_NAME_METADATA );
- if ( parent == NULL ) {
- parent = xmldoc->createElement( XML_TAG_NAME_METADATA );
- g_return_val_if_fail ( parent != NULL, NULL);
+Inkscape::XML::Node *RDFImpl::ensureRdfRootRepr( SPDocument * doc )
+{
+ Inkscape::XML::Node *rdf = 0;
+ if ( !doc ) {
+ g_critical("Null doc passed to ensureRdfRootRepr()");
+ } else if ( !doc->getReprDoc() ) {
+ g_critical("XML doc is null.");
+ } else {
+ rdf = sp_repr_lookup_name( doc->getReprDoc(), XML_TAG_NAME_RDF );
+ if ( !rdf ) {
+ Inkscape::XML::Node * svg = sp_repr_lookup_name( doc->getReprRoot(), XML_TAG_NAME_SVG );
+ if ( !svg ) {
+ g_critical("Unable to locate svg element.");
+ } else {
+ Inkscape::XML::Node * parent = sp_repr_lookup_name( svg, XML_TAG_NAME_METADATA );
+ if ( parent == NULL ) {
+ parent = doc->getReprDoc()->createElement( XML_TAG_NAME_METADATA );
+ if ( !parent ) {
+ g_critical("Unable to create metadata element");
+ } else {
+ svg->appendChild(parent);
+ Inkscape::GC::release(parent);
+ }
+ }
- svg->appendChild(parent);
- Inkscape::GC::release(parent);
+ if ( parent && !parent->document() ) {
+ g_critical("Parent has no document");
+ } else if ( parent ) {
+ rdf = parent->document()->createElement( XML_TAG_NAME_RDF );
+ if ( !rdf ) {
+ g_critical("Unable to create root RDF element.");
+ } else {
+ parent->appendChild(rdf);
+ Inkscape::GC::release(rdf);
+ }
+ }
+ }
}
-
- Inkscape::XML::Document * xmldoc = parent->document();
- g_return_val_if_fail (xmldoc != NULL, FALSE);
-
- rdf = xmldoc->createElement( XML_TAG_NAME_RDF );
- g_return_val_if_fail (rdf != NULL, NULL);
-
- parent->appendChild(rdf);
- Inkscape::GC::release(rdf);
}
- /*
- * some implementations do not put RDF stuff inside <metadata>,
- * so we need to check for it and add it if we don't see it
- */
- Inkscape::XML::Node * want_metadata = sp_repr_parent ( rdf );
- g_return_val_if_fail (want_metadata != NULL, NULL);
- if (strcmp( want_metadata->name(), XML_TAG_NAME_METADATA )) {
- Inkscape::XML::Node * metadata = xmldoc->createElement( XML_TAG_NAME_METADATA );
- g_return_val_if_fail (metadata != NULL, NULL);
-
- /* attach the metadata node */
- want_metadata->appendChild(metadata);
- Inkscape::GC::release(metadata);
-
- /* move the RDF into it */
- Inkscape::GC::anchor(rdf);
- sp_repr_unparent ( rdf );
- metadata->appendChild(rdf);
- Inkscape::GC::release(rdf);
+ if ( rdf ) {
+ ensureParentIsMetadata( doc, rdf );
}
-
+
return rdf;
}
-Inkscape::XML::Node *
-rdf_get_xml_repr( SPDocument * doc, gchar const * name, bool build )
+Inkscape::XML::Node const *RDFImpl::getXmlRepr( SPDocument const * doc, gchar const * name )
{
- g_return_val_if_fail (name != NULL, NULL);
- g_return_val_if_fail (doc != NULL, NULL);
- g_return_val_if_fail (doc->rroot != NULL, NULL);
-
- Inkscape::XML::Node * rdf = rdf_get_rdf_root_repr ( doc, build );
- if (!rdf) return NULL;
-
- Inkscape::XML::Node * xml = sp_repr_lookup_name ( rdf, name );
- if (xml == NULL) {
- //printf("missing XML '%s'\n",name);
- if (!build) return NULL;
-
- Inkscape::XML::Document * xmldoc = sp_document_repr_doc(doc);
- g_return_val_if_fail (xmldoc != NULL, NULL);
+ Inkscape::XML::Node const * xml = 0;
+ if ( !doc ) {
+ g_critical("Null doc passed to getXmlRepr()");
+ } else if ( !doc->getReprDoc() ) {
+ g_critical("XML doc is null.");
+ } else if (!name) {
+ g_critical("Null name passed to getXmlRepr()");
+ } else {
+ Inkscape::XML::Node const * rdf = getRdfRootRepr( doc );
+ if ( rdf ) {
+ xml = sp_repr_lookup_name( rdf, name );
+ }
+ }
+ return xml;
+}
- xml = xmldoc->createElement( name );
- g_return_val_if_fail (xml != NULL, NULL);
+Inkscape::XML::Node *RDFImpl::getXmlRepr( SPDocument * doc, gchar const * name )
+{
+ Inkscape::XML::Node const *xml = getXmlRepr( const_cast<SPDocument const *>(doc), name );
- xml->setAttribute("rdf:about", "" );
+ return const_cast<Inkscape::XML::Node *>(xml);
+}
- rdf->appendChild(xml);
- Inkscape::GC::release(xml);
+Inkscape::XML::Node *RDFImpl::ensureXmlRepr( SPDocument * doc, gchar const * name )
+{
+ Inkscape::XML::Node * xml = 0;
+ if ( !doc ) {
+ g_critical("Null doc passed to ensureXmlRepr()");
+ } else if ( !doc->getReprDoc() ) {
+ g_critical("XML doc is null.");
+ } else if (!name) {
+ g_critical("Null name passed to ensureXmlRepr()");
+ } else {
+ Inkscape::XML::Node * rdf = ensureRdfRootRepr( doc );
+ if ( rdf ) {
+ xml = sp_repr_lookup_name( rdf, name );
+ if ( !xml ) {
+ xml = doc->getReprDoc()->createElement( name );
+ if ( !xml ) {
+ g_critical("Unable to create xml element <%s>.", name);
+ } else {
+ xml->setAttribute("rdf:about", "" );
+
+ rdf->appendChild(xml);
+ Inkscape::GC::release(xml);
+ }
+ }
+ }
}
-
return xml;
}
-Inkscape::XML::Node *
-rdf_get_work_repr( SPDocument * doc, gchar const * name, bool build )
+Inkscape::XML::Node const *RDFImpl::getWorkRepr( SPDocument const * doc, gchar const * name )
{
- g_return_val_if_fail (name != NULL, NULL);
- g_return_val_if_fail (doc != NULL, NULL);
- g_return_val_if_fail (doc->rroot != NULL, NULL);
+ Inkscape::XML::Node const * item = 0;
+ if ( !doc ) {
+ g_critical("Null doc passed to getWorkRepr()");
+ } else if ( !doc->getReprDoc() ) {
+ g_critical("XML doc is null.");
+ } else if (!name) {
+ g_critical("Null name passed to getWorkRepr()");
+ } else {
+ Inkscape::XML::Node const* work = getXmlRepr( doc, XML_TAG_NAME_WORK );
+ if ( work ) {
+ item = sp_repr_lookup_name( work, name, 1 );
+ }
+ }
+ return item;
+}
- Inkscape::XML::Node * work = rdf_get_xml_repr ( doc, XML_TAG_NAME_WORK, build );
- if (!work) return NULL;
+Inkscape::XML::Node *RDFImpl::ensureWorkRepr( SPDocument * doc, gchar const * name )
+{
+ Inkscape::XML::Node * item = 0;
+ if ( !doc ) {
+ g_critical("Null doc passed to ensureWorkRepr()");
+ } else if ( !doc->getReprDoc() ) {
+ g_critical("XML doc is null.");
+ } else if (!name) {
+ g_critical("Null name passed to ensureWorkRepr()");
+ } else {
+ Inkscape::XML::Node * work = ensureXmlRepr( doc, XML_TAG_NAME_WORK );
+ if ( work ) {
+ item = sp_repr_lookup_name( work, name, 1 );
+ if ( !item ) {
+ //printf("missing XML '%s'\n",name);
+ item = doc->getReprDoc()->createElement( name );
+ if ( !item ) {
+ g_critical("Unable to create xml element <%s>", name);
+ } else {
+ work->appendChild(item);
+ Inkscape::GC::release(item);
+ }
+ }
+ }
+ }
+ return item;
+}
- Inkscape::XML::Node * item = sp_repr_lookup_name ( work, name, 1 );
- if (item == NULL) {
- //printf("missing XML '%s'\n",name);
- if (!build) return NULL;
- Inkscape::XML::Document * xmldoc = sp_document_repr_doc(doc);
- g_return_val_if_fail (xmldoc != NULL, NULL);
+// Public API:
+const gchar *rdf_get_work_entity(SPDocument const * doc, struct rdf_work_entity_t * entity)
+{
+ const gchar *result = 0;
+ if ( !doc ) {
+ g_critical("Null doc passed to rdf_get_work_entity()");
+ } else if ( entity ) {
+ //g_message("want '%s'\n",entity->title);
- item = xmldoc->createElement( name );
- g_return_val_if_fail (item != NULL, NULL);
+ result = RDFImpl::getWorkEntity( doc, *entity );
- work->appendChild(item);
- Inkscape::GC::release(item);
+ //g_message("found '%s' == '%s'\n", entity->title, result );
}
-
- return item;
+ return result;
}
-
-
-/**
- * \brief Retrieves a known RDF/Work entity's contents from the document XML by name
- * \return A pointer to the entity's static contents as a string, or NULL if no entity exists
- * \param entity The desired RDF/Work entity
- *
- */
-const gchar *
-rdf_get_work_entity(SPDocument * doc, struct rdf_work_entity_t * entity)
+const gchar *RDFImpl::getWorkEntity(SPDocument const * doc, struct rdf_work_entity_t & entity)
{
- g_return_val_if_fail (doc != NULL, NULL);
- if ( entity == NULL ) return NULL;
- //printf("want '%s'\n",entity->title);
- bool bIsTitle = !strcmp(entity->name, "title");
+ gchar const *result = 0;
- Inkscape::XML::Node * item;
- if ( entity->datatype == RDF_XML ) {
- item = rdf_get_xml_repr ( doc, entity->tag, FALSE );
- }
- else {
- item = rdf_get_work_repr( doc, entity->tag, bIsTitle ); // build title if necessary
+ Inkscape::XML::Node const * item = getWorkRepr( doc, entity.tag );
+ if ( item ) {
+ result = getReprText( item, entity );
+ // TODO note that this is the location that used to set the title if needed. Ensure code it not required.
}
- if ( item == NULL ) return NULL;
- const gchar * result = rdf_get_repr_text ( item, entity );
- if(!result && bIsTitle && doc->root) { // if RDF title not set
- result = doc->root->title(); // get the document's <title>
- rdf_set_work_entity(doc, entity, result); // and set the RDF
+
+ return result;
+}
+
+// Public API:
+unsigned int rdf_set_work_entity(SPDocument * doc, struct rdf_work_entity_t * entity,
+ const gchar * text)
+{
+ unsigned int result = 0;
+ if ( !doc ) {
+ g_critical("Null doc passed to rdf_set_work_entity()");
+ } else if ( entity ) {
+ result = RDFImpl::setWorkEntity( doc, *entity, text );
}
- //printf("found '%s' == '%s'\n", entity->title, result );
+
return result;
}
-/**
- * \brief Stores a string into a named RDF/Work entity in the document XML
- * \param entity The desired RDF/Work entity to replace
- * \param string The string to replace the entity contents with
- *
- */
-unsigned int
-rdf_set_work_entity(SPDocument * doc, struct rdf_work_entity_t * entity,
- const gchar * text)
+unsigned int RDFImpl::setWorkEntity(SPDocument * doc, struct rdf_work_entity_t & entity, const gchar * text)
{
- g_return_val_if_fail ( entity != NULL, 0 );
- if (text == NULL) {
+ int result = 0;
+ if ( !text ) {
// FIXME: on a "NULL" text, delete the entity. For now, blank it.
- text="";
+ text = "";
}
/*
- printf("changing '%s' (%s) to '%s'\n",
- entity->title,
- entity->tag,
- text);
+ printf("changing '%s' (%s) to '%s'\n",
+ entity->title,
+ entity->tag,
+ text);
*/
- Inkscape::XML::Node * item = rdf_get_work_repr( doc, entity->tag, TRUE );
- g_return_val_if_fail ( item != NULL, 0 );
-
- return rdf_set_repr_text ( item, entity, text );
+ Inkscape::XML::Node * item = ensureWorkRepr( doc, entity.tag );
+ if ( !item ) {
+ g_critical("Unable to get work element");
+ } else {
+ result = setReprText( item, entity, text );
+ }
+ return result;
}
+
#undef DEBUG_MATCH
static bool
@@ -912,19 +1022,20 @@ rdf_match_license(Inkscape::XML::Node const *repr, struct rdf_license_t const *l
return result;
}
-/**
- * \brief Attempts to match and retrieve a known RDF/License from the document XML
- * \return A pointer to the static RDF license structure
- *
- */
-struct rdf_license_t *
-rdf_get_license(SPDocument * document)
+// Public API:
+struct rdf_license_t *rdf_get_license(SPDocument const * document)
{
- Inkscape::XML::Node const *repr = rdf_get_xml_repr ( document, XML_TAG_NAME_LICENSE, FALSE );
+ return RDFImpl::getLicense(document);
+}
+
+struct rdf_license_t *RDFImpl::getLicense(SPDocument const *document)
+{
+ Inkscape::XML::Node const *repr = getXmlRepr( document, XML_TAG_NAME_LICENSE );
if (repr) {
- for (struct rdf_license_t * license = rdf_licenses;
- license->name; license++ ) {
- if ( rdf_match_license ( repr, license ) ) return license;
+ for ( struct rdf_license_t * license = rdf_licenses; license->name; license++ ) {
+ if ( rdf_match_license( repr, license ) ) {
+ return license;
+ }
}
}
#ifdef DEBUG_MATCH
@@ -935,38 +1046,39 @@ rdf_get_license(SPDocument * document)
return NULL;
}
-/**
- * \brief Stores an RDF/License XML in the document XML
- * \param document Which document to update
- * \param license The desired RDF/License structure to store; NULL drops old license, so can be used for proprietary license.
- *
- */
-void
-rdf_set_license(SPDocument * doc, struct rdf_license_t const * license)
+// Public API:
+void rdf_set_license(SPDocument * doc, struct rdf_license_t const * license)
{
- // drop old license section
- Inkscape::XML::Node * repr = rdf_get_xml_repr ( doc, XML_TAG_NAME_LICENSE, FALSE );
- if (repr) sp_repr_unparent(repr);
-
- if (!license) return;
+ RDFImpl::setLicense( doc, license );
+}
- // build new license section
- repr = rdf_get_xml_repr ( doc, XML_TAG_NAME_LICENSE, TRUE );
- g_assert ( repr );
+void RDFImpl::setLicense(SPDocument * doc, struct rdf_license_t const * license)
+{
+ // drop old license section
+ Inkscape::XML::Node * repr = getXmlRepr( doc, XML_TAG_NAME_LICENSE );
+ if (repr) {
+ sp_repr_unparent(repr);
+ }
- repr->setAttribute("rdf:about", license->uri );
+ if ( !license ) {
+ // All done
+ } else if ( !doc->getReprDoc() ) {
+ g_critical("XML doc is null.");
+ } else {
+ // build new license section
+ repr = ensureXmlRepr( doc, XML_TAG_NAME_LICENSE );
+ g_assert( repr );
- Inkscape::XML::Document * xmldoc = sp_document_repr_doc(doc);
- g_return_if_fail (xmldoc != NULL);
+ repr->setAttribute("rdf:about", license->uri );
- for (struct rdf_double_t const * detail = license->details;
- detail->name; detail++) {
- Inkscape::XML::Node * child = xmldoc->createElement( detail->name );
- g_assert ( child != NULL );
+ for (struct rdf_double_t const * detail = license->details; detail->name; detail++) {
+ Inkscape::XML::Node * child = doc->getReprDoc()->createElement( detail->name );
+ g_assert ( child != NULL );
- child->setAttribute("rdf:resource", detail->resource );
- repr->appendChild(child);
- Inkscape::GC::release(child);
+ child->setAttribute("rdf:resource", detail->resource );
+ repr->appendChild(child);
+ Inkscape::GC::release(child);
+ }
}
}
@@ -980,37 +1092,46 @@ struct rdf_entity_default_t rdf_defaults[] = {
{ NULL, NULL, }
};
-void
-rdf_set_defaults ( SPDocument * doc )
+// Public API:
+void rdf_set_defaults( SPDocument * doc )
+{
+ RDFImpl::setDefaults( doc );
+
+}
+
+void RDFImpl::setDefaults( SPDocument * doc )
{
- g_assert ( doc != NULL );
+ g_assert( doc != NULL );
// Create metadata node if it doesn't already exist
- if (!sp_item_group_get_child_by_name ((SPGroup *) doc->root, NULL,
+ if (!sp_item_group_get_child_by_name((SPGroup *) doc->root, NULL,
XML_TAG_NAME_METADATA)) {
- // create repr
- Inkscape::XML::Document * xmldoc = sp_document_repr_doc(doc);
- g_return_if_fail (xmldoc != NULL);
- Inkscape::XML::Node * rnew = xmldoc->createElement (XML_TAG_NAME_METADATA);
- // insert into the document
- doc->rroot->addChild(rnew, NULL);
- // clean up
- Inkscape::GC::release(rnew);
- }
-
- /* install defaults */
- for ( struct rdf_entity_default_t * rdf_default = rdf_defaults;
- rdf_default->name;
- rdf_default++) {
- struct rdf_work_entity_t * entity = rdf_find_entity ( rdf_default->name );
- g_assert ( entity != NULL );
-
- if ( rdf_get_work_entity ( doc, entity ) == NULL ) {
- rdf_set_work_entity ( doc, entity, rdf_default->text );
+ if ( !doc->getReprDoc()) {
+ g_critical("XML doc is null.");
+ } else {
+ // create repr
+ Inkscape::XML::Node * rnew = doc->getReprDoc()->createElement(XML_TAG_NAME_METADATA);
+
+ // insert into the document
+ doc->getReprRoot()->addChild(rnew, NULL);
+
+ // clean up
+ Inkscape::GC::release(rnew);
+ }
+ }
+
+ // install defaults
+ for ( struct rdf_entity_default_t * rdf_default = rdf_defaults; rdf_default->name; rdf_default++) {
+ struct rdf_work_entity_t * entity = rdf_find_entity( rdf_default->name );
+ g_assert( entity != NULL );
+
+ if ( getWorkEntity( doc, *entity ) == NULL ) {
+ setWorkEntity( doc, *entity, rdf_default->text );
}
}
}
+
/*
Local Variables:
mode:c++
diff --git a/src/rdf.h b/src/rdf.h
index e7a1f946f..bed01aed0 100644
--- a/src/rdf.h
+++ b/src/rdf.h
@@ -3,12 +3,13 @@
*/
/* Authors:
* Kees Cook <kees@outflux.net>
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2004 Authors
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#ifndef _RDF_H_
-#define _RDF_H_
+#ifndef SEEN_RDF_H
+#define SEEN_RDF_H
#include <glib.h>
#include <glibmm/i18n.h>
@@ -94,19 +95,44 @@ struct rdf_t {
struct rdf_work_entity_t * rdf_find_entity(gchar const * name);
-const gchar * rdf_get_work_entity(SPDocument * doc,
+/**
+ * \brief Retrieves a known RDF/Work entity's contents from the document XML by name
+ * \return A pointer to the entity's static contents as a string, or NULL if no entity exists
+ * \param entity The desired RDF/Work entity
+ *
+ */
+const gchar * rdf_get_work_entity(SPDocument const * doc,
struct rdf_work_entity_t * entity);
+
+/**
+ * \brief Stores a string into a named RDF/Work entity in the document XML
+ * \param entity The desired RDF/Work entity to replace
+ * \param string The string to replace the entity contents with
+ *
+ */
unsigned int rdf_set_work_entity(SPDocument * doc,
struct rdf_work_entity_t * entity,
const gchar * text);
-struct rdf_license_t * rdf_get_license(SPDocument * doc);
+/**
+ * \brief Attempts to match and retrieve a known RDF/License from the document XML
+ * \return A pointer to the static RDF license structure
+ *
+ */
+struct rdf_license_t * rdf_get_license(SPDocument const * doc);
+
+/**
+ * \brief Stores an RDF/License XML in the document XML
+ * \param document Which document to update
+ * \param license The desired RDF/License structure to store; NULL drops old license, so can be used for proprietary license.
+ *
+ */
void rdf_set_license(SPDocument * doc,
struct rdf_license_t const * license);
void rdf_set_defaults ( SPDocument * doc );
-#endif // _RDF_H_
+#endif // SEEN_RDF_H
/*
Local Variables:
diff --git a/src/rect-context.cpp b/src/rect-context.cpp
index 86f0b54a3..bcb1bf734 100644
--- a/src/rect-context.cpp
+++ b/src/rect-context.cpp
@@ -1,11 +1,11 @@
-#define __SP_RECT_CONTEXT_C__
-
/*
* Rectangle drawing context
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
* Copyright (C) 2000-2005 authors
@@ -43,6 +43,8 @@
#include "context-fns.h"
#include "shape-editor.h"
+using Inkscape::DocumentUndo;
+
//static const double goldenratio = 1.61803398874989484820; // golden ratio
static void sp_rect_context_class_init(SPRectContextClass *klass);
@@ -466,16 +468,16 @@ static void sp_rect_drag(SPRectContext &rc, Geom::Point const pt, guint state)
return;
}
- /* Create object */
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_EVENT_CONTEXT_DOCUMENT(&rc));
+ // Create object
+ Inkscape::XML::Document *xml_doc = SP_EVENT_CONTEXT_DOCUMENT(&rc)->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:rect");
- /* Set style */
+ // Set style
sp_desktop_apply_style_tool (desktop, repr, "/tools/shapes/rect", false);
rc.item = (SPItem *) desktop->currentLayer()->appendChildRepr(repr);
Inkscape::GC::release(repr);
- rc.item->transform = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
+ rc.item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
rc.item->updateRepr();
sp_canvas_force_full_redraw_after_interruptions(desktop->canvas, 5);
@@ -549,8 +551,8 @@ static void sp_rect_finish(SPRectContext *rc)
sp_canvas_end_forced_full_redraws(desktop->canvas);
sp_desktop_selection(desktop)->set(rc->item);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_RECT,
- _("Create rectangle"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_RECT,
+ _("Create rectangle"));
rc->item = NULL;
}
@@ -575,7 +577,7 @@ static void sp_rect_cancel(SPRectContext *rc)
sp_canvas_end_forced_full_redraws(desktop->canvas);
- sp_document_cancel(sp_desktop_document(desktop));
+ DocumentUndo::cancel(sp_desktop_document(desktop));
}
diff --git a/src/removeoverlap.cpp b/src/removeoverlap.cpp
index 975b4becb..b01ae5228 100644
--- a/src/removeoverlap.cpp
+++ b/src/removeoverlap.cpp
@@ -4,6 +4,7 @@
/*
* Authors:
* Tim Dwyer <tgdwyer@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2005 Authors
*
@@ -48,7 +49,7 @@ void removeoverlap(GSList const *const items, double const xGap, double const yG
++it)
{
using Geom::X; using Geom::Y;
- Geom::OptRect item_box(sp_item_bbox_desktop(*it));
+ Geom::OptRect item_box((*it)->getBboxDesktop());
if (item_box) {
Geom::Point min(item_box->min() - .5*gap);
Geom::Point max(item_box->max() + .5*gap);
diff --git a/src/satisfied-guide-cns.cpp b/src/satisfied-guide-cns.cpp
index 0a47a5852..6d8c4d048 100644
--- a/src/satisfied-guide-cns.cpp
+++ b/src/satisfied-guide-cns.cpp
@@ -13,7 +13,7 @@ void satisfied_guide_cns(SPDesktop const &desktop,
for (GSList const *l = nv.guides; l != NULL; l = l->next) {
SPGuide &g = *SP_GUIDE(l->data);
for (unsigned int i = 0; i < snappoints.size(); ++i) {
- if (approx_equal( sp_guide_distance_from_pt(&g, snappoints[i].getPoint()), 0) ) {
+ if (approx_equal( g.getDistanceFrom(snappoints[i].getPoint()), 0) ) {
cns.push_back(SPGuideConstraint(&g, i));
}
}
diff --git a/src/selcue.cpp b/src/selcue.cpp
index 8756524dd..171178c41 100644
--- a/src/selcue.cpp
+++ b/src/selcue.cpp
@@ -1,11 +1,10 @@
-#define __SELCUE_C__
-
/*
* Helper object for showing selected items
*
* Authors:
* bulia byak <bulia@users.sf.net>
* Carl Hetherington <inkscape@carlh.net>
+ * Abhishek Sharma
*
* Copyright (C) 2004 Authors
*
@@ -84,7 +83,7 @@ void Inkscape::SelCue::_updateItemBboxes()
SPCanvasItem* box = _item_bboxes[bcount ++];
if (box) {
- Geom::OptRect const b = sp_item_bbox_desktop(item, bbox_type);
+ Geom::OptRect const b = item->getBboxDesktop(bbox_type);
if (b) {
sp_canvas_item_show(box);
@@ -125,7 +124,7 @@ void Inkscape::SelCue::_newItemBboxes()
for (GSList const *l = _selection->itemList(); l != NULL; l = l->next) {
SPItem *item = (SPItem *) l->data;
- Geom::OptRect const b = sp_item_bbox_desktop(item, bbox_type);
+ Geom::OptRect const b = item->getBboxDesktop(bbox_type);
SPCanvasItem* box = NULL;
@@ -192,7 +191,7 @@ void Inkscape::SelCue::_newTextBaselines()
NULL);
sp_canvas_item_show(baseline_point);
- SP_CTRL(baseline_point)->moveto((*pt) * sp_item_i2d_affine(item));
+ SP_CTRL(baseline_point)->moveto((*pt) * item->i2d_affine());
sp_canvas_item_move_to_z(baseline_point, 0);
}
}
diff --git a/src/select-context.cpp b/src/select-context.cpp
index 028c8634b..febcc282d 100644
--- a/src/select-context.cpp
+++ b/src/select-context.cpp
@@ -1,11 +1,10 @@
-#define __SP_SELECT_CONTEXT_C__
-
/*
* Selection and transformation context
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
* Copyright (C) 1999-2005 Authors
@@ -42,6 +41,8 @@
#include "seltrans.h"
#include "box3d.h"
+using Inkscape::DocumentUndo;
+
static void sp_select_context_class_init(SPSelectContextClass *klass);
static void sp_select_context_init(SPSelectContext *select_context);
static void sp_select_context_dispose(GObject *object);
@@ -222,7 +223,7 @@ sp_select_context_abort(SPEventContext *event_context)
if (sc->item) {
// only undo if the item is still valid
if (SP_OBJECT_DOCUMENT( SP_OBJECT(sc->item))) {
- sp_document_undo(sp_desktop_document(desktop));
+ DocumentUndo::undo(sp_desktop_document(desktop));
}
sp_object_unref( SP_OBJECT(sc->item), NULL);
@@ -230,7 +231,7 @@ sp_select_context_abort(SPEventContext *event_context)
// NOTE: This is a workaround to a bug.
// When the ctrl key is held, sc->item is not defined
// so in this case (only), we skip the object doc check
- sp_document_undo(sp_desktop_document(desktop));
+ DocumentUndo::undo(sp_desktop_document(desktop));
}
sc->item = NULL;
@@ -510,14 +511,14 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
// and also when we started within tolerance, but trespassed tolerance outside of item
Inkscape::Rubberband::get(desktop)->stop();
SP_EVENT_CONTEXT(sc)->defaultMessageContext()->clear();
- item_at_point = desktop->item_at_point(Geom::Point(event->button.x, event->button.y), FALSE);
+ item_at_point = desktop->getItemAtPoint(Geom::Point(event->button.x, event->button.y), FALSE);
if (!item_at_point) // if no item at this point, try at the click point (bug 1012200)
- item_at_point = desktop->item_at_point(Geom::Point(xp, yp), FALSE);
+ item_at_point = desktop->getItemAtPoint(Geom::Point(xp, yp), FALSE);
if (item_at_point || sc->moved || sc->button_press_alt) {
// drag only if starting from an item, or if something is already grabbed, or if alt-dragging
if (!sc->moved) {
- item_in_group = desktop->item_at_point(Geom::Point(event->button.x, event->button.y), TRUE);
- group_at_point = desktop->group_at_point(Geom::Point(event->button.x, event->button.y));
+ item_in_group = desktop->getItemAtPoint(Geom::Point(event->button.x, event->button.y), TRUE);
+ group_at_point = desktop->getGroupAtPoint(Geom::Point(event->button.x, event->button.y));
if (SP_IS_LAYER(selection->single()))
group_at_point = SP_GROUP(selection->single());
@@ -614,9 +615,9 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
GSList *items = NULL;
if (r->getMode() == RUBBERBAND_MODE_RECT) {
Geom::OptRect const b = r->getRectangle();
- items = sp_document_items_in_box(sp_desktop_document(desktop), desktop->dkey, *b);
+ items = sp_desktop_document(desktop)->getItemsInBox(desktop->dkey, *b);
} else if (r->getMode() == RUBBERBAND_MODE_TOUCHPATH) {
- items = sp_document_items_at_points(sp_desktop_document(desktop), desktop->dkey, r->getPoints());
+ items = sp_desktop_document(desktop)->getItemsAtPoints(desktop->dkey, r->getPoints());
}
seltrans->resetState();
diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp
index ff1b3baa1..91c902a46 100644
--- a/src/selection-chemistry.cpp
+++ b/src/selection-chemistry.cpp
@@ -9,6 +9,7 @@
* Andrius R. <knutux@gmail.com>
* Jon A. Cruz <jon@joncruz.org>
* Martin Sucha <martin.sucha-inkscape@jts-sro.sk>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2010 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -101,6 +102,7 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS;
#include "ui/clipboard.h"
+using Inkscape::DocumentUndo;
using Geom::X;
using Geom::Y;
@@ -237,7 +239,7 @@ void sp_selection_copy_impl(GSList const *items, GSList **clip, Inkscape::XML::D
// Copy item reprs:
for (GSList *i = (GSList *) sorted_items; i != NULL; i = i->next) {
- sp_selection_copy_one(SP_OBJECT_REPR(i->data), sp_item_i2doc_affine(SP_ITEM(i->data)), clip, xml_doc);
+ sp_selection_copy_one(SP_OBJECT_REPR(i->data), SP_ITEM(i->data)->i2doc_affine(), clip, xml_doc);
}
*clip = g_slist_reverse(*clip);
@@ -246,7 +248,7 @@ void sp_selection_copy_impl(GSList const *items, GSList **clip, Inkscape::XML::D
GSList *sp_selection_paste_impl(SPDocument *doc, SPObject *parent, GSList **clip)
{
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
GSList *copied = NULL;
// add objects to document
@@ -255,7 +257,7 @@ GSList *sp_selection_paste_impl(SPDocument *doc, SPObject *parent, GSList **clip
Inkscape::XML::Node *copy = repr->duplicate(xml_doc);
// premultiply the item transform by the accumulated parent transform in the paste layer
- Geom::Matrix local(sp_item_i2doc_affine(SP_ITEM(parent)));
+ Geom::Matrix local(SP_ITEM(parent)->i2doc_affine());
if (!local.isIdentity()) {
gchar const *t_str = copy->attribute("transform");
Geom::Matrix item_t(Geom::identity());
@@ -296,8 +298,8 @@ void sp_selection_delete(SPDesktop *desktop)
if (tools_isactive(desktop, TOOLS_TEXT))
if (sp_text_delete_selection(desktop->event_context)) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("Delete text"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("Delete text"));
return;
}
@@ -322,31 +324,31 @@ void sp_selection_delete(SPDesktop *desktop)
*/
tools_switch( desktop, tools_active( desktop ) );
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_DELETE,
- _("Delete"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_DELETE,
+ _("Delete"));
}
void add_ids_recursive(std::vector<const gchar *> &ids, SPObject *obj)
{
- if (!obj)
- return;
-
- ids.push_back(obj->getId());
+ if (obj) {
+ ids.push_back(obj->getId());
- if (SP_IS_GROUP(obj)) {
- for (SPObject *child = sp_object_first_child(obj) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
- add_ids_recursive(ids, child);
+ if (SP_IS_GROUP(obj)) {
+ for (SPObject *child = obj->firstChild() ; child; child = child->getNext() ) {
+ add_ids_recursive(ids, child);
+ }
}
}
}
void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone)
{
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
SPDocument *doc = desktop->doc();
- Inkscape::XML::Document* xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document* xml_doc = doc->getReprDoc();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
// check if something is selected
@@ -403,7 +405,7 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone)
for (unsigned int j = 0; j < old_ids.size(); j++) {
if (!strcmp(orig->getId(), old_ids[j])) {
// we have both orig and clone in selection, relink
- // std::cout << id << " old, its ori: " << SP_OBJECT_ID(orig) << "; will relink:" << new_ids[i] << " to " << new_ids[j] << "\n";
+ // std::cout << id << " old, its ori: " << orig->getId() << "; will relink:" << new_ids[i] << " to " << new_ids[j] << "\n";
gchar *newref = g_strdup_printf("#%s", new_ids[j]);
SPObject *new_clone = doc->getObjectById(new_ids[i]);
SP_OBJECT_REPR(new_clone)->setAttribute("xlink:href", newref);
@@ -411,14 +413,23 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone)
g_free(newref);
}
}
+ } else if (SP_IS_OFFSET(old_clone)) {
+ for (guint j = 0; j < old_ids.size(); j++) {
+ gchar *source_href = SP_OFFSET(old_clone)->sourceHref;
+ if (source_href && source_href[0]=='#' && !strcmp(source_href+1, old_ids[j])) {
+ gchar *newref = g_strdup_printf("#%s", new_ids[j]);
+ doc->getObjectById(new_ids[i])->getRepr()->setAttribute("xlink:href", newref);
+ g_free(newref);
+ }
+ }
}
}
}
if ( !suppressDone ) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_DUPLICATE,
- _("Duplicate"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_DUPLICATE,
+ _("Duplicate"));
}
selection->setReprList(newsel);
@@ -442,14 +453,13 @@ void sp_edit_clear_all(SPDesktop *dt)
items = g_slist_remove(items, items->data);
}
- sp_document_done(doc, SP_VERB_EDIT_CLEAR_ALL,
- _("Delete all"));
+ DocumentUndo::done(doc, SP_VERB_EDIT_CLEAR_ALL,
+ _("Delete all"));
}
-GSList *
-get_all_items(GSList *list, SPObject *from, SPDesktop *desktop, bool onlyvisible, bool onlysensitive, GSList const *exclude)
+GSList *get_all_items(GSList *list, SPObject *from, SPDesktop *desktop, bool onlyvisible, bool onlysensitive, GSList const *exclude)
{
- for (SPObject *child = sp_object_first_child(from) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = from->firstChild() ; child; child = child->getNext() ) {
if (SP_IS_ITEM(child) &&
!desktop->isLayer(SP_ITEM(child)) &&
(!onlysensitive || !SP_ITEM(child)->isLocked()) &&
@@ -580,7 +590,7 @@ void sp_selection_group_impl(GSList *p, Inkscape::XML::Node *group, Inkscape::XM
Geom::Matrix item_t(Geom::identity());
if (t_str)
sp_svg_transform_read(t_str, &item_t);
- item_t *= sp_item_i2doc_affine(SP_ITEM(doc->getObjectByRepr(current->parent())));
+ item_t *= SP_ITEM(doc->getObjectByRepr(current->parent()))->i2doc_affine();
// FIXME: when moving both clone and original from a transformed group (either by
// grouping into another parent, or by cut/paste) the transform from the original's
// parent becomes embedded into original itself, and this affects its clones. Fix
@@ -619,11 +629,12 @@ void sp_selection_group_impl(GSList *p, Inkscape::XML::Node *group, Inkscape::XM
void sp_selection_group(SPDesktop *desktop)
{
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
SPDocument *doc = sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -643,8 +654,8 @@ void sp_selection_group(SPDesktop *desktop)
sp_selection_group_impl(p, group, xml_doc, doc);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_GROUP,
- _("Group"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_GROUP,
+ _("Group"));
selection->set(group);
Inkscape::GC::release(group);
@@ -704,8 +715,8 @@ void sp_selection_ungroup(SPDesktop *desktop)
g_slist_free(items);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_UNGROUP,
- _("Ungroup"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_UNGROUP,
+ _("Ungroup"));
}
/** Replace all groups in the list with their member objects, recursively; returns a new list, frees old */
@@ -766,23 +777,19 @@ enclose_items(GSList const *items)
Geom::OptRect r;
for (GSList const *i = items; i; i = i->next) {
- r = Geom::unify(r, sp_item_bbox_desktop((SPItem *) i->data));
+ r = Geom::unify(r, ((SPItem *) i->data)->getBboxDesktop());
}
return r;
}
-SPObject *
-prev_sibling(SPObject *child)
+// TODO determine if this is intentionally different from SPObject::getPrev()
+SPObject *prev_sibling(SPObject *child)
{
- SPObject *parent = SP_OBJECT_PARENT(child);
- if (!SP_IS_GROUP(parent)) {
- return NULL;
+ SPObject *prev = 0;
+ if ( child && SP_IS_GROUP(child->parent) ) {
+ prev = child->getPrev();
}
- for ( SPObject *i = sp_object_first_child(parent) ; i; i = SP_OBJECT_NEXT(i) ) {
- if (i->next == child)
- return i;
- }
- return NULL;
+ return prev;
}
void
@@ -822,7 +829,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)) {
- Geom::OptRect newref_bbox = sp_item_bbox_desktop(SP_ITEM(newref));
+ Geom::OptRect newref_bbox = SP_ITEM(newref)->getBboxDesktop();
if ( newref_bbox && selected->intersects(*newref_bbox) ) {
// AND if it's not one of our selected objects,
if (!g_slist_find((GSList *) items, newref)) {
@@ -839,9 +846,9 @@ sp_selection_raise(SPDesktop *desktop)
g_slist_free(rev);
}
- sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_RAISE,
- //TRANSLATORS: "Raise" means "to raise an object" in the undo history
- C_("Undo action", "Raise"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_RAISE,
+ //TRANSLATORS: "Raise" means "to raise an object" in the undo history
+ C_("Undo action", "Raise"));
}
void sp_selection_raise_to_top(SPDesktop *desktop)
@@ -875,8 +882,8 @@ void sp_selection_raise_to_top(SPDesktop *desktop)
g_slist_free(rl);
- sp_document_done(document, SP_VERB_SELECTION_TO_FRONT,
- _("Raise to top"));
+ DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT,
+ _("Raise to top"));
}
void
@@ -917,7 +924,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)) {
- Geom::OptRect ref_bbox = sp_item_bbox_desktop(SP_ITEM(newref));
+ Geom::OptRect ref_bbox = SP_ITEM(newref)->getBboxDesktop();
if ( ref_bbox && selected->intersects(*ref_bbox) ) {
// AND if it's not one of our selected objects,
if (!g_slist_find((GSList *) items, newref)) {
@@ -938,8 +945,8 @@ sp_selection_lower(SPDesktop *desktop)
g_slist_free(rev);
}
- sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_LOWER,
- _("Lower"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_LOWER,
+ _("Lower"));
}
void sp_selection_lower_to_bottom(SPDesktop *desktop)
@@ -975,7 +982,7 @@ void sp_selection_lower_to_bottom(SPDesktop *desktop)
pp = document->getObjectByRepr(sp_repr_parent(repr));
minpos = 0;
g_assert(SP_IS_GROUP(pp));
- pc = sp_object_first_child(pp);
+ pc = pp->firstChild();
while (!SP_IS_ITEM(pc)) {
minpos += 1;
pc = pc->next;
@@ -985,22 +992,24 @@ void sp_selection_lower_to_bottom(SPDesktop *desktop)
g_slist_free(rl);
- sp_document_done(document, SP_VERB_SELECTION_TO_BACK,
- _("Lower to bottom"));
+ DocumentUndo::done(document, SP_VERB_SELECTION_TO_BACK,
+ _("Lower to bottom"));
}
void
sp_undo(SPDesktop *desktop, SPDocument *)
{
- if (!sp_document_undo(sp_desktop_document(desktop)))
- desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Nothing to undo."));
+ if (!DocumentUndo::undo(sp_desktop_document(desktop))) {
+ desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Nothing to undo."));
+ }
}
void
sp_redo(SPDesktop *desktop, SPDocument *)
{
- if (!sp_document_redo(sp_desktop_document(desktop)))
- desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Nothing to redo."));
+ if (!DocumentUndo::redo(sp_desktop_document(desktop))) {
+ desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Nothing to redo."));
+ }
}
void sp_selection_cut(SPDesktop *desktop)
@@ -1024,7 +1033,7 @@ take_style_from_item(SPItem *item)
(SP_IS_TEXT(item) && item->children && item->children->next == NULL)) {
// if this is a text with exactly one tspan child, merge the style of that tspan as well
// If this is a group, merge the style of its topmost (last) child with style
- for (SPObject *last_element = item->lastChild(); last_element != NULL; last_element = SP_OBJECT_PREV(last_element)) {
+ for (SPObject *last_element = item->lastChild(); last_element != NULL; last_element = last_element->getPrev()) {
if ( last_element->style ) {
SPCSSAttr *temp = sp_css_attr_from_object(last_element, SP_STYLE_FLAG_IFSET);
if (temp) {
@@ -1041,7 +1050,7 @@ take_style_from_item(SPItem *item)
}
// FIXME: also transform gradient/pattern fills, by forking? NO, this must be nondestructive
- double ex = sp_item_i2doc_affine(item).descrim();
+ double ex = item->i2doc_affine().descrim();
if (ex != 1.0) {
css = sp_css_attr_scale(css, ex);
}
@@ -1060,7 +1069,7 @@ void sp_selection_paste(SPDesktop *desktop, bool in_place)
{
Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get();
if (cm->paste(desktop, in_place)) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE, _("Paste"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE, _("Paste"));
}
}
@@ -1068,7 +1077,7 @@ void sp_selection_paste_style(SPDesktop *desktop)
{
Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get();
if (cm->pasteStyle(desktop)) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_STYLE, _("Paste style"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_STYLE, _("Paste style"));
}
}
@@ -1077,8 +1086,8 @@ void sp_selection_paste_livepatheffect(SPDesktop *desktop)
{
Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get();
if (cm->pastePathEffect(desktop)) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_LIVEPATHEFFECT,
- _("Paste live path effect"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_LIVEPATHEFFECT,
+ _("Paste live path effect"));
}
}
@@ -1110,8 +1119,8 @@ void sp_selection_remove_livepatheffect(SPDesktop *desktop)
}
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_REMOVE_LIVEPATHEFFECT,
- _("Remove live path effect"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_REMOVE_LIVEPATHEFFECT,
+ _("Remove live path effect"));
}
void sp_selection_remove_filter(SPDesktop *desktop)
@@ -1131,8 +1140,8 @@ void sp_selection_remove_filter(SPDesktop *desktop)
sp_desktop_set_style(desktop, css);
sp_repr_css_attr_unref(css);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_REMOVE_FILTER,
- _("Remove filter"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_REMOVE_FILTER,
+ _("Remove filter"));
}
@@ -1140,8 +1149,8 @@ void sp_selection_paste_size(SPDesktop *desktop, bool apply_x, bool apply_y)
{
Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get();
if (cm->pasteSize(desktop, false, apply_x, apply_y)) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_SIZE,
- _("Paste size"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_SIZE,
+ _("Paste size"));
}
}
@@ -1149,8 +1158,8 @@ void sp_selection_paste_size_separately(SPDesktop *desktop, bool apply_x, bool a
{
Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get();
if (cm->pasteSize(desktop, true, apply_x, apply_y)) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_SIZE_SEPARATELY,
- _("Paste size separately"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_SIZE_SEPARATELY,
+ _("Paste size separately"));
}
}
@@ -1170,7 +1179,7 @@ void sp_selection_to_next_layer(SPDesktop *dt, bool suppressDone)
SPObject *next=Inkscape::next_layer(dt->currentRoot(), dt->currentLayer());
if (next) {
GSList *temp_clip = NULL;
- sp_selection_copy_impl(items, &temp_clip, sp_document_repr_doc(dt->doc()));
+ sp_selection_copy_impl(items, &temp_clip, dt->doc()->getReprDoc());
sp_selection_delete_impl(items, false, false);
next=Inkscape::next_layer(dt->currentRoot(), dt->currentLayer()); // Fixes bug 1482973: crash while moving layers
GSList *copied;
@@ -1185,8 +1194,8 @@ void sp_selection_to_next_layer(SPDesktop *dt, bool suppressDone)
if (temp_clip) g_slist_free(temp_clip);
if (next) dt->setCurrentLayer(next);
if ( !suppressDone ) {
- sp_document_done(sp_desktop_document(dt), SP_VERB_LAYER_MOVE_TO_NEXT,
- _("Raise to next layer"));
+ DocumentUndo::done(sp_desktop_document(dt), SP_VERB_LAYER_MOVE_TO_NEXT,
+ _("Raise to next layer"));
}
} else {
no_more = true;
@@ -1215,7 +1224,7 @@ void sp_selection_to_prev_layer(SPDesktop *dt, bool suppressDone)
SPObject *next=Inkscape::previous_layer(dt->currentRoot(), dt->currentLayer());
if (next) {
GSList *temp_clip = NULL;
- sp_selection_copy_impl(items, &temp_clip, sp_document_repr_doc(dt->doc())); // we're in the same doc, so no need to copy defs
+ sp_selection_copy_impl(items, &temp_clip, dt->doc()->getReprDoc()); // we're in the same doc, so no need to copy defs
sp_selection_delete_impl(items, false, false);
next=Inkscape::previous_layer(dt->currentRoot(), dt->currentLayer()); // Fixes bug 1482973: crash while moving layers
GSList *copied;
@@ -1230,8 +1239,8 @@ void sp_selection_to_prev_layer(SPDesktop *dt, bool suppressDone)
if (temp_clip) g_slist_free(temp_clip);
if (next) dt->setCurrentLayer(next);
if ( !suppressDone ) {
- sp_document_done(sp_desktop_document(dt), SP_VERB_LAYER_MOVE_TO_PREV,
- _("Lower to previous layer"));
+ DocumentUndo::done(sp_desktop_document(dt), SP_VERB_LAYER_MOVE_TO_PREV,
+ _("Lower to previous layer"));
}
} else {
no_more = true;
@@ -1333,7 +1342,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons
// we're moving both a clone and its original or any ancestor in clone chain?
bool transform_clone_with_original = selection_contains_original(item, selection);
// ...both a text-on-path and its path?
- bool transform_textpath_with_path = (SP_IS_TEXT_TEXTPATH(item) && selection->includes( sp_textpath_get_path_item(SP_TEXTPATH(sp_object_first_child(item))) ));
+ bool transform_textpath_with_path = (SP_IS_TEXT_TEXTPATH(item) && selection->includes( sp_textpath_get_path_item(SP_TEXTPATH(item->firstChild())) ));
// ...both a flowtext and its frame?
bool transform_flowtext_with_frame = (SP_IS_FLOWTEXT(item) && selection->includes( SP_FLOWTEXT(item)->get_frame(NULL))); // (only the first frame is checked so far)
// ...both an offset and its source?
@@ -1368,16 +1377,17 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons
* Same for linked offset if we are also moving its source: do not move it. */
if (transform_textpath_with_path || transform_offset_with_source) {
// Restore item->transform field from the repr, in case it was changed by seltrans.
- sp_object_read_attr(item, "transform");
+ SP_OBJECT(item)->readAttr( "transform" );
} else if (transform_flowtext_with_frame) {
// apply the inverse of the region's transform to the <use> so that the flow remains
// the same (even though the output itself gets transformed)
- for (SPObject *region = item->firstChild() ; region ; region = SP_OBJECT_NEXT(region)) {
- if (!SP_IS_FLOWREGION(region) && !SP_IS_FLOWREGIONEXCLUDE(region))
- continue;
- for (SPObject *use = region->firstChild() ; use ; use = SP_OBJECT_NEXT(use)) {
- if (!SP_IS_USE(use)) continue;
- sp_item_write_transform(SP_USE(use), SP_OBJECT_REPR(use), item->transform.inverse(), NULL, compensate);
+ for ( SPObject *region = item->firstChild() ; region ; region = region->getNext() ) {
+ if (SP_IS_FLOWREGION(region) || SP_IS_FLOWREGIONEXCLUDE(region)) {
+ for ( SPObject *use = region->firstChild() ; use ; use = use->getNext() ) {
+ if ( SP_IS_USE(use) ) {
+ SP_USE(use)->doWriteTransform(use->getRepr(), item->transform.inverse(), NULL, compensate);
+ }
+ }
}
}
} else if (transform_clone_with_original) {
@@ -1386,10 +1396,10 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons
// transform and its move compensation are both cancelled out.
// restore item->transform field from the repr, in case it was changed by seltrans
- sp_object_read_attr(item, "transform");
+ SP_OBJECT(item)->readAttr( "transform" );
// calculate the matrix we need to apply to the clone to cancel its induced transform from its original
- Geom::Matrix parent2dt = sp_item_i2d_affine(SP_ITEM(SP_OBJECT_PARENT(item)));
+ Geom::Matrix parent2dt = SP_ITEM(SP_OBJECT_PARENT(item))->i2d_affine();
Geom::Matrix t = parent2dt * affine * parent2dt.inverse();
Geom::Matrix t_inv = t.inverse();
Geom::Matrix result = t_inv * item->transform * t;
@@ -1403,25 +1413,25 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons
if (prefs_parallel) {
Geom::Matrix move = result * clone_move * t_inv;
- sp_item_write_transform(item, SP_OBJECT_REPR(item), move, &move, compensate);
+ item->doWriteTransform(SP_OBJECT_REPR(item), move, &move, compensate);
} else if (prefs_unmoved) {
//if (SP_IS_USE(sp_use_get_original(SP_USE(item))))
// clone_move = Geom::identity();
Geom::Matrix move = result * clone_move;
- sp_item_write_transform(item, SP_OBJECT_REPR(item), move, &t, compensate);
+ item->doWriteTransform(SP_OBJECT_REPR(item), move, &t, compensate);
}
} else {
// just apply the result
- sp_item_write_transform(item, SP_OBJECT_REPR(item), result, &t, compensate);
+ item->doWriteTransform(SP_OBJECT_REPR(item), result, &t, compensate);
}
} else {
if (set_i2d) {
- sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * (Geom::Matrix)affine);
+ item->set_i2d_affine(item->i2d_affine() * (Geom::Matrix)affine);
}
- sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform, NULL, compensate);
+ item->doWriteTransform(SP_OBJECT_REPR(item), item->transform, NULL, compensate);
}
// if we're moving the actual object, not just updating the repr, we can transform the
@@ -1446,8 +1456,8 @@ void sp_selection_remove_transform(SPDesktop *desktop)
l = l->next;
}
- sp_document_done(sp_desktop_document(desktop), SP_VERB_OBJECT_FLATTEN,
- _("Remove transform"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_OBJECT_FLATTEN,
+ _("Remove transform"));
}
void
@@ -1548,9 +1558,9 @@ void sp_selection_rotate_90(SPDesktop *desktop, bool ccw)
sp_item_rotate_rel(item, rot_90);
}
- sp_document_done(sp_desktop_document(desktop),
- ccw ? SP_VERB_OBJECT_ROTATE_90_CCW : SP_VERB_OBJECT_ROTATE_90_CW,
- ccw ? _("Rotate 90&#176; CCW") : _("Rotate 90&#176; CW"));
+ DocumentUndo::done(sp_desktop_document(desktop),
+ ccw ? SP_VERB_OBJECT_ROTATE_90_CCW : SP_VERB_OBJECT_ROTATE_90_CW,
+ ccw ? _("Rotate 90&#176; CCW") : _("Rotate 90&#176; CW"));
}
void
@@ -1566,12 +1576,12 @@ sp_selection_rotate(Inkscape::Selection *selection, gdouble const angle_degrees)
sp_selection_rotate_relative(selection, *center, angle_degrees);
- sp_document_maybe_done(sp_desktop_document(selection->desktop()),
- ( ( angle_degrees > 0 )
- ? "selector:rotate:ccw"
- : "selector:rotate:cw" ),
- SP_VERB_CONTEXT_SELECT,
- _("Rotate"));
+ DocumentUndo::maybeDone(sp_desktop_document(selection->desktop()),
+ ( ( angle_degrees > 0 )
+ ? "selector:rotate:ccw"
+ : "selector:rotate:cw" ),
+ SP_VERB_CONTEXT_SELECT,
+ _("Rotate"));
}
// helper function:
@@ -1613,12 +1623,12 @@ sp_selection_rotate_screen(Inkscape::Selection *selection, gdouble angle)
sp_selection_rotate_relative(selection, *center, zangle);
- sp_document_maybe_done(sp_desktop_document(selection->desktop()),
- ( (angle > 0)
- ? "selector:rotate:ccw"
- : "selector:rotate:cw" ),
- SP_VERB_CONTEXT_SELECT,
- _("Rotate by pixels"));
+ DocumentUndo::maybeDone(sp_desktop_document(selection->desktop()),
+ ( (angle > 0)
+ ? "selector:rotate:ccw"
+ : "selector:rotate:cw" ),
+ SP_VERB_CONTEXT_SELECT,
+ _("Rotate by pixels"));
}
void
@@ -1643,12 +1653,12 @@ sp_selection_scale(Inkscape::Selection *selection, gdouble grow)
double const times = 1.0 + grow / max_len;
sp_selection_scale_relative(selection, center, Geom::Scale(times, times));
- sp_document_maybe_done(sp_desktop_document(selection->desktop()),
- ( (grow > 0)
- ? "selector:scale:larger"
- : "selector:scale:smaller" ),
- SP_VERB_CONTEXT_SELECT,
- _("Scale"));
+ DocumentUndo::maybeDone(sp_desktop_document(selection->desktop()),
+ ( (grow > 0)
+ ? "selector:scale:larger"
+ : "selector:scale:smaller" ),
+ SP_VERB_CONTEXT_SELECT,
+ _("Scale"));
}
void
@@ -1672,8 +1682,8 @@ sp_selection_scale_times(Inkscape::Selection *selection, gdouble times)
Geom::Point const center(sel_bbox->midpoint());
sp_selection_scale_relative(selection, center, Geom::Scale(times, times));
- sp_document_done(sp_desktop_document(selection->desktop()), SP_VERB_CONTEXT_SELECT,
- _("Scale by whole factor"));
+ DocumentUndo::done(sp_desktop_document(selection->desktop()), SP_VERB_CONTEXT_SELECT,
+ _("Scale by whole factor"));
}
void
@@ -1687,14 +1697,14 @@ sp_selection_move(SPDesktop *desktop, gdouble dx, gdouble dy)
sp_selection_move_relative(selection, dx, dy);
if (dx == 0) {
- sp_document_maybe_done(sp_desktop_document(desktop), "selector:move:vertical", SP_VERB_CONTEXT_SELECT,
- _("Move vertically"));
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "selector:move:vertical", SP_VERB_CONTEXT_SELECT,
+ _("Move vertically"));
} else if (dy == 0) {
- sp_document_maybe_done(sp_desktop_document(desktop), "selector:move:horizontal", SP_VERB_CONTEXT_SELECT,
- _("Move horizontally"));
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "selector:move:horizontal", SP_VERB_CONTEXT_SELECT,
+ _("Move horizontally"));
} else {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SELECT,
- _("Move"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SELECT,
+ _("Move"));
}
}
@@ -1713,14 +1723,14 @@ sp_selection_move_screen(SPDesktop *desktop, gdouble dx, gdouble dy)
sp_selection_move_relative(selection, zdx, zdy);
if (dx == 0) {
- sp_document_maybe_done(sp_desktop_document(desktop), "selector:move:vertical", SP_VERB_CONTEXT_SELECT,
- _("Move vertically by pixels"));
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "selector:move:vertical", SP_VERB_CONTEXT_SELECT,
+ _("Move vertically by pixels"));
} else if (dy == 0) {
- sp_document_maybe_done(sp_desktop_document(desktop), "selector:move:horizontal", SP_VERB_CONTEXT_SELECT,
- _("Move horizontally by pixels"));
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "selector:move:horizontal", SP_VERB_CONTEXT_SELECT,
+ _("Move horizontally by pixels"));
} else {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SELECT,
- _("Move"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SELECT,
+ _("Move"));
}
}
@@ -1737,15 +1747,15 @@ SPItem *next_item_from_list(SPDesktop *desktop, GSList const *items, SPObject *r
struct Forward {
typedef SPObject *Iterator;
- static Iterator children(SPObject *o) { return sp_object_first_child(o); }
- static Iterator siblings_after(SPObject *o) { return SP_OBJECT_NEXT(o); }
+ static Iterator children(SPObject *o) { return o->firstChild(); }
+ static Iterator siblings_after(SPObject *o) { return o->getNext(); }
static void dispose(Iterator /*i*/) {}
static SPObject *object(Iterator i) { return i; }
- static Iterator next(Iterator i) { return SP_OBJECT_NEXT(i); }
+ static Iterator next(Iterator i) { return i->getNext(); }
};
-struct Reverse {
+struct ListReverse {
typedef GSList *Iterator;
static Iterator children(SPObject *o) {
@@ -1765,10 +1775,14 @@ struct Reverse {
private:
static GSList *make_list(SPObject *object, SPObject *limit) {
- GSList *list=NULL;
+ GSList *list = NULL;
while ( object != limit ) {
+ if (!object) { // TODO check if this happens in practice
+ g_warning("Unexpected list overrun");
+ break;
+ }
list = g_slist_prepend(list, object);
- object = SP_OBJECT_NEXT(object);
+ object = object->getNext();
}
return list;
}
@@ -1824,7 +1838,7 @@ sp_selection_item_prev(SPDesktop *desktop)
root = desktop->currentRoot();
}
- SPItem *item=next_item_from_list<Reverse>(desktop, selection->itemList(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive);
+ SPItem *item=next_item_from_list<ListReverse>(desktop, selection->itemList(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive);
if (item) {
selection->set(item, PREFS_SELECTION_LAYER_RECURSIVE == inlayer);
@@ -1987,7 +2001,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();
- Geom::OptRect sbox = sp_item_bbox_desktop(item);
+ Geom::OptRect sbox = item->getBboxDesktop();
if ( sbox && dbox.contains(*sbox) == false ) {
Geom::Point const s_dt = sbox->midpoint();
@@ -2002,15 +2016,15 @@ void scroll_to_show_item(SPDesktop *desktop, SPItem *item)
}
-void
-sp_selection_clone(SPDesktop *desktop)
+void sp_selection_clone(SPDesktop *desktop)
{
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
Inkscape::Selection *selection = sp_desktop_selection(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
// check if something is selected
if (selection->isEmpty()) {
@@ -2047,8 +2061,8 @@ sp_selection_clone(SPDesktop *desktop)
Inkscape::GC::release(clone);
}
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_CLONE,
- C_("Action","Clone"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_CLONE,
+ C_("Action", "Clone"));
selection->setReprList(newsel);
@@ -2097,8 +2111,8 @@ sp_selection_relink(SPDesktop *desktop)
if (!relinked) {
desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("<b>No clones to relink</b> in the selection."));
} else {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_UNLINK_CLONE,
- _("Relink clone"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_UNLINK_CLONE,
+ _("Relink clone"));
}
}
@@ -2146,6 +2160,11 @@ sp_selection_unlink(SPDesktop *desktop)
SPItem *unlink;
if (SP_IS_USE(item)) {
unlink = sp_use_unlink(SP_USE(item));
+ // Unable to unlink use (external or invalid href?)
+ if (!unlink) {
+ new_select = g_slist_prepend(new_select, item);
+ continue;
+ }
} else /*if (SP_IS_TREF(use))*/ {
unlink = SP_ITEM(sp_tref_convert_to_tspan(item));
}
@@ -2164,8 +2183,8 @@ sp_selection_unlink(SPDesktop *desktop)
desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("<b>No clones to unlink</b> in the selection."));
}
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_UNLINK_CLONE,
- _("Unlink clone"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_UNLINK_CLONE,
+ _("Unlink clone"));
}
void
@@ -2192,7 +2211,7 @@ sp_select_clone_original(SPDesktop *desktop)
} else if (SP_IS_OFFSET(item) && SP_OFFSET(item)->sourceHref) {
original = sp_offset_get_source(SP_OFFSET(item));
} else if (SP_IS_TEXT_TEXTPATH(item)) {
- original = sp_textpath_get_path_item(SP_TEXTPATH(sp_object_first_child(item)));
+ original = sp_textpath_get_path_item(SP_TEXTPATH(SP_OBJECT(item)->firstChild()));
} else if (SP_IS_FLOWTEXT(item)) {
original = SP_FLOWTEXT(item)->get_frame(NULL); // first frame only
} else { // it's an object that we don't know what to do with
@@ -2216,8 +2235,8 @@ sp_select_clone_original(SPDesktop *desktop)
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
bool highlight = prefs->getBool("/options/highlightoriginal/value");
if (highlight) {
- Geom::OptRect a = item->getBounds(sp_item_i2d_affine(item));
- Geom::OptRect b = original->getBounds(sp_item_i2d_affine(original));
+ Geom::OptRect a = item->getBounds(item->i2d_affine());
+ Geom::OptRect b = original->getBounds(original->i2d_affine());
if ( a && b ) {
// draw a flashing line between the objects
SPCurve *curve = new SPCurve();
@@ -2243,11 +2262,12 @@ sp_select_clone_original(SPDesktop *desktop)
void sp_selection_to_marker(SPDesktop *desktop, bool apply)
{
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
SPDocument *doc = sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -2257,7 +2277,7 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply)
return;
}
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
Geom::OptRect r = selection->bounds(SPItem::RENDERING_BBOX);
boost::optional<Geom::Point> c = selection->center();
if ( !r || !c ) {
@@ -2265,7 +2285,7 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply)
}
// calculate the transform to be applied to objects to move them to 0,0
- Geom::Point move_p = Geom::Point(0, sp_document_height(doc)) - *c;
+ Geom::Point move_p = Geom::Point(0, doc->getHeight()) - *c;
move_p[Geom::Y] = -move_p[Geom::Y];
Geom::Matrix move = Geom::Matrix(Geom::Translate(move_p));
@@ -2276,7 +2296,7 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply)
// bottommost object, after sorting
SPObject *parent = SP_OBJECT_PARENT(items->data);
- Geom::Matrix parent_transform(sp_item_i2doc_affine(SP_ITEM(parent)));
+ Geom::Matrix parent_transform(SP_ITEM(parent)->i2doc_affine());
// remember the position of the first item
gint pos = SP_OBJECT_REPR(items->data)->position();
@@ -2320,8 +2340,8 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply)
g_slist_free(items);
- sp_document_done(doc, SP_VERB_EDIT_SELECTION_2_MARKER,
- _("Objects to marker"));
+ DocumentUndo::done(doc, SP_VERB_EDIT_SELECTION_2_MARKER,
+ _("Objects to marker"));
}
static void sp_selection_to_guides_recursive(SPItem *item, bool deleteitem, bool wholegroups) {
@@ -2330,7 +2350,7 @@ static void sp_selection_to_guides_recursive(SPItem *item, bool deleteitem, bool
sp_selection_to_guides_recursive(SP_ITEM(i->data), deleteitem, wholegroups);
}
} else {
- sp_item_convert_item_to_guides(item);
+ item->convert_item_to_guides();
if (deleteitem) {
item->deleteObject(true);
@@ -2361,17 +2381,18 @@ void sp_selection_to_guides(SPDesktop *desktop)
sp_selection_to_guides_recursive(SP_ITEM(i->data), deleteitem, wholegroups);
}
- sp_document_done(doc, SP_VERB_EDIT_SELECTION_2_GUIDES, _("Objects to guides"));
+ DocumentUndo::done(doc, SP_VERB_EDIT_SELECTION_2_GUIDES, _("Objects to guides"));
}
void
sp_selection_tile(SPDesktop *desktop, bool apply)
{
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
SPDocument *doc = sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -2381,14 +2402,14 @@ sp_selection_tile(SPDesktop *desktop, bool apply)
return;
}
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
Geom::OptRect r = selection->bounds(SPItem::RENDERING_BBOX);
if ( !r ) {
return;
}
// calculate the transform to be applied to objects to move them to 0,0
- Geom::Point move_p = Geom::Point(0, sp_document_height(doc)) - (r->min() + Geom::Point(0, r->dimensions()[Geom::Y]));
+ Geom::Point move_p = Geom::Point(0, doc->getHeight()) - (r->min() + Geom::Point(0, r->dimensions()[Geom::Y]));
move_p[Geom::Y] = -move_p[Geom::Y];
Geom::Matrix move = Geom::Matrix(Geom::Translate(move_p));
@@ -2399,7 +2420,7 @@ sp_selection_tile(SPDesktop *desktop, bool apply)
// bottommost object, after sorting
SPObject *parent = SP_OBJECT_PARENT(items->data);
- Geom::Matrix parent_transform(sp_item_i2doc_affine(SP_ITEM(parent)));
+ Geom::Matrix parent_transform(SP_ITEM(parent)->i2doc_affine());
// remember the position of the first item
gint pos = SP_OBJECT_REPR(items->data)->position();
@@ -2464,18 +2485,18 @@ sp_selection_tile(SPDesktop *desktop, bool apply)
g_slist_free(items);
- sp_document_done(doc, SP_VERB_EDIT_TILE,
- _("Objects to pattern"));
+ DocumentUndo::done(doc, SP_VERB_EDIT_TILE,
+ _("Objects to pattern"));
}
-void
-sp_selection_untile(SPDesktop *desktop)
+void sp_selection_untile(SPDesktop *desktop)
{
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
SPDocument *doc = sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -2512,7 +2533,7 @@ sp_selection_untile(SPDesktop *desktop)
Geom::Matrix pat_transform = pattern_patternTransform(SP_PATTERN(server));
pat_transform *= item->transform;
- for (SPObject *child = sp_object_first_child(pattern) ; child != NULL; child = child->next ) {
+ for (SPObject *child = pattern->firstChild() ; child != NULL; child = child->next ) {
Inkscape::XML::Node *copy = SP_OBJECT_REPR(child)->duplicate(xml_doc);
SPItem *i = SP_ITEM(desktop->currentLayer()->appendChildRepr(copy));
@@ -2520,10 +2541,10 @@ sp_selection_untile(SPDesktop *desktop)
// use SPObject::setid when mental finishes it to steal ids of
// this is needed to make sure the new item has curve (simply requestDisplayUpdate does not work)
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
Geom::Matrix transform( i->transform * pat_transform );
- sp_item_write_transform(i, SP_OBJECT_REPR(i), transform);
+ i->doWriteTransform(SP_OBJECT_REPR(i), transform);
new_select = g_slist_prepend(new_select, i);
}
@@ -2536,8 +2557,8 @@ sp_selection_untile(SPDesktop *desktop)
if (!did) {
desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("<b>No pattern fills</b> in the selection."));
} else {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_EDIT_UNTILE,
- _("Pattern to objects"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_UNTILE,
+ _("Pattern to objects"));
selection->setList(new_select);
}
}
@@ -2588,16 +2609,13 @@ sp_selection_get_export_hints(Inkscape::Selection *selection, char const **filen
}
}
-void
-sp_document_get_export_hints(SPDocument *doc, char const **filename, float *xdpi, float *ydpi)
+void sp_document_get_export_hints(SPDocument *doc, char const **filename, float *xdpi, float *ydpi)
{
- Inkscape::XML::Node * repr = sp_document_repr_root(doc);
- gchar const *dpi_string;
+ Inkscape::XML::Node * repr = doc->getReprRoot();
*filename = repr->attribute("inkscape:export-filename");
- dpi_string = NULL;
- dpi_string = repr->attribute("inkscape:export-xdpi");
+ gchar const *dpi_string = repr->attribute("inkscape:export-xdpi");
if (dpi_string != NULL) {
*xdpi = atof(dpi_string);
}
@@ -2609,14 +2627,14 @@ sp_document_get_export_hints(SPDocument *doc, char const **filename, float *xdpi
}
}
-void
-sp_selection_create_bitmap_copy(SPDesktop *desktop)
+void sp_selection_create_bitmap_copy(SPDesktop *desktop)
{
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
SPDocument *document = sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -2631,7 +2649,7 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop)
desktop->setWaitingCursor();
// Get the bounding box of the selection
- sp_document_ensure_up_to_date(document);
+ document->ensureUpToDate();
Geom::OptRect bbox = selection->bounds();
if (!bbox) {
desktop->clearWaitingCursor();
@@ -2652,7 +2670,7 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop)
// Create the filename.
gchar *const basename = g_strdup_printf("%s-%s-%u.png",
- document->name,
+ document->getName(),
SP_OBJECT_REPR(items->data)->attribute("id"),
current);
// Imagemagick is known not to handle spaces in filenames, so we replace anything but letters,
@@ -2661,8 +2679,8 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop)
// Build the complete path by adding document base dir, if set, otherwise home dir
gchar * directory = NULL;
- if (SP_DOCUMENT_URI(document)) {
- directory = g_dirname(SP_DOCUMENT_URI(document));
+ if ( document->getURI() ) {
+ directory = g_dirname( document->getURI() );
}
if (directory == NULL) {
directory = homedir_path(NULL);
@@ -2735,7 +2753,7 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop)
}
// Calculate the matrix that will be applied to the image so that it exactly overlaps the source objects
- Geom::Matrix eek(sp_item_i2d_affine(SP_ITEM(parent_object)));
+ Geom::Matrix eek(SP_ITEM(parent_object)->i2d_affine());
Geom::Matrix t;
double shift_x = bbox->min()[Geom::X];
@@ -2799,8 +2817,8 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop)
gdk_pixbuf_unref(pb);
// Complete undoable transaction
- sp_document_done(document, SP_VERB_SELECTION_CREATE_BITMAP,
- _("Create bitmap"));
+ DocumentUndo::done(document, SP_VERB_SELECTION_CREATE_BITMAP,
+ _("Create bitmap"));
}
desktop->clearWaitingCursor();
@@ -2818,14 +2836,14 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop)
* If \a apply_clip_path parameter is true, clipPath is created, otherwise mask
*
*/
-void
-sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_layer)
+void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_layer)
{
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
SPDocument *doc = sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -2847,7 +2865,7 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la
}
// /END FIXME
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
GSList *items = g_slist_copy((GSList *) selection->itemList());
@@ -2962,7 +2980,7 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la
gchar const *mask_id = NULL;
if (apply_clip_path) {
- mask_id = sp_clippath_create(mask_items_dup, doc, &maskTransform);
+ mask_id = SPClipPath::create(mask_items_dup, doc, &maskTransform);
} else {
mask_id = sp_mask_create(mask_items_dup, doc, &maskTransform);
}
@@ -3015,18 +3033,20 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la
selection->addList(items_to_select);
g_slist_free(items_to_select);
- if (apply_clip_path)
- sp_document_done(doc, SP_VERB_OBJECT_SET_CLIPPATH, _("Set clipping path"));
- else
- sp_document_done(doc, SP_VERB_OBJECT_SET_MASK, _("Set mask"));
+ if (apply_clip_path) {
+ DocumentUndo::done(doc, SP_VERB_OBJECT_SET_CLIPPATH, _("Set clipping path"));
+ } else {
+ DocumentUndo::done(doc, SP_VERB_OBJECT_SET_MASK, _("Set mask"));
+ }
}
void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) {
- if (desktop == NULL)
+ if (desktop == NULL) {
return;
+ }
SPDocument *doc = sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
// check if something is selected
@@ -3038,7 +3058,7 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
bool remove_original = prefs->getBool("/options/maskobject/remove", true);
bool ungroup_masked = prefs->getBool("/options/maskobject/ungrouping", true);
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
gchar const *attributeName = apply_clip_path ? "clip-path" : "mask";
std::map<SPObject*,SPItem*> referenced_objects;
@@ -3091,7 +3111,7 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) {
for ( std::map<SPObject*,SPItem*>::iterator it = referenced_objects.begin() ; it != referenced_objects.end() ; ++it) {
SPObject *obj = (*it).first; // Group containing the clipped paths or masks
GSList *items_to_move = NULL;
- for (SPObject *child = sp_object_first_child(obj) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = obj->firstChild() ; child; child = child->getNext() ) {
// Collect all clipped paths and masks within a single group
Inkscape::XML::Node *copy = SP_OBJECT_REPR(child)->duplicate(xml_doc);
items_to_move = g_slist_prepend(items_to_move, copy);
@@ -3120,7 +3140,7 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) {
// transform mask, so it is moved the same spot where mask was applied
Geom::Matrix transform(mask_item->transform);
transform *= (*it).second->transform;
- sp_item_write_transform(mask_item, SP_OBJECT_REPR(mask_item), transform);
+ mask_item->doWriteTransform(SP_OBJECT_REPR(mask_item), transform);
}
g_slist_free(items_to_move);
@@ -3141,10 +3161,11 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) {
selection->addList(items_to_select);
g_slist_free(items_to_select);
- if (apply_clip_path)
- sp_document_done(doc, SP_VERB_OBJECT_UNSET_CLIPPATH, _("Release clipping path"));
- else
- sp_document_done(doc, SP_VERB_OBJECT_UNSET_MASK, _("Release mask"));
+ if (apply_clip_path) {
+ DocumentUndo::done(doc, SP_VERB_OBJECT_UNSET_CLIPPATH, _("Release clipping path"));
+ } else {
+ DocumentUndo::done(doc, SP_VERB_OBJECT_UNSET_MASK, _("Release mask"));
+ }
}
/**
@@ -3181,8 +3202,8 @@ void
verb_fit_canvas_to_selection(SPDesktop *const desktop)
{
if (fit_canvas_to_selection(desktop)) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_SELECTION,
- _("Fit Page to Selection"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_SELECTION,
+ _("Fit Page to Selection"));
}
}
@@ -3195,9 +3216,9 @@ fit_canvas_to_drawing(SPDocument *doc, bool with_margins)
{
g_return_val_if_fail(doc != NULL, false);
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
SPItem const *const root = SP_ITEM(doc->root);
- Geom::OptRect const bbox(root->getBounds(sp_item_i2d_affine(root)));
+ Geom::OptRect const bbox(root->getBounds(root->i2d_affine()));
if (bbox) {
doc->fitToRect(*bbox, with_margins);
return true;
@@ -3210,8 +3231,8 @@ void
verb_fit_canvas_to_drawing(SPDesktop *desktop)
{
if (fit_canvas_to_drawing(sp_desktop_document(desktop))) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_DRAWING,
- _("Fit Page to Drawing"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_DRAWING,
+ _("Fit Page to Drawing"));
}
}
@@ -3231,8 +3252,8 @@ void fit_canvas_to_selection_or_drawing(SPDesktop *desktop) {
? fit_canvas_to_drawing(doc, true)
: fit_canvas_to_selection(desktop, true) );
if (changed) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_SELECTION_OR_DRAWING,
- _("Fit Page to Selection or Drawing"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_SELECTION_OR_DRAWING,
+ _("Fit Page to Selection or Drawing"));
}
};
diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h
index 1f975975a..65d1ba296 100644
--- a/src/selection-chemistry.h
+++ b/src/selection-chemistry.h
@@ -9,6 +9,7 @@
* Frank Felfe <innerspace@iname.com>
* bulia byak <buliabyak@users.sf.net>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2010 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -17,6 +18,7 @@
*/
#include "forward.h"
+#include "sp-item.h"
#include "2geom/forward.h"
namespace Inkscape { class Selection; }
diff --git a/src/selection-describer.cpp b/src/selection-describer.cpp
index c9d6871c3..7bc6adf38 100644
--- a/src/selection-describer.cpp
+++ b/src/selection-describer.cpp
@@ -4,6 +4,7 @@
* Authors:
* MenTaLguY <mental@rydia.net>
* bulia byak <buliabyak@users.sf.net>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2006 Authors
*
@@ -178,7 +179,7 @@ void SelectionDescriber::_updateMessageFromSelection(Inkscape::Selection *select
g_free (parent_name);
if (!items->next) { // one item
- char *item_desc = sp_item_description(item);
+ char *item_desc = item->description();
if (SP_IS_USE(item) || (SP_IS_OFFSET(item) && SP_OFFSET (item)->sourceHref)) {
_context.setF(Inkscape::NORMAL_MESSAGE, "%s%s. %s. %s.",
item_desc, in_phrase,
diff --git a/src/selection.cpp b/src/selection.cpp
index a4508d9bb..9cef87076 100644
--- a/src/selection.cpp
+++ b/src/selection.cpp
@@ -6,6 +6,7 @@
* MenTaLguY <mental@rydia.net>
* bulia byak <buliabyak@users.sf.net>
* Andrius R. <knutux@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Andrius R.
* Copyright (C) 2004-2005 MenTaLguY
@@ -374,7 +375,7 @@ Geom::OptRect Selection::bounds(SPItem::BBoxType type) const
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));
+ bbox = unify(bbox, SP_ITEM(i->data)->getBboxDesktop(type));
}
return bbox;
}
@@ -393,8 +394,8 @@ NRRect *Selection::boundsInDocument(NRRect *bbox, SPItem::BBoxType type) const {
for ( GSList const *iter=items ; iter != NULL ; iter = iter->next ) {
SPItem *item=SP_ITEM(iter->data);
- Geom::Matrix i2doc(sp_item_i2doc_affine(item));
- sp_item_invoke_bbox(item, bbox, i2doc, FALSE, type);
+ Geom::Matrix i2doc(item->i2doc_affine());
+ item->invoke_bbox( bbox, i2doc, FALSE, type);
}
return bbox;
@@ -438,7 +439,7 @@ std::vector<Inkscape::SnapCandidatePoint> Selection::getSnapPoints(SnapPreferenc
std::vector<Inkscape::SnapCandidatePoint> p;
for (GSList const *iter = items; iter != NULL; iter = iter->next) {
SPItem *this_item = SP_ITEM(iter->data);
- sp_item_snappoints(this_item, p, &snapprefs_dummy);
+ this_item->getSnappoints(p, &snapprefs_dummy);
//Include the transformation origin for snapping
//For a selection or group only the overall origin is considered
@@ -460,7 +461,7 @@ std::vector<Inkscape::SnapCandidatePoint> Selection::getSnapPointsConvexHull(Sna
std::vector<Inkscape::SnapCandidatePoint> p;
for (GSList const *iter = items; iter != NULL; iter = iter->next) {
- sp_item_snappoints(SP_ITEM(iter->data), p, &snapprefs_dummy);
+ SP_ITEM(iter->data)->getSnappoints(p, &snapprefs_dummy);
}
std::vector<Inkscape::SnapCandidatePoint> pHull;
diff --git a/src/seltrans.cpp b/src/seltrans.cpp
index 26de63cfd..c92f67348 100644
--- a/src/seltrans.cpp
+++ b/src/seltrans.cpp
@@ -6,6 +6,7 @@
* bulia byak <buliabyak@users.sf.net>
* Carl Hetherington <inkscape@carlh.net>
* Diederik van Lierop <mail@diedenrezi.nl>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 1999-2008 Authors
@@ -45,6 +46,7 @@
#include <2geom/angle.h>
#include "display/snap-indicator.h"
+using Inkscape::DocumentUndo;
static void sp_remove_handles(SPKnot *knot[], gint num);
@@ -265,7 +267,7 @@ void Inkscape::SelTrans::grab(Geom::Point const &p, gdouble x, gdouble y, bool s
SPItem *it = (SPItem *)sp_object_ref(SP_OBJECT(l->data), NULL);
_items.push_back(it);
_items_const.push_back(it);
- _items_affines.push_back(sp_item_i2d_affine(it));
+ _items_affines.push_back(it->i2d_affine());
_items_centers.push_back(it->getCenter()); // for content-dragging, we need to remember original centers
}
@@ -333,7 +335,7 @@ void Inkscape::SelTrans::grab(Geom::Point const &p, gdouble x, gdouble y, bool s
// More than 50 items will produce at least 200 bbox points, which might make Inkscape crawl
// (see the comment a few lines above). In that case we will use the bbox of the selection as a whole
for (unsigned i = 0; i < _items.size(); i++) {
- getBBoxPoints(sp_item_bbox_desktop(_items[i], _snap_bbox_type), &_bbox_points_for_translating, false, true, emp, mp);
+ getBBoxPoints(_items[i]->getBboxDesktop(_snap_bbox_type), &_bbox_points_for_translating, false, true, emp, mp);
}
} else {
_bbox_points_for_translating = _bbox_points; // use the bbox points of the selection as a whole
@@ -429,7 +431,7 @@ void Inkscape::SelTrans::transform(Geom::Matrix const &rel_affine, Geom::Point c
for (unsigned i = 0; i < _items.size(); i++) {
SPItem &item = *_items[i];
Geom::Matrix const &prev_transform = _items_affines[i];
- sp_item_set_i2d_affine(&item, prev_transform * affine);
+ item.set_i2d_affine(prev_transform * affine);
}
} else {
if (_bbox) {
@@ -505,17 +507,17 @@ void Inkscape::SelTrans::ungrab()
_items_centers.clear();
if (_current_relative_affine.isTranslation()) {
- sp_document_done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
- _("Move"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
+ _("Move"));
} else if (_current_relative_affine.without_translation().isScale()) {
- sp_document_done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
- _("Scale"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
+ _("Scale"));
} else if (_current_relative_affine.without_translation().isRotation()) {
- sp_document_done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
- _("Rotate"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
+ _("Rotate"));
} else {
- sp_document_done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
- _("Skew"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
+ _("Skew"));
}
} else {
@@ -526,8 +528,8 @@ void Inkscape::SelTrans::ungrab()
SPItem *it = (SPItem*)SP_OBJECT(l->data);
SP_OBJECT(it)->updateRepr();
}
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
- _("Set center"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
+ _("Set center"));
}
_items.clear();
@@ -584,15 +586,15 @@ void Inkscape::SelTrans::stamp()
Geom::Matrix const *new_affine;
if (_show == SHOW_OUTLINE) {
- Geom::Matrix const i2d(sp_item_i2d_affine(original_item));
+ Geom::Matrix const i2d(original_item->i2d_affine());
Geom::Matrix const i2dnew( i2d * _current_relative_affine );
- sp_item_set_i2d_affine(copy_item, i2dnew);
+ copy_item->set_i2d_affine(i2dnew);
new_affine = &copy_item->transform;
} else {
new_affine = &original_item->transform;
}
- sp_item_write_transform(copy_item, copy_repr, *new_affine);
+ copy_item->doWriteTransform(copy_repr, *new_affine);
if ( copy_item->isCenterSet() && _center ) {
copy_item->setCenter(*_center * _current_relative_affine);
@@ -601,8 +603,8 @@ void Inkscape::SelTrans::stamp()
Inkscape::GC::release(copy_repr);
l = l->next;
}
- sp_document_done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
- _("Stamp"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
+ _("Stamp"));
}
if ( fixup && _stamp_cache ) {
@@ -790,8 +792,8 @@ void Inkscape::SelTrans::handleClick(SPKnot */*knot*/, guint state, SPSelTransHa
_center_is_set = false; // center has changed
_updateHandles();
}
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
- _("Reset center"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_SELECT,
+ _("Reset center"));
}
break;
default:
diff --git a/src/sp-anchor.cpp b/src/sp-anchor.cpp
index aabefdfdb..e57ac8a58 100644
--- a/src/sp-anchor.cpp
+++ b/src/sp-anchor.cpp
@@ -1,10 +1,9 @@
-#define __SP_ANCHOR_C__
-
/*
* SVG <a> element implementation
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
@@ -89,14 +88,14 @@ static void sp_anchor_build(SPObject *object, SPDocument *document, Inkscape::XM
((SPObjectClass *) (parent_class))->build(object, document, repr);
}
- sp_object_read_attr(object, "xlink:type");
- sp_object_read_attr(object, "xlink:role");
- sp_object_read_attr(object, "xlink:arcrole");
- sp_object_read_attr(object, "xlink:title");
- sp_object_read_attr(object, "xlink:show");
- sp_object_read_attr(object, "xlink:actuate");
- sp_object_read_attr(object, "xlink:href");
- sp_object_read_attr(object, "target");
+ object->readAttr( "xlink:type" );
+ object->readAttr( "xlink:role" );
+ object->readAttr( "xlink:arcrole" );
+ object->readAttr( "xlink:title" );
+ object->readAttr( "xlink:show" );
+ object->readAttr( "xlink:actuate" );
+ object->readAttr( "xlink:href" );
+ object->readAttr( "target" );
}
static void sp_anchor_release(SPObject *object)
@@ -154,13 +153,15 @@ static Inkscape::XML::Node *sp_anchor_write(SPObject *object, Inkscape::XML::Doc
repr->setAttribute("xlink:href", anchor->href);
if (repr != SP_OBJECT_REPR(object)) {
- COPY_ATTR(repr, object->repr, "xlink:type");
- COPY_ATTR(repr, object->repr, "xlink:role");
- COPY_ATTR(repr, object->repr, "xlink:arcrole");
- COPY_ATTR(repr, object->repr, "xlink:title");
- COPY_ATTR(repr, object->repr, "xlink:show");
- COPY_ATTR(repr, object->repr, "xlink:actuate");
- COPY_ATTR(repr, object->repr, "target");
+ // XML Tree being directly used while it shouldn't be in the
+ // below COPY_ATTR lines
+ COPY_ATTR(repr, object->getRepr(), "xlink:type");
+ COPY_ATTR(repr, object->getRepr(), "xlink:role");
+ COPY_ATTR(repr, object->getRepr(), "xlink:arcrole");
+ COPY_ATTR(repr, object->getRepr(), "xlink:title");
+ COPY_ATTR(repr, object->getRepr(), "xlink:show");
+ COPY_ATTR(repr, object->getRepr(), "xlink:actuate");
+ COPY_ATTR(repr, object->getRepr(), "target");
}
if (((SPObjectClass *) (parent_class))->write) {
diff --git a/src/sp-animation.cpp b/src/sp-animation.cpp
index 132d0aa0f..f0796b7c6 100644
--- a/src/sp-animation.cpp
+++ b/src/sp-animation.cpp
@@ -1,5 +1,3 @@
-#define __SP_ANIMATION_C__
-
/** \file
* SVG <animate> implementation.
*
@@ -8,6 +6,7 @@
/*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 2002 Lauris Kaplinski
*
@@ -89,18 +88,18 @@ sp_animation_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *
if (((SPObjectClass *) animation_parent_class)->build)
((SPObjectClass *) animation_parent_class)->build(object, document, repr);
- sp_object_read_attr(object, "xlink:href");
- sp_object_read_attr(object, "attributeName");
- sp_object_read_attr(object, "attributeType");
- sp_object_read_attr(object, "begin");
- sp_object_read_attr(object, "dur");
- sp_object_read_attr(object, "end");
- sp_object_read_attr(object, "min");
- sp_object_read_attr(object, "max");
- sp_object_read_attr(object, "restart");
- sp_object_read_attr(object, "repeatCount");
- sp_object_read_attr(object, "repeatDur");
- sp_object_read_attr(object, "fill");
+ object->readAttr( "xlink:href" );
+ object->readAttr( "attributeName" );
+ object->readAttr( "attributeType" );
+ object->readAttr( "begin" );
+ object->readAttr( "dur" );
+ object->readAttr( "end" );
+ object->readAttr( "min" );
+ object->readAttr( "max" );
+ object->readAttr( "restart" );
+ object->readAttr( "repeatCount" );
+ object->readAttr( "repeatDur" );
+ object->readAttr( "fill" );
}
static void
@@ -176,15 +175,15 @@ sp_ianimation_build(SPObject *object, SPDocument *document, Inkscape::XML::Node
if (((SPObjectClass *) ianimation_parent_class)->build)
((SPObjectClass *) ianimation_parent_class)->build(object, document, repr);
- sp_object_read_attr(object, "calcMode");
- sp_object_read_attr(object, "values");
- sp_object_read_attr(object, "keyTimes");
- sp_object_read_attr(object, "keySplines");
- sp_object_read_attr(object, "from");
- sp_object_read_attr(object, "to");
- sp_object_read_attr(object, "by");
- sp_object_read_attr(object, "additive");
- sp_object_read_attr(object, "accumulate");
+ object->readAttr( "calcMode" );
+ object->readAttr( "values" );
+ object->readAttr( "keyTimes" );
+ object->readAttr( "keySplines" );
+ object->readAttr( "from" );
+ object->readAttr( "to" );
+ object->readAttr( "by" );
+ object->readAttr( "additive" );
+ object->readAttr( "accumulate" );
}
static void
diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp
index ab7660cab..310008713 100644
--- a/src/sp-clippath.cpp
+++ b/src/sp-clippath.cpp
@@ -1,10 +1,10 @@
-#define __SP_CLIPPATH_C__
-
/*
* SVG <clipPath> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2001-2002 authors
* Copyright (C) 2001 Ximian, Inc.
@@ -36,60 +36,47 @@ struct SPClipPathView {
NRRect bbox;
};
-static void sp_clippath_class_init(SPClipPathClass *klass);
-static void sp_clippath_init(SPClipPath *clippath);
-
-static void sp_clippath_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_clippath_release(SPObject * object);
-static void sp_clippath_set(SPObject *object, unsigned int key, gchar const *value);
-static void sp_clippath_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref);
-static void sp_clippath_update(SPObject *object, SPCtx *ctx, guint flags);
-static void sp_clippath_modified(SPObject *object, guint flags);
-static Inkscape::XML::Node *sp_clippath_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
SPClipPathView *sp_clippath_view_new_prepend(SPClipPathView *list, unsigned int key, NRArenaItem *arenaitem);
SPClipPathView *sp_clippath_view_list_remove(SPClipPathView *list, SPClipPathView *view);
-static SPObjectGroupClass *parent_class;
+SPObjectGroupClass * SPClipPathClass::static_parent_class = 0;
GType
-sp_clippath_get_type(void)
+SPClipPath::sp_clippath_get_type(void)
{
static GType type = 0;
if (!type) {
GTypeInfo info = {
sizeof(SPClipPathClass),
NULL, NULL,
- (GClassInitFunc) sp_clippath_class_init,
+ (GClassInitFunc) SPClipPathClass::sp_clippath_class_init,
NULL, NULL,
sizeof(SPClipPath),
16,
- (GInstanceInitFunc) sp_clippath_init,
- NULL, /* value_table */
+ (GInstanceInitFunc) SPClipPath::init,
+ NULL, /* value_table */
};
type = g_type_register_static(SP_TYPE_OBJECTGROUP, "SPClipPath", &info, (GTypeFlags)0);
}
return type;
}
-static void
-sp_clippath_class_init(SPClipPathClass *klass)
+void SPClipPathClass::sp_clippath_class_init(SPClipPathClass *klass)
{
SPObjectClass *sp_object_class = (SPObjectClass *) klass;
- parent_class = (SPObjectGroupClass*)g_type_class_ref(SP_TYPE_OBJECTGROUP);
+ static_parent_class = (SPObjectGroupClass*)g_type_class_ref(SP_TYPE_OBJECTGROUP);
- sp_object_class->build = sp_clippath_build;
- sp_object_class->release = sp_clippath_release;
- sp_object_class->set = sp_clippath_set;
- sp_object_class->child_added = sp_clippath_child_added;
- sp_object_class->update = sp_clippath_update;
- sp_object_class->modified = sp_clippath_modified;
- sp_object_class->write = sp_clippath_write;
+ sp_object_class->build = SPClipPath::build;
+ sp_object_class->release = SPClipPath::release;
+ sp_object_class->set = SPClipPath::set;
+ sp_object_class->child_added = SPClipPath::childAdded;
+ sp_object_class->update = SPClipPath::update;
+ sp_object_class->modified = SPClipPath::modified;
+ sp_object_class->write = SPClipPath::write;
}
-static void
-sp_clippath_init(SPClipPath *cp)
+void SPClipPath::init(SPClipPath *cp)
{
cp->clipPathUnits_set = FALSE;
cp->clipPathUnits = SP_CONTENT_UNITS_USERSPACEONUSE;
@@ -97,24 +84,22 @@ sp_clippath_init(SPClipPath *cp)
cp->display = NULL;
}
-static void
-sp_clippath_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+void SPClipPath::build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- if (((SPObjectClass *) parent_class)->build)
- ((SPObjectClass *) parent_class)->build(object, document, repr);
+ if (((SPObjectClass *) SPClipPathClass::static_parent_class)->build)
+ ((SPObjectClass *) SPClipPathClass::static_parent_class)->build(object, document, repr);
- sp_object_read_attr(object, "clipPathUnits");
+ object->readAttr( "clipPathUnits" );
/* Register ourselves */
- sp_document_add_resource(document, "clipPath", object);
+ document->addResource("clipPath", object);
}
-static void
-sp_clippath_release(SPObject * object)
+void SPClipPath::release(SPObject * object)
{
if (SP_OBJECT_DOCUMENT(object)) {
/* Unregister ourselves */
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "clipPath", object);
+ SP_OBJECT_DOCUMENT(object)->removeResource("clipPath", object);
}
SPClipPath *cp = SP_CLIPPATH(object);
@@ -123,18 +108,17 @@ sp_clippath_release(SPObject * object)
cp->display = sp_clippath_view_list_remove(cp->display, cp->display);
}
- if (((SPObjectClass *) (parent_class))->release) {
- ((SPObjectClass *) parent_class)->release(object);
+ if (((SPObjectClass *) (SPClipPathClass::static_parent_class))->release) {
+ ((SPObjectClass *) SPClipPathClass::static_parent_class)->release(object);
}
}
-static void
-sp_clippath_set(SPObject *object, unsigned int key, gchar const *value)
+void SPClipPath::set(SPObject *object, unsigned int key, gchar const *value)
{
SPClipPath *cp = SP_CLIPPATH(object);
switch (key) {
- case SP_ATTR_CLIPPATHUNITS:
+ case SP_ATTR_CLIPPATHUNITS:
cp->clipPathUnits = SP_CONTENT_UNITS_USERSPACEONUSE;
cp->clipPathUnits_set = FALSE;
if (value) {
@@ -147,26 +131,25 @@ sp_clippath_set(SPObject *object, unsigned int key, gchar const *value)
}
object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
break;
- default:
- if (((SPObjectClass *) parent_class)->set)
- ((SPObjectClass *) parent_class)->set(object, key, value);
+ default:
+ if (((SPObjectClass *) SPClipPathClass::static_parent_class)->set) {
+ ((SPObjectClass *) SPClipPathClass::static_parent_class)->set(object, key, value);
+ }
break;
}
}
-static void
-sp_clippath_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
+void SPClipPath::childAdded(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
{
/* Invoke SPObjectGroup implementation */
- ((SPObjectClass *) (parent_class))->child_added(object, child, ref);
+ ((SPObjectClass *) (SPClipPathClass::static_parent_class))->child_added(object, child, ref);
/* Show new object */
SPObject *ochild = SP_OBJECT_DOCUMENT(object)->getObjectByRepr(child);
if (SP_IS_ITEM(ochild)) {
SPClipPath *cp = SP_CLIPPATH(object);
for (SPClipPathView *v = cp->display; v != NULL; v = v->next) {
- NRArenaItem *ac = sp_item_invoke_show(SP_ITEM(ochild),
- NR_ARENA_ITEM_ARENA(v->arenaitem),
+ NRArenaItem *ac = SP_ITEM(ochild)->invoke_show( NR_ARENA_ITEM_ARENA(v->arenaitem),
v->key,
SP_ITEM_REFERENCE_FLAGS);
if (ac) {
@@ -176,8 +159,7 @@ sp_clippath_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::
}
}
-static void
-sp_clippath_update(SPObject *object, SPCtx *ctx, guint flags)
+void SPClipPath::update(SPObject *object, SPCtx *ctx, guint flags)
{
if (flags & SP_OBJECT_MODIFIED_FLAG) {
flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
@@ -187,7 +169,7 @@ sp_clippath_update(SPObject *object, SPCtx *ctx, guint flags)
SPObjectGroup *og = SP_OBJECTGROUP(object);
GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(SP_OBJECT(og)); child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for ( SPObject *child = og->firstChild(); child; child = child->getNext()) {
g_object_ref(G_OBJECT(child));
l = g_slist_prepend(l, child);
}
@@ -214,8 +196,7 @@ sp_clippath_update(SPObject *object, SPCtx *ctx, guint flags)
}
}
-static void
-sp_clippath_modified(SPObject *object, guint flags)
+void SPClipPath::modified(SPObject *object, guint flags)
{
if (flags & SP_OBJECT_MODIFIED_FLAG) {
flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
@@ -225,7 +206,7 @@ sp_clippath_modified(SPObject *object, guint flags)
SPObjectGroup *og = SP_OBJECTGROUP(object);
GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(SP_OBJECT(og)); child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for (SPObject *child = og->firstChild(); child; child = child->getNext()) {
g_object_ref(G_OBJECT(child));
l = g_slist_prepend(l, child);
}
@@ -240,33 +221,30 @@ sp_clippath_modified(SPObject *object, guint flags)
}
}
-static Inkscape::XML::Node *
-sp_clippath_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+Inkscape::XML::Node *SPClipPath::write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
repr = xml_doc->createElement("svg:clipPath");
}
- if (((SPObjectClass *) (parent_class))->write)
- ((SPObjectClass *) (parent_class))->write(object, xml_doc, repr, flags);
+ if (((SPObjectClass *) (SPClipPathClass::static_parent_class))->write) {
+ ((SPObjectClass *) (SPClipPathClass::static_parent_class))->write(object, xml_doc, repr, flags);
+ }
return repr;
}
-NRArenaItem *
-sp_clippath_show(SPClipPath *cp, NRArena *arena, unsigned int key)
+NRArenaItem *SPClipPath::show(NRArena *arena, unsigned int key)
{
- g_return_val_if_fail(cp != NULL, NULL);
- g_return_val_if_fail(SP_IS_CLIPPATH(cp), NULL);
g_return_val_if_fail(arena != NULL, NULL);
g_return_val_if_fail(NR_IS_ARENA(arena), NULL);
NRArenaItem *ai = NRArenaGroup::create(arena);
- cp->display = sp_clippath_view_new_prepend(cp->display, key, ai);
+ display = sp_clippath_view_new_prepend(display, key, ai);
- for (SPObject *child = sp_object_first_child(SP_OBJECT(cp)) ; child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for ( SPObject *child = firstChild() ; child ; child = child->getNext() ) {
if (SP_IS_ITEM(child)) {
- NRArenaItem *ac = sp_item_invoke_show(SP_ITEM(child), arena, key, SP_ITEM_REFERENCE_FLAGS);
+ NRArenaItem *ac = SP_ITEM(child)->invoke_show(arena, key, SP_ITEM_REFERENCE_FLAGS);
if (ac) {
/* The order is not important in clippath */
nr_arena_item_add_child(ai, ac, NULL);
@@ -274,32 +252,28 @@ sp_clippath_show(SPClipPath *cp, NRArena *arena, unsigned int key)
}
}
- if (cp->clipPathUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) {
- Geom::Matrix t(Geom::Scale(cp->display->bbox.x1 - cp->display->bbox.x0, cp->display->bbox.y1 - cp->display->bbox.y0));
- t[4] = cp->display->bbox.x0;
- t[5] = cp->display->bbox.y0;
+ if (clipPathUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) {
+ Geom::Matrix t(Geom::Scale(display->bbox.x1 - display->bbox.x0, display->bbox.y1 - display->bbox.y0));
+ t[4] = display->bbox.x0;
+ t[5] = display->bbox.y0;
nr_arena_group_set_child_transform(NR_ARENA_GROUP(ai), &t);
}
return ai;
}
-void
-sp_clippath_hide(SPClipPath *cp, unsigned int key)
+void SPClipPath::hide(unsigned int key)
{
- g_return_if_fail(cp != NULL);
- g_return_if_fail(SP_IS_CLIPPATH(cp));
-
- for (SPObject *child = sp_object_first_child(SP_OBJECT(cp)) ; child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for ( SPObject *child = firstChild() ; child; child = child->getNext() ) {
if (SP_IS_ITEM(child)) {
- sp_item_invoke_hide(SP_ITEM(child), key);
+ SP_ITEM(child)->invoke_hide(key);
}
}
- for (SPClipPathView *v = cp->display; v != NULL; v = v->next) {
+ for (SPClipPathView *v = display; v != NULL; v = v->next) {
if (v->key == key) {
/* We simply unref and let item to manage this in handler */
- cp->display = sp_clippath_view_list_remove(cp->display, v);
+ display = sp_clippath_view_list_remove(display, v);
return;
}
}
@@ -307,10 +281,9 @@ sp_clippath_hide(SPClipPath *cp, unsigned int key)
g_assert_not_reached();
}
-void
-sp_clippath_set_bbox(SPClipPath *cp, unsigned int key, NRRect *bbox)
+void SPClipPath::setBBox(unsigned int key, NRRect *bbox)
{
- for (SPClipPathView *v = cp->display; v != NULL; v = v->next) {
+ for (SPClipPathView *v = display; v != NULL; v = v->next) {
if (v->key == key) {
if (!Geom::are_near(v->bbox.x0, bbox->x0) ||
!Geom::are_near(v->bbox.y0, bbox->y0) ||
@@ -323,24 +296,26 @@ sp_clippath_set_bbox(SPClipPath *cp, unsigned int key, NRRect *bbox)
}
}
-void
-sp_clippath_get_bbox(SPClipPath *cp, NRRect *bbox, Geom::Matrix const &transform, unsigned const /*flags*/)
+void SPClipPath::getBBox(NRRect *bbox, Geom::Matrix const &transform, unsigned const /*flags*/)
{
- SPObject *i;
- for (i = sp_object_first_child(SP_OBJECT(cp)); i && !SP_IS_ITEM(i); i = SP_OBJECT_NEXT(i)){};
- if (!i) return;
+ SPObject *i = 0;
+ for (i = firstChild(); i && !SP_IS_ITEM(i); i = i->getNext()) {
+ }
+ if (!i) {
+ return;
+ }
- sp_item_invoke_bbox_full(SP_ITEM(i), bbox, Geom::Matrix(SP_ITEM(i)->transform) * transform, SPItem::GEOMETRIC_BBOX, FALSE);
+ SP_ITEM(i)->invoke_bbox_full( bbox, Geom::Matrix(SP_ITEM(i)->transform) * transform, SPItem::GEOMETRIC_BBOX, FALSE);
SPObject *i_start = i;
while (i != NULL) {
if (i != i_start) {
NRRect i_box;
- sp_item_invoke_bbox_full(SP_ITEM(i), &i_box, Geom::Matrix(SP_ITEM(i)->transform) * transform, SPItem::GEOMETRIC_BBOX, FALSE);
+ SP_ITEM(i)->invoke_bbox_full( &i_box, Geom::Matrix(SP_ITEM(i)->transform) * transform, SPItem::GEOMETRIC_BBOX, FALSE);
nr_rect_d_union (bbox, bbox, &i_box);
}
- i = SP_OBJECT_NEXT(i);
- for (; i && !SP_IS_ITEM(i); i = SP_OBJECT_NEXT(i)){};
+ i = i->getNext();
+ for (; i && !SP_IS_ITEM(i); i = i->getNext()){};
}
}
@@ -379,12 +354,11 @@ sp_clippath_view_list_remove(SPClipPathView *list, SPClipPathView *view)
}
// Create a mask element (using passed elements), add it to <defs>
-const gchar *
-sp_clippath_create (GSList *reprs, SPDocument *document, Geom::Matrix const* applyTransform)
+const gchar *SPClipPath::create (GSList *reprs, SPDocument *document, Geom::Matrix const* applyTransform)
{
Inkscape::XML::Node *defsrepr = SP_OBJECT_REPR (SP_DOCUMENT_DEFS (document));
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:clipPath");
repr->setAttribute("clipPathUnits", "userSpaceOnUse");
@@ -399,7 +373,7 @@ sp_clippath_create (GSList *reprs, SPDocument *document, Geom::Matrix const* app
if (NULL != applyTransform) {
Geom::Matrix transform (item->transform);
transform *= (*applyTransform);
- sp_item_write_transform(item, SP_OBJECT_REPR(item), transform);
+ item->doWriteTransform(SP_OBJECT_REPR(item), transform);
}
}
diff --git a/src/sp-clippath.h b/src/sp-clippath.h
index 02395f3d2..a622df1f6 100644
--- a/src/sp-clippath.h
+++ b/src/sp-clippath.h
@@ -1,11 +1,13 @@
-#ifndef __SP_CLIPPATH_H__
-#define __SP_CLIPPATH_H__
+#ifndef SEEN_SP_CLIPPATH_H
+#define SEEN_SP_CLIPPATH_H
/*
* SVG <clipPath> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2001-2002 authors
* Copyright (C) 2001 Ximian, Inc.
@@ -13,11 +15,11 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#define SP_TYPE_CLIPPATH (sp_clippath_get_type ())
-#define SP_CLIPPATH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_CLIPPATH, SPClipPath))
-#define SP_CLIPPATH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_CLIPPATH, SPClipPathClass))
-#define SP_IS_CLIPPATH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_CLIPPATH))
-#define SP_IS_CLIPPATH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_CLIPPATH))
+#define SP_TYPE_CLIPPATH (SPClipPath::sp_clippath_get_type())
+#define SP_CLIPPATH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_CLIPPATH, SPClipPath))
+#define SP_CLIPPATH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_CLIPPATH, SPClipPathClass))
+#define SP_IS_CLIPPATH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_CLIPPATH))
+#define SP_IS_CLIPPATH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_CLIPPATH))
class SPClipPathView;
@@ -27,27 +29,55 @@ class SPClipPathView;
#include "uri-references.h"
#include "xml/node.h"
-struct SPClipPath : public SPObjectGroup {
- class Reference;
+class SPClipPath : public SPObjectGroup {
+public:
+ class Reference;
- unsigned int clipPathUnits_set : 1;
- unsigned int clipPathUnits : 1;
+ unsigned int clipPathUnits_set : 1;
+ unsigned int clipPathUnits : 1;
- SPClipPathView *display;
-};
+ SPClipPathView *display;
+ static const gchar *create(GSList *reprs, SPDocument *document, Geom::Matrix const* applyTransform);
+ static GType sp_clippath_get_type(void);
+
+ NRArenaItem *show(NRArena *arena, unsigned int key);
+ void hide(unsigned int key);
+
+ void setBBox(unsigned int key, NRRect *bbox);
+ void getBBox(NRRect *bbox, Geom::Matrix const &transform, unsigned const flags);
-struct SPClipPathClass {
- SPObjectGroupClass parent_class;
+private:
+ static void init(SPClipPath *clippath);
+
+ static void build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+ static void release(SPObject * object);
+ static void set(SPObject *object, unsigned int key, gchar const *value);
+ static void childAdded(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref);
+ static void update(SPObject *object, SPCtx *ctx, guint flags);
+ static void modified(SPObject *object, guint flags);
+ static Inkscape::XML::Node *write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+ friend class SPClipPathClass;
};
-GType sp_clippath_get_type (void);
+class SPClipPathClass {
+public:
+ SPObjectGroupClass parent_class;
+
+private:
+ static void sp_clippath_class_init(SPClipPathClass *klass);
+ static SPObjectGroupClass *static_parent_class;
+
+ friend class SPClipPath;
+};
class SPClipPathReference : public Inkscape::URIReference {
public:
- SPClipPathReference(SPObject *obj) : URIReference(obj) {}
- SPClipPath *getObject() const {
- return (SPClipPath *)URIReference::getObject();
- }
+ SPClipPathReference(SPObject *obj) : URIReference(obj) {}
+ SPClipPath *getObject() const {
+ return (SPClipPath *)URIReference::getObject();
+ }
+
protected:
/**
* If the owner element of this reference (the element with <... clippath="...">)
@@ -55,14 +85,16 @@ protected:
* \return false if obj is not a clippath or if obj is a parent of this
* reference's owner element. True otherwise.
*/
- virtual bool _acceptObject(SPObject *obj) const {
- if (!SP_IS_CLIPPATH(obj)) {
- return false;
- }
- SPObject * const owner = this->getOwner();
+ virtual bool _acceptObject(SPObject *obj) const {
+ if (!SP_IS_CLIPPATH(obj)) {
+ return false;
+ }
+ SPObject * const owner = this->getOwner();
if (obj->isAncestorOf(owner)) {
- Inkscape::XML::Node * const owner_repr = owner->repr;
- Inkscape::XML::Node * const obj_repr = obj->repr;
+ //XML Tree being used directly here while it shouldn't be...
+ Inkscape::XML::Node * const owner_repr = owner->getRepr();
+ //XML Tree being used directly here while it shouldn't be...
+ Inkscape::XML::Node * const obj_repr = obj->getRepr();
gchar const * owner_name = NULL;
gchar const * owner_clippath = NULL;
gchar const * obj_name = NULL;
@@ -82,15 +114,18 @@ protected:
return false;
}
return true;
- }
+ }
};
-NRArenaItem *sp_clippath_show(SPClipPath *cp, NRArena *arena, unsigned int key);
-void sp_clippath_hide(SPClipPath *cp, unsigned int key);
-
-void sp_clippath_set_bbox(SPClipPath *cp, unsigned int key, NRRect *bbox);
-void sp_clippath_get_bbox(SPClipPath *cp, NRRect *bbox, Geom::Matrix const &transform, unsigned const flags);
+#endif // SEEN_SP_CLIPPATH_H
-const gchar *sp_clippath_create (GSList *reprs, SPDocument *document, Geom::Matrix const* applyTransform);
-
-#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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/sp-conn-end-pair.cpp b/src/sp-conn-end-pair.cpp
index 7f019979a..0a5a6d7bd 100644
--- a/src/sp-conn-end-pair.cpp
+++ b/src/sp-conn-end-pair.cpp
@@ -4,6 +4,7 @@
* Authors:
* Peter Moulder <pmoulder@mail.csse.monash.edu.au>
* Michael Wybrow <mjwybrow@users.sourceforge.net>
+ * Abhishek Sharma
*
* * Copyright (C) 2004-2005 Monash University
*
@@ -79,12 +80,12 @@ SPConnEndPair::release()
void
sp_conn_end_pair_build(SPObject *object)
{
- sp_object_read_attr(object, "inkscape:connector-type");
- sp_object_read_attr(object, "inkscape:connection-start");
- sp_object_read_attr(object, "inkscape:connection-start-point");
- sp_object_read_attr(object, "inkscape:connection-end");
- sp_object_read_attr(object, "inkscape:connection-end-point");
- sp_object_read_attr(object, "inkscape:connector-curvature");
+ object->readAttr( "inkscape:connector-type" );
+ object->readAttr( "inkscape:connection-start" );
+ object->readAttr( "inkscape:connection-start-point" );
+ object->readAttr( "inkscape:connection-end" );
+ object->readAttr( "inkscape:connection-end-point" );
+ object->readAttr( "inkscape:connector-curvature" );
}
@@ -405,7 +406,7 @@ SPConnEndPair::reroutePathFromLibavoid(void)
recreateCurve( curve, _connRef, _connCurvature );
- Geom::Matrix doc2item = sp_item_i2doc_affine(SP_ITEM(_path)).inverse();
+ Geom::Matrix doc2item = SP_ITEM(_path)->i2doc_affine().inverse();
curve->transform(doc2item);
return true;
diff --git a/src/sp-conn-end.cpp b/src/sp-conn-end.cpp
index 33ef98b76..e97b6f4ec 100644
--- a/src/sp-conn-end.cpp
+++ b/src/sp-conn-end.cpp
@@ -65,7 +65,7 @@ static bool try_get_intersect_point_with_item_recursive(Geom::PathVector& conn_p
if (!SP_IS_SHAPE(item)) return false;
// make sure it has an associated curve
- SPCurve* item_curve = sp_shape_get_curve(SP_SHAPE(item));
+ SPCurve* item_curve = SP_SHAPE(item)->getCurve();
if (!item_curve) return false;
// apply transformations (up to common ancestor)
diff --git a/src/sp-defs.cpp b/src/sp-defs.cpp
index aa0cb0be7..2737b3f5c 100644
--- a/src/sp-defs.cpp
+++ b/src/sp-defs.cpp
@@ -1,10 +1,10 @@
-#define __SP_DEFS_C__
-
/*
* SVG <defs> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2000-2002 authors
*
@@ -20,32 +20,24 @@
#include "xml/repr.h"
#include "document.h"
-static void sp_defs_class_init(SPDefsClass *dc);
-static void sp_defs_init(SPDefs *defs);
-
-static void sp_defs_release(SPObject *object);
-static void sp_defs_update(SPObject *object, SPCtx *ctx, guint flags);
-static void sp_defs_modified(SPObject *object, guint flags);
-static Inkscape::XML::Node *sp_defs_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static SPObjectClass *parent_class;
+SPObjectClass * SPDefsClass::static_parent_class = 0;
-GType sp_defs_get_type(void)
+GType SPDefs::sp_defs_get_type(void)
{
static GType defs_type = 0;
if (!defs_type) {
GTypeInfo defs_info = {
sizeof(SPDefsClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) sp_defs_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) SPDefsClass::sp_defs_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
sizeof(SPDefs),
- 16, /* n_preallocs */
- (GInstanceInitFunc) sp_defs_init,
- NULL, /* value_table */
+ 16, /* n_preallocs */
+ (GInstanceInitFunc) init,
+ NULL, /* value_table */
};
defs_type = g_type_register_static(SP_TYPE_OBJECT, "SPDefs", &defs_info, (GTypeFlags) 0);
}
@@ -53,30 +45,30 @@ GType sp_defs_get_type(void)
return defs_type;
}
-static void sp_defs_class_init(SPDefsClass *dc)
+void SPDefsClass::sp_defs_class_init(SPDefsClass *dc)
{
- parent_class = (SPObjectClass *) g_type_class_ref(SP_TYPE_OBJECT);
+ static_parent_class = (SPObjectClass *) g_type_class_ref(SP_TYPE_OBJECT);
SPObjectClass *sp_object_class = (SPObjectClass *) dc;
- sp_object_class->release = sp_defs_release;
- sp_object_class->update = sp_defs_update;
- sp_object_class->modified = sp_defs_modified;
- sp_object_class->write = sp_defs_write;
+ sp_object_class->release = SPDefs::release;
+ sp_object_class->update = SPDefs::update;
+ sp_object_class->modified = SPDefs::modified;
+ sp_object_class->write = SPDefs::write;
}
-static void sp_defs_init(SPDefs */*defs*/)
+void SPDefs::init(SPDefs */*defs*/)
{
}
-static void sp_defs_release(SPObject *object)
+void SPDefs::release(SPObject *object)
{
- if (((SPObjectClass *) (parent_class))->release) {
- ((SPObjectClass *) (parent_class))->release(object);
+ if (((SPObjectClass *) (SPDefsClass::static_parent_class))->release) {
+ ((SPObjectClass *) (SPDefsClass::static_parent_class))->release(object);
}
}
-static void sp_defs_update(SPObject *object, SPCtx *ctx, guint flags)
+void SPDefs::update(SPObject *object, SPCtx *ctx, guint flags)
{
if (flags & SP_OBJECT_MODIFIED_FLAG) {
flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
@@ -95,7 +87,7 @@ static void sp_defs_update(SPObject *object, SPCtx *ctx, guint flags)
}
}
-static void sp_defs_modified(SPObject *object, guint flags)
+void SPDefs::modified(SPObject *object, guint flags)
{
if (flags & SP_OBJECT_MODIFIED_FLAG) {
flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
@@ -104,7 +96,7 @@ static void sp_defs_modified(SPObject *object, guint flags)
flags &= SP_OBJECT_MODIFIED_CASCADE;
GSList *l = NULL;
- for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
g_object_ref(G_OBJECT(child));
l = g_slist_prepend(l, child);
}
@@ -117,11 +109,11 @@ static void sp_defs_modified(SPObject *object, guint flags)
if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
child->emitModified(flags);
}
- g_object_unref(G_OBJECT (child));
+ g_object_unref( G_OBJECT(child) );
}
}
-static Inkscape::XML::Node *sp_defs_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+Inkscape::XML::Node * SPDefs::write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
if (flags & SP_OBJECT_WRITE_BUILD) {
@@ -130,9 +122,11 @@ static Inkscape::XML::Node *sp_defs_write(SPObject *object, Inkscape::XML::Docum
}
GSList *l = NULL;
- for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
- if (crepr) l = g_slist_prepend(l, crepr);
+ if (crepr) {
+ l = g_slist_prepend(l, crepr);
+ }
}
while (l) {
@@ -142,13 +136,13 @@ static Inkscape::XML::Node *sp_defs_write(SPObject *object, Inkscape::XML::Docum
}
} else {
- for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
child->updateRepr(flags);
}
}
- if (((SPObjectClass *) (parent_class))->write) {
- (* ((SPObjectClass *) (parent_class))->write)(object, xml_doc, repr, flags);
+ if (((SPObjectClass *) (SPDefsClass::static_parent_class))->write) {
+ (* ((SPObjectClass *) (SPDefsClass::static_parent_class))->write)(object, xml_doc, repr, flags);
}
return repr;
diff --git a/src/sp-defs.h b/src/sp-defs.h
index 4b6f7a5b7..83003f4ad 100644
--- a/src/sp-defs.h
+++ b/src/sp-defs.h
@@ -6,6 +6,7 @@
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 2000-2002 authors
*
@@ -14,23 +15,39 @@
#include "sp-object.h"
-#define SP_TYPE_DEFS (sp_defs_get_type())
+#define SP_TYPE_DEFS (SPDefs::sp_defs_get_type())
#define SP_DEFS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_DEFS, SPDefs))
#define SP_DEFS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_DEFS, SPDefsClass))
#define SP_IS_DEFS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_DEFS))
#define SP_IS_DEFS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_DEFS))
-struct SPDefs : public SPObject {
+class SPDefs : public SPObject {
+public:
+ static GType sp_defs_get_type(void);
+
+private:
+ static void init(SPDefs *defs);
+ static void release(SPObject *object);
+ static void update(SPObject *object, SPCtx *ctx, guint flags);
+ static void modified(SPObject *object, guint flags);
+ static Inkscape::XML::Node *write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+ friend class SPDefsClass;
};
-struct SPDefsClass {
+class SPDefsClass {
+public:
SPObjectClass parent_class;
-};
-GType sp_defs_get_type(void);
+private:
+ static void sp_defs_class_init(SPDefsClass *dc);
+ static SPObjectClass *static_parent_class;
+
+ friend class SPDefs;
+};
-#endif /* !SEEN_SP_DEFS_H */
+#endif // !SEEN_SP_DEFS_H
/*
Local Variables:
diff --git a/src/sp-ellipse.cpp b/src/sp-ellipse.cpp
index 964ab48b1..5d17b0206 100644
--- a/src/sp-ellipse.cpp
+++ b/src/sp-ellipse.cpp
@@ -1,5 +1,3 @@
-#define __SP_ELLIPSE_C__
-
/*
* SVG <ellipse> and related implementations
*
@@ -7,6 +5,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Mitsuru Oka
* bulia byak <buliabyak@users.sf.net>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -152,7 +151,7 @@ sp_genericellipse_update(SPObject *object, SPCtx *ctx, guint flags)
ellipse->cy.update(em, ex, dy);
ellipse->rx.update(em, ex, dr);
ellipse->ry.update(em, ex, dr);
- sp_shape_set_shape((SPShape *) object);
+ static_cast<SPShape *>(object)->setShape();
}
}
@@ -190,7 +189,7 @@ static void sp_genericellipse_set_shape(SPShape *shape)
// unconditionally read the curve from d, if any, to preserve appearance
Geom::PathVector pv = sp_svg_read_pathv(SP_OBJECT_REPR(shape)->attribute("d"));
SPCurve *cold = new SPCurve(pv);
- sp_shape_set_curve_insync (shape, cold, TRUE);
+ shape->setCurveInsync( cold, TRUE);
cold->unref();
}
return;
@@ -257,12 +256,12 @@ static void sp_genericellipse_set_shape(SPShape *shape)
/* 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);
+ shape->setCurveInsync( 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);
+ shape->setCurveInsync( c_lpe, TRUE);
}
c_lpe->unref();
}
@@ -281,7 +280,7 @@ static void sp_genericellipse_snappoints(SPItem const *item, std::vector<Inkscap
SPGenericEllipse *ellipse = SP_GENERICELLIPSE(item);
sp_genericellipse_normalize(ellipse);
- Geom::Matrix const i2d = sp_item_i2d_affine(item);
+ Geom::Matrix const i2d = item->i2d_affine();
// figure out if we have a slice, while guarding against rounding errors
bool slice = false;
@@ -433,10 +432,10 @@ sp_ellipse_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *re
if (((SPObjectClass *) ellipse_parent_class)->build)
(* ((SPObjectClass *) ellipse_parent_class)->build) (object, document, repr);
- sp_object_read_attr(object, "cx");
- sp_object_read_attr(object, "cy");
- sp_object_read_attr(object, "rx");
- sp_object_read_attr(object, "ry");
+ object->readAttr( "cx" );
+ object->readAttr( "cy" );
+ object->readAttr( "rx" );
+ object->readAttr( "ry" );
}
static Inkscape::XML::Node *
@@ -581,9 +580,9 @@ sp_circle_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
if (((SPObjectClass *) circle_parent_class)->build)
(* ((SPObjectClass *) circle_parent_class)->build)(object, document, repr);
- sp_object_read_attr(object, "cx");
- sp_object_read_attr(object, "cy");
- sp_object_read_attr(object, "r");
+ object->readAttr( "cx" );
+ object->readAttr( "cy" );
+ object->readAttr( "r" );
}
static Inkscape::XML::Node *
@@ -706,14 +705,14 @@ sp_arc_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
if (((SPObjectClass *) arc_parent_class)->build)
(* ((SPObjectClass *) arc_parent_class)->build) (object, document, repr);
- sp_object_read_attr(object, "sodipodi:cx");
- sp_object_read_attr(object, "sodipodi:cy");
- sp_object_read_attr(object, "sodipodi:rx");
- sp_object_read_attr(object, "sodipodi:ry");
+ object->readAttr( "sodipodi:cx" );
+ object->readAttr( "sodipodi:cy" );
+ object->readAttr( "sodipodi:rx" );
+ object->readAttr( "sodipodi:ry" );
- sp_object_read_attr(object, "sodipodi:start");
- sp_object_read_attr(object, "sodipodi:end");
- sp_object_read_attr(object, "sodipodi:open");
+ object->readAttr( "sodipodi:start" );
+ object->readAttr( "sodipodi:end" );
+ object->readAttr( "sodipodi:open" );
}
/*
@@ -855,7 +854,7 @@ static void
sp_arc_modified(SPObject *object, guint flags)
{
if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
- sp_shape_set_shape((SPShape *) object);
+ ((SPShape *) object)->setShape();
}
if (((SPObjectClass *) arc_parent_class)->modified)
diff --git a/src/sp-filter-primitive.cpp b/src/sp-filter-primitive.cpp
index 265c72b14..30eda7159 100644
--- a/src/sp-filter-primitive.cpp
+++ b/src/sp-filter-primitive.cpp
@@ -1,5 +1,3 @@
-#define __SP_FILTER_PRIMITIVE_CPP__
-
/** \file
* Superclass for all the filter primitives
*
@@ -8,6 +6,7 @@
* Authors:
* Kees Cook <kees@outflux.net>
* Niko Kiirala <niko@kiirala.com>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2007 Authors
*
@@ -99,8 +98,8 @@ sp_filter_primitive_build(SPObject *object, SPDocument *document, Inkscape::XML:
((SPObjectClass *) filter_primitive_parent_class)->build(object, document, repr);
}
- sp_object_read_attr(object, "in");
- sp_object_read_attr(object, "result");
+ object->readAttr( "in" );
+ object->readAttr( "result" );
}
/**
@@ -164,8 +163,8 @@ sp_filter_primitive_update(SPObject *object, SPCtx *ctx, guint flags)
//SPFilterPrimitive *filter_primitive = SP_FILTER_PRIMITIVE(object);
if (flags & SP_OBJECT_MODIFIED_FLAG) {
- sp_object_read_attr(object, "in");
- sp_object_read_attr(object, "result");
+ object->readAttr( "in" );
+ object->readAttr( "result" );
}
if (((SPObjectClass *) filter_primitive_parent_class)->update) {
@@ -259,7 +258,8 @@ int sp_filter_primitive_name_previous_out(SPFilterPrimitive *prim) {
Glib::ustring name = sp_filter_get_new_result_name(parent);
int slot = sp_filter_set_image_name(parent, name.c_str());
i_prim->image_out = slot;
- i_prim->repr->setAttribute("result", name.c_str());
+ //XML Tree is being directly used while it shouldn't be.
+ i_prim->getRepr()->setAttribute("result", name.c_str());
return slot;
} else {
return i_prim->image_out;
diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp
index f362b7f2b..ce752f603 100644
--- a/src/sp-filter.cpp
+++ b/src/sp-filter.cpp
@@ -1,5 +1,3 @@
-#define __SP_FILTER_CPP__
-
/** \file
* SVG <filter> implementation.
*/
@@ -7,6 +5,8 @@
* Authors:
* Hugo Rodrigues <haa.rodrigues@gmail.com>
* Niko Kiirala <niko@kiirala.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006,2007 Authors
*
@@ -137,17 +137,17 @@ sp_filter_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
}
//Read values of key attributes from XML nodes into object.
- sp_object_read_attr(object, "filterUnits");
- sp_object_read_attr(object, "primitiveUnits");
- 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, "filterRes");
- sp_object_read_attr(object, "xlink:href");
+ object->readAttr( "filterUnits" );
+ object->readAttr( "primitiveUnits" );
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "width" );
+ object->readAttr( "height" );
+ object->readAttr( "filterRes" );
+ object->readAttr( "xlink:href" );
//is this necessary?
- sp_document_add_resource(document, "filter", object);
+ document->addResource("filter", object);
}
/**
@@ -160,7 +160,7 @@ sp_filter_release(SPObject *object)
if (SP_OBJECT_DOCUMENT(object)) {
/* Unregister ourselves */
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "filter", SP_OBJECT(object));
+ SP_OBJECT_DOCUMENT(object)->removeResource("filter", SP_OBJECT(object));
}
//TODO: release resources here
@@ -285,19 +285,18 @@ static Inkscape::XML::Node *
sp_filter_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
{
SPFilter *filter = SP_FILTER(object);
- SPObject *child;
- Inkscape::XML::Node *crepr;
- /* Original from sp-item-group.cpp */
+ // Original from sp-item-group.cpp
if (flags & SP_OBJECT_WRITE_BUILD) {
- GSList *l;
if (!repr) {
repr = doc->createElement("svg:filter");
}
- l = NULL;
- for (child = sp_object_first_child(object); child != NULL; child = SP_OBJECT_NEXT(child) ) {
- crepr = child->updateRepr(doc, NULL, flags);
- if (crepr) l = g_slist_prepend (l, crepr);
+ GSList *l = NULL;
+ for ( SPObject *child = object->firstChild(); child; child = child->getNext() ) {
+ Inkscape::XML::Node *crepr = child->updateRepr(doc, NULL, flags);
+ if (crepr) {
+ l = g_slist_prepend (l, crepr);
+ }
}
while (l) {
repr->addChild((Inkscape::XML::Node *) l->data, NULL);
@@ -305,7 +304,7 @@ sp_filter_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::N
l = g_slist_remove (l, l->data);
}
} else {
- for (child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
child->updateRepr(flags);
}
}
diff --git a/src/sp-flowdiv.cpp b/src/sp-flowdiv.cpp
index 1b0a395e0..c3ff96a7d 100644
--- a/src/sp-flowdiv.cpp
+++ b/src/sp-flowdiv.cpp
@@ -1,5 +1,3 @@
-#define __SP_FLOWDIV_C__
-
/*
*/
@@ -113,66 +111,69 @@ sp_flowdiv_release (SPObject *object)
if (((SPObjectClass *) flowdiv_parent_class)->release)
((SPObjectClass *) flowdiv_parent_class)->release (object);
}
-static void
-sp_flowdiv_update (SPObject *object, SPCtx *ctx, unsigned int flags)
-{
- SPItemCtx *ictx=(SPItemCtx *) ctx;
- SPItemCtx cctx=*ictx;
-
- if (((SPObjectClass *) (flowdiv_parent_class))->update)
- ((SPObjectClass *) (flowdiv_parent_class))->update (object, ctx, flags);
-
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
- GSList* l = NULL;
- for (SPObject *child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- SPObject *child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- if (SP_IS_ITEM (child)) {
- SPItem const &chi = *SP_ITEM(child);
- cctx.i2doc = chi.transform * ictx->i2doc;
- cctx.i2vp = chi.transform * ictx->i2vp;
- child->updateDisplay((SPCtx *)&cctx, flags);
- } else {
- child->updateDisplay(ctx, flags);
- }
- }
- g_object_unref (G_OBJECT (child));
- }
-}
-static void
-sp_flowdiv_modified (SPObject *object, guint flags)
-{
- SPObject *child;
- GSList *l;
-
- if (((SPObjectClass *) (flowdiv_parent_class))->modified)
- ((SPObjectClass *) (flowdiv_parent_class))->modified (object, flags);
-
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
-
- l = NULL;
- for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- child->emitModified(flags);
- }
- g_object_unref (G_OBJECT (child));
- }
+static void sp_flowdiv_update(SPObject *object, SPCtx *ctx, unsigned int flags)
+{
+ SPItemCtx *ictx = reinterpret_cast<SPItemCtx *>(ctx);
+ SPItemCtx cctx = *ictx;
+
+ if (((SPObjectClass *) (flowdiv_parent_class))->update) {
+ ((SPObjectClass *) (flowdiv_parent_class))->update(object, ctx, flags);
+ }
+
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
+
+ GSList* l = NULL;
+ for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ g_object_ref( G_OBJECT(child) );
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse(l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ if (SP_IS_ITEM(child)) {
+ SPItem const &chi = *SP_ITEM(child);
+ cctx.i2doc = chi.transform * ictx->i2doc;
+ cctx.i2vp = chi.transform * ictx->i2vp;
+ child->updateDisplay((SPCtx *)&cctx, flags);
+ } else {
+ child->updateDisplay(ctx, flags);
+ }
+ }
+ g_object_unref( G_OBJECT(child) );
+ }
+}
+
+static void sp_flowdiv_modified (SPObject *object, guint flags)
+{
+ if (((SPObjectClass *) (flowdiv_parent_class))->modified) {
+ ((SPObjectClass *) (flowdiv_parent_class))->modified(object, flags);
+ }
+
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
+
+ GSList *l = NULL;
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ g_object_ref( G_OBJECT(child) );
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse (l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ child->emitModified(flags);
+ }
+ g_object_unref( G_OBJECT(child) );
+ }
}
static void
@@ -184,53 +185,55 @@ sp_flowdiv_build (SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
((SPObjectClass *) flowdiv_parent_class)->build (object, doc, repr);
}
-static void
-sp_flowdiv_set (SPObject *object, unsigned int key, const gchar *value)
-{
- if (((SPObjectClass *) flowdiv_parent_class)->set)
- (((SPObjectClass *) flowdiv_parent_class)->set) (object, key, value);
-}
-
-static Inkscape::XML::Node *
-sp_flowdiv_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
-{
-// SPFlowdiv *group = SP_FLOWDIV (object);
-
- if ( flags&SP_OBJECT_WRITE_BUILD ) {
- if ( repr == NULL ) repr = xml_doc->createElement("svg:flowDiv");
- GSList *l = NULL;
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- Inkscape::XML::Node* c_repr=NULL;
- if ( SP_IS_FLOWTSPAN (child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_FLOWPARA(child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_STRING(child) ) {
- c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
- }
- if ( c_repr ) l = g_slist_prepend (l, c_repr);
- }
- while ( l ) {
- repr->addChild((Inkscape::XML::Node *) l->data, NULL);
- Inkscape::GC::release((Inkscape::XML::Node *) l->data);
- l = g_slist_remove (l, l->data);
- }
- } else {
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- if ( SP_IS_FLOWTSPAN (child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_FLOWPARA(child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_STRING(child) ) {
- SP_OBJECT_REPR (child)->setContent(SP_STRING(child)->string.c_str());
- }
- }
- }
-
- if (((SPObjectClass *) (flowdiv_parent_class))->write)
- ((SPObjectClass *) (flowdiv_parent_class))->write (object, xml_doc, repr, flags);
-
- return repr;
+static void sp_flowdiv_set(SPObject *object, unsigned int key, const gchar *value)
+{
+ if (((SPObjectClass *) flowdiv_parent_class)->set) {
+ (((SPObjectClass *) flowdiv_parent_class)->set)(object, key, value);
+ }
+}
+
+static Inkscape::XML::Node *sp_flowdiv_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+{
+ if ( flags & SP_OBJECT_WRITE_BUILD ) {
+ if ( repr == NULL ) {
+ repr = xml_doc->createElement("svg:flowDiv");
+ }
+ GSList *l = NULL;
+ for (SPObject* child = object->firstChild() ; child ; child = child->getNext() ) {
+ Inkscape::XML::Node* c_repr = NULL;
+ if ( SP_IS_FLOWTSPAN (child) ) {
+ c_repr = child->updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_FLOWPARA(child) ) {
+ c_repr = child->updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_STRING(child) ) {
+ c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
+ }
+ if ( c_repr ) {
+ l = g_slist_prepend (l, c_repr);
+ }
+ }
+ while ( l ) {
+ repr->addChild((Inkscape::XML::Node *) l->data, NULL);
+ Inkscape::GC::release((Inkscape::XML::Node *) l->data);
+ l = g_slist_remove(l, l->data);
+ }
+ } else {
+ for ( SPObject* child = object->firstChild() ; child ; child = child->getNext() ) {
+ if ( SP_IS_FLOWTSPAN (child) ) {
+ child->updateRepr(flags);
+ } else if ( SP_IS_FLOWPARA(child) ) {
+ child->updateRepr(flags);
+ } else if ( SP_IS_STRING(child) ) {
+ child->getRepr()->setContent(SP_STRING(child)->string.c_str());
+ }
+ }
+ }
+
+ if (((SPObjectClass *) (flowdiv_parent_class))->write) {
+ ((SPObjectClass *) (flowdiv_parent_class))->write(object, xml_doc, repr, flags);
+ }
+
+ return repr;
}
@@ -284,124 +287,133 @@ sp_flowtspan_init (SPFlowtspan */*group*/)
{
}
-static void
-sp_flowtspan_release (SPObject *object)
-{
- if (((SPObjectClass *) flowtspan_parent_class)->release)
- ((SPObjectClass *) flowtspan_parent_class)->release (object);
-}
-static void
-sp_flowtspan_update (SPObject *object, SPCtx *ctx, unsigned int flags)
-{
-// SPFlowtspan *group=SP_FLOWTSPAN (object);
- SPItemCtx *ictx=(SPItemCtx *) ctx;
- SPItemCtx cctx=*ictx;
-
- if (((SPObjectClass *) (flowtspan_parent_class))->update)
- ((SPObjectClass *) (flowtspan_parent_class))->update (object, ctx, flags);
-
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
-
- GSList* l = NULL;
- for (SPObject *child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- SPObject *child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- if (SP_IS_ITEM (child)) {
- SPItem const &chi = *SP_ITEM(child);
- cctx.i2doc = chi.transform * ictx->i2doc;
- cctx.i2vp = chi.transform * ictx->i2vp;
- child->updateDisplay((SPCtx *)&cctx, flags);
- } else {
- child->updateDisplay(ctx, flags);
- }
- }
- g_object_unref (G_OBJECT (child));
- }
-}
-static void
-sp_flowtspan_modified (SPObject *object, guint flags)
-{
- SPObject *child;
- GSList *l;
-
- if (((SPObjectClass *) (flowtspan_parent_class))->modified)
- ((SPObjectClass *) (flowtspan_parent_class))->modified (object, flags);
-
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
-
- l = NULL;
- for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- child->emitModified(flags);
- }
- g_object_unref (G_OBJECT (child));
- }
-}
-static void
-sp_flowtspan_build (SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
-{
- if (((SPObjectClass *) flowtspan_parent_class)->build)
- ((SPObjectClass *) flowtspan_parent_class)->build (object, doc, repr);
-}
-static void
-sp_flowtspan_set (SPObject *object, unsigned int key, const gchar *value)
-{
- if (((SPObjectClass *) flowtspan_parent_class)->set)
- (((SPObjectClass *) flowtspan_parent_class)->set) (object, key, value);
-}
-static Inkscape::XML::Node *
-sp_flowtspan_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
-{
- if ( flags&SP_OBJECT_WRITE_BUILD ) {
- if ( repr == NULL ) repr = xml_doc->createElement("svg:flowSpan");
- GSList *l = NULL;
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- Inkscape::XML::Node* c_repr=NULL;
- if ( SP_IS_FLOWTSPAN (child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_FLOWPARA (child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_STRING(child) ) {
- c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
- }
- if ( c_repr ) l = g_slist_prepend (l, c_repr);
- }
- while ( l ) {
- repr->addChild((Inkscape::XML::Node *) l->data, NULL);
- Inkscape::GC::release((Inkscape::XML::Node *) l->data);
- l = g_slist_remove (l, l->data);
- }
- } else {
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- if ( SP_IS_FLOWTSPAN (child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_FLOWPARA (child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_STRING(child) ) {
- SP_OBJECT_REPR (child)->setContent(SP_STRING(child)->string.c_str());
- }
- }
- }
-
- if (((SPObjectClass *) (flowtspan_parent_class))->write)
- ((SPObjectClass *) (flowtspan_parent_class))->write (object, xml_doc, repr, flags);
-
- return repr;
+static void sp_flowtspan_release(SPObject *object)
+{
+ if (((SPObjectClass *) flowtspan_parent_class)->release) {
+ ((SPObjectClass *) flowtspan_parent_class)->release(object);
+ }
+}
+
+static void sp_flowtspan_update(SPObject *object, SPCtx *ctx, unsigned int flags)
+{
+ SPItemCtx *ictx = reinterpret_cast<SPItemCtx *>(ctx);
+ SPItemCtx cctx = *ictx;
+
+ if (((SPObjectClass *) (flowtspan_parent_class))->update) {
+ ((SPObjectClass *) (flowtspan_parent_class))->update(object, ctx, flags);
+ }
+
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
+
+ GSList* l = NULL;
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ g_object_ref( G_OBJECT(child) );
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse (l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ if (SP_IS_ITEM(child)) {
+ SPItem const &chi = *SP_ITEM(child);
+ cctx.i2doc = chi.transform * ictx->i2doc;
+ cctx.i2vp = chi.transform * ictx->i2vp;
+ child->updateDisplay((SPCtx *)&cctx, flags);
+ } else {
+ child->updateDisplay(ctx, flags);
+ }
+ }
+ g_object_unref( G_OBJECT(child) );
+ }
+}
+
+static void sp_flowtspan_modified(SPObject *object, guint flags)
+{
+ if (((SPObjectClass *) (flowtspan_parent_class))->modified) {
+ ((SPObjectClass *) (flowtspan_parent_class))->modified(object, flags);
+ }
+
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
+
+ GSList *l = NULL;
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ g_object_ref( G_OBJECT(child) );
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse (l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ child->emitModified(flags);
+ }
+ g_object_unref( G_OBJECT(child) );
+ }
+}
+
+static void sp_flowtspan_build(SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
+{
+ if (((SPObjectClass *) flowtspan_parent_class)->build) {
+ ((SPObjectClass *) flowtspan_parent_class)->build(object, doc, repr);
+ }
+}
+
+static void sp_flowtspan_set(SPObject *object, unsigned int key, const gchar *value)
+{
+ if (((SPObjectClass *) flowtspan_parent_class)->set) {
+ (((SPObjectClass *) flowtspan_parent_class)->set)(object, key, value);
+ }
+}
+
+static Inkscape::XML::Node *sp_flowtspan_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+{
+ if ( flags&SP_OBJECT_WRITE_BUILD ) {
+ if ( repr == NULL ) {
+ repr = xml_doc->createElement("svg:flowSpan");
+ }
+ GSList *l = NULL;
+ for ( SPObject* child = object->firstChild() ; child ; child = child->getNext() ) {
+ Inkscape::XML::Node* c_repr = NULL;
+ if ( SP_IS_FLOWTSPAN(child) ) {
+ c_repr = child->updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_FLOWPARA(child) ) {
+ c_repr = child->updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_STRING(child) ) {
+ c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
+ }
+ if ( c_repr ) {
+ l = g_slist_prepend(l, c_repr);
+ }
+ }
+ while ( l ) {
+ repr->addChild((Inkscape::XML::Node *) l->data, NULL);
+ Inkscape::GC::release((Inkscape::XML::Node *) l->data);
+ l = g_slist_remove(l, l->data);
+ }
+ } else {
+ for ( SPObject* child = object->firstChild() ; child ; child = child->getNext() ) {
+ if ( SP_IS_FLOWTSPAN(child) ) {
+ child->updateRepr(flags);
+ } else if ( SP_IS_FLOWPARA(child) ) {
+ child->updateRepr(flags);
+ } else if ( SP_IS_STRING(child) ) {
+ SP_OBJECT_REPR(child)->setContent(SP_STRING(child)->string.c_str());
+ }
+ }
+ }
+
+ if (((SPObjectClass *) (flowtspan_parent_class))->write) {
+ ((SPObjectClass *) (flowtspan_parent_class))->write(object, xml_doc, repr, flags);
+ }
+
+ return repr;
}
@@ -462,119 +474,124 @@ sp_flowpara_release (SPObject *object)
((SPObjectClass *) flowpara_parent_class)->release (object);
}
-static void
-sp_flowpara_update (SPObject *object, SPCtx *ctx, unsigned int flags)
-{
- SPItemCtx *ictx=(SPItemCtx *) ctx;
- SPItemCtx cctx=*ictx;
-
- if (((SPObjectClass *) (flowpara_parent_class))->update)
- ((SPObjectClass *) (flowpara_parent_class))->update (object, ctx, flags);
-
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
-
- GSList* l = NULL;
- for (SPObject *child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- SPObject *child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- if (SP_IS_ITEM (child)) {
- SPItem const &chi = *SP_ITEM(child);
- cctx.i2doc = chi.transform * ictx->i2doc;
- cctx.i2vp = chi.transform * ictx->i2vp;
- child->updateDisplay((SPCtx *)&cctx, flags);
- } else {
- child->updateDisplay(ctx, flags);
- }
- }
- g_object_unref (G_OBJECT (child));
- }
+static void sp_flowpara_update(SPObject *object, SPCtx *ctx, unsigned int flags)
+{
+ SPItemCtx *ictx = reinterpret_cast<SPItemCtx *>(ctx);
+ SPItemCtx cctx = *ictx;
+
+ if (((SPObjectClass *) (flowpara_parent_class))->update) {
+ ((SPObjectClass *) (flowpara_parent_class))->update(object, ctx, flags);
+ }
+
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
+
+ GSList* l = NULL;
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ g_object_ref( G_OBJECT(child) );
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse (l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ if (SP_IS_ITEM(child)) {
+ SPItem const &chi = *SP_ITEM(child);
+ cctx.i2doc = chi.transform * ictx->i2doc;
+ cctx.i2vp = chi.transform * ictx->i2vp;
+ child->updateDisplay((SPCtx *)&cctx, flags);
+ } else {
+ child->updateDisplay(ctx, flags);
+ }
+ }
+ g_object_unref( G_OBJECT(child) );
+ }
+}
+
+static void sp_flowpara_modified(SPObject *object, guint flags)
+{
+ if (((SPObjectClass *) (flowpara_parent_class))->modified) {
+ ((SPObjectClass *) (flowpara_parent_class))->modified(object, flags);
+ }
+
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
+
+ GSList *l = NULL;
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ g_object_ref( G_OBJECT(child) );
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse (l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ child->emitModified(flags);
+ }
+ g_object_unref( G_OBJECT(child) );
+ }
}
-static void
-sp_flowpara_modified (SPObject *object, guint flags)
-{
- SPObject *child;
- GSList *l;
- if (((SPObjectClass *) (flowpara_parent_class))->modified)
- ((SPObjectClass *) (flowpara_parent_class))->modified (object, flags);
-
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
-
- l = NULL;
- for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- child->emitModified(flags);
- }
- g_object_unref (G_OBJECT (child));
- }
-}
static void
sp_flowpara_build (SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
{
if (((SPObjectClass *) flowpara_parent_class)->build)
((SPObjectClass *) flowpara_parent_class)->build (object, doc, repr);
}
+
static void
sp_flowpara_set (SPObject *object, unsigned int key, const gchar *value)
{
if (((SPObjectClass *) flowpara_parent_class)->set)
(((SPObjectClass *) flowpara_parent_class)->set) (object, key, value);
}
-static Inkscape::XML::Node *
-sp_flowpara_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
-{
- // SPFlowpara *group = SP_FLOWPARA (object);
-
- if ( flags&SP_OBJECT_WRITE_BUILD ) {
- if ( repr == NULL ) repr = xml_doc->createElement("svg:flowPara");
- GSList *l = NULL;
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- Inkscape::XML::Node* c_repr=NULL;
- if ( SP_IS_FLOWTSPAN (child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_FLOWPARA (child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_STRING(child) ) {
- c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
- }
- if ( c_repr ) l = g_slist_prepend (l, c_repr);
- }
- while ( l ) {
- repr->addChild((Inkscape::XML::Node *) l->data, NULL);
- Inkscape::GC::release((Inkscape::XML::Node *) l->data);
- l = g_slist_remove (l, l->data);
- }
- } else {
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- if ( SP_IS_FLOWTSPAN (child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_FLOWPARA (child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_STRING(child) ) {
- SP_OBJECT_REPR (child)->setContent(SP_STRING(child)->string.c_str());
- }
- }
- }
-
- if (((SPObjectClass *) (flowpara_parent_class))->write)
- ((SPObjectClass *) (flowpara_parent_class))->write (object, xml_doc, repr, flags);
- return repr;
+static Inkscape::XML::Node *sp_flowpara_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+{
+ if ( flags&SP_OBJECT_WRITE_BUILD ) {
+ if ( repr == NULL ) repr = xml_doc->createElement("svg:flowPara");
+ GSList *l = NULL;
+ for ( SPObject* child = object->firstChild() ; child ; child = child->getNext() ) {
+ Inkscape::XML::Node* c_repr = NULL;
+ if ( SP_IS_FLOWTSPAN(child) ) {
+ c_repr = child->updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_FLOWPARA(child) ) {
+ c_repr = child->updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_STRING(child) ) {
+ c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
+ }
+ if ( c_repr ) {
+ l = g_slist_prepend(l, c_repr);
+ }
+ }
+ while ( l ) {
+ repr->addChild((Inkscape::XML::Node *) l->data, NULL);
+ Inkscape::GC::release((Inkscape::XML::Node *) l->data);
+ l = g_slist_remove(l, l->data);
+ }
+ } else {
+ for ( SPObject* child = object->firstChild() ; child ; child = child->getNext() ) {
+ if ( SP_IS_FLOWTSPAN(child) ) {
+ child->updateRepr(flags);
+ } else if ( SP_IS_FLOWPARA(child) ) {
+ child->updateRepr(flags);
+ } else if ( SP_IS_STRING(child) ) {
+ child->getRepr()->setContent(SP_STRING(child)->string.c_str());
+ }
+ }
+ }
+
+ if (((SPObjectClass *) (flowpara_parent_class))->write) {
+ ((SPObjectClass *) (flowpara_parent_class))->write(object, xml_doc, repr, flags);
+ }
+
+ return repr;
}
/*
@@ -728,3 +745,14 @@ sp_flowregionbreak_write (SPObject *object, Inkscape::XML::Document *xml_doc, In
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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/sp-flowregion.cpp b/src/sp-flowregion.cpp
index 79007cac7..680589b55 100644
--- a/src/sp-flowregion.cpp
+++ b/src/sp-flowregion.cpp
@@ -1,5 +1,3 @@
-#define __SP_FLOWREGION_C__
-
/*
*/
@@ -143,105 +141,101 @@ sp_flowregion_remove_child (SPObject * object, Inkscape::XML::Node * child)
}
-static void
-sp_flowregion_update (SPObject *object, SPCtx *ctx, unsigned int flags)
+static void sp_flowregion_update(SPObject *object, SPCtx *ctx, unsigned int flags)
{
- SPFlowregion *group;
- SPObject *child;
- SPItemCtx *ictx, cctx;
- GSList *l;
+ SPFlowregion *group = SP_FLOWREGION(object);
- group = SP_FLOWREGION (object);
- ictx = (SPItemCtx *) ctx;
- cctx = *ictx;
+ SPItemCtx *ictx = reinterpret_cast<SPItemCtx *>(ctx);
+ SPItemCtx cctx = *ictx;
- if (((SPObjectClass *) (flowregion_parent_class))->update)
- ((SPObjectClass *) (flowregion_parent_class))->update (object, ctx, flags);
+ if (((SPObjectClass *) (flowregion_parent_class))->update) {
+ ((SPObjectClass *) (flowregion_parent_class))->update (object, ctx, flags);
+ }
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
- l = NULL;
- for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- if (SP_IS_ITEM (child)) {
- SPItem const &chi = *SP_ITEM(child);
- cctx.i2doc = chi.transform * ictx->i2doc;
- cctx.i2vp = chi.transform * ictx->i2vp;
- child->updateDisplay((SPCtx *)&cctx, flags);
- } else {
- child->updateDisplay(ctx, flags);
- }
- }
- g_object_unref (G_OBJECT (child));
- }
+ GSList *l = NULL;
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ g_object_ref( G_OBJECT(child) );
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse(l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ if (SP_IS_ITEM (child)) {
+ SPItem const &chi = *SP_ITEM(child);
+ cctx.i2doc = chi.transform * ictx->i2doc;
+ cctx.i2vp = chi.transform * ictx->i2vp;
+ child->updateDisplay((SPCtx *)&cctx, flags);
+ } else {
+ child->updateDisplay(ctx, flags);
+ }
+ }
+ g_object_unref (G_OBJECT(child));
+ }
- group->UpdateComputed();
+ group->UpdateComputed();
}
-void SPFlowregion::UpdateComputed(void)
+void SPFlowregion::UpdateComputed(void)
{
- SPObject* object=SP_OBJECT(this);
-
- for (std::vector<Shape*>::iterator it = computed.begin() ; it != computed.end() ; it++)
+ for (std::vector<Shape*>::iterator it = computed.begin() ; it != computed.end() ; it++) {
delete *it;
+ }
computed.clear();
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- Shape *shape = NULL;
- GetDest(child,&shape);
+ for (SPObject* child = firstChild() ; child ; child = child->getNext() ) {
+ Shape *shape = 0;
+ GetDest(child, &shape);
computed.push_back(shape);
- }
+ }
}
-static void
-sp_flowregion_modified (SPObject *object, guint flags)
+static void sp_flowregion_modified(SPObject *object, guint flags)
{
- SPFlowregion *group;
- SPObject *child;
- GSList *l;
-
- group = SP_FLOWREGION (object);
+ SP_FLOWREGION(object); // ensure it is the proper type.
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
- l = NULL;
- for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- child->emitModified(flags);
- }
- g_object_unref (G_OBJECT (child));
- }
+ GSList *l = NULL;
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ g_object_ref( G_OBJECT(child) );
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse(l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ child->emitModified(flags);
+ }
+ g_object_unref( G_OBJECT(child) );
+ }
}
-static Inkscape::XML::Node *
-sp_flowregion_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+static Inkscape::XML::Node *sp_flowregion_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
if (flags & SP_OBJECT_WRITE_BUILD) {
- if ( repr == NULL ) {
+ if ( repr == NULL ) {
repr = xml_doc->createElement("svg:flowRegion");
- }
+ }
GSList *l = NULL;
- for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
- if (SP_IS_TITLE(child) || SP_IS_DESC(child)) continue;
- Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
- if (crepr) l = g_slist_prepend(l, crepr);
+ for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
+ if ( !SP_IS_TITLE(child) && !SP_IS_DESC(child) ) {
+ Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
+ if (crepr) {
+ l = g_slist_prepend(l, crepr);
+ }
+ }
}
while (l) {
@@ -251,16 +245,18 @@ sp_flowregion_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscap
}
} else {
- for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
- if (SP_IS_TITLE(child) || SP_IS_DESC(child)) continue;
- child->updateRepr(flags);
+ for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
+ if ( !SP_IS_TITLE(child) && !SP_IS_DESC(child) ) {
+ child->updateRepr(flags);
+ }
}
}
- if (((SPObjectClass *) (flowregion_parent_class))->write)
- ((SPObjectClass *) (flowregion_parent_class))->write (object, xml_doc, repr, flags);
+ if (((SPObjectClass *) (flowregion_parent_class))->write) {
+ ((SPObjectClass *) (flowregion_parent_class))->write (object, xml_doc, repr, flags);
+ }
- return repr;
+ return repr;
}
@@ -361,102 +357,97 @@ sp_flowregionexclude_remove_child (SPObject * object, Inkscape::XML::Node * chil
}
-static void
-sp_flowregionexclude_update (SPObject *object, SPCtx *ctx, unsigned int flags)
+static void sp_flowregionexclude_update(SPObject *object, SPCtx *ctx, unsigned int flags)
{
- SPFlowregionExclude *group;
- SPObject *child;
- SPItemCtx *ictx, cctx;
- GSList *l;
+ SPFlowregionExclude *group = SP_FLOWREGIONEXCLUDE (object);
- group = SP_FLOWREGIONEXCLUDE (object);
- ictx = (SPItemCtx *) ctx;
- cctx = *ictx;
+ SPItemCtx *ictx = reinterpret_cast<SPItemCtx *>(ctx);
+ SPItemCtx cctx = *ictx;
- if (((SPObjectClass *) (flowregionexclude_parent_class))->update)
- ((SPObjectClass *) (flowregionexclude_parent_class))->update (object, ctx, flags);
+ if (((SPObjectClass *) (flowregionexclude_parent_class))->update) {
+ ((SPObjectClass *) (flowregionexclude_parent_class))->update (object, ctx, flags);
+ }
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
- l = NULL;
- for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- if (SP_IS_ITEM (child)) {
- SPItem const &chi = *SP_ITEM(child);
- cctx.i2doc = chi.transform * ictx->i2doc;
- cctx.i2vp = chi.transform * ictx->i2vp;
- child->updateDisplay((SPCtx *)&cctx, flags);
- } else {
- child->updateDisplay(ctx, flags);
- }
- }
- g_object_unref (G_OBJECT (child));
- }
+ GSList *l = NULL;
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ g_object_ref( G_OBJECT(child) );
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse (l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ if (SP_IS_ITEM (child)) {
+ SPItem const &chi = *SP_ITEM(child);
+ cctx.i2doc = chi.transform * ictx->i2doc;
+ cctx.i2vp = chi.transform * ictx->i2vp;
+ child->updateDisplay((SPCtx *)&cctx, flags);
+ } else {
+ child->updateDisplay(ctx, flags);
+ }
+ }
+ g_object_unref( G_OBJECT(child) );
+ }
- group->UpdateComputed();
+ group->UpdateComputed();
}
-void SPFlowregionExclude::UpdateComputed(void)
-{
- SPObject* object=SP_OBJECT(this);
+void SPFlowregionExclude::UpdateComputed(void)
+{
if (computed) {
delete computed;
computed = NULL;
}
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- GetDest(child,&computed);
- }
+ for ( SPObject* child = firstChild() ; child ; child = child->getNext() ) {
+ GetDest(child, &computed);
+ }
}
-static void
-sp_flowregionexclude_modified (SPObject *object, guint flags)
+static void sp_flowregionexclude_modified(SPObject *object, guint flags)
{
- SPFlowregionExclude *group;
- SPObject *child;
- GSList *l;
-
- group = SP_FLOWREGIONEXCLUDE (object);
+ SP_FLOWREGIONEXCLUDE(object); // Ensure it is the proper type
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
- l = NULL;
- for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- child->emitModified(flags);
- }
- g_object_unref (G_OBJECT (child));
- }
+ GSList *l = NULL;
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ g_object_ref( G_OBJECT(child) );
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse (l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ child->emitModified(flags);
+ }
+ g_object_unref( G_OBJECT(child) );
+ }
}
-static Inkscape::XML::Node *
-sp_flowregionexclude_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+static Inkscape::XML::Node *sp_flowregionexclude_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
if (flags & SP_OBJECT_WRITE_BUILD) {
if ( repr == NULL ) {
repr = xml_doc->createElement("svg:flowRegionExclude");
- }
+ }
GSList *l = NULL;
- for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
- if (crepr) l = g_slist_prepend(l, crepr);
+ if (crepr) {
+ l = g_slist_prepend(l, crepr);
+ }
}
while (l) {
@@ -466,15 +457,16 @@ sp_flowregionexclude_write (SPObject *object, Inkscape::XML::Document *xml_doc,
}
} else {
- for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
child->updateRepr(flags);
}
}
- if (((SPObjectClass *) (flowregionexclude_parent_class))->write)
- ((SPObjectClass *) (flowregionexclude_parent_class))->write (object, xml_doc, repr, flags);
+ if (((SPObjectClass *) (flowregionexclude_parent_class))->write) {
+ ((SPObjectClass *) (flowregionexclude_parent_class))->write (object, xml_doc, repr, flags);
+ }
- return repr;
+ return repr;
}
@@ -520,7 +512,7 @@ static void GetDest(SPObject* child,Shape **computed)
tr_mat = SP_ITEM(u_child)->transform;
}
if ( SP_IS_SHAPE (u_child) ) {
- curve = sp_shape_get_curve (SP_SHAPE (u_child));
+ curve = SP_SHAPE (u_child)->getCurve ();
} else if ( SP_IS_TEXT (u_child) ) {
curve = SP_TEXT (u_child)->getNormalizedBpath ();
}
@@ -548,3 +540,13 @@ static void GetDest(SPObject* child,Shape **computed)
}
}
+/*
+ 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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp
index b01146d60..3af12064f 100644
--- a/src/sp-flowtext.cpp
+++ b/src/sp-flowtext.cpp
@@ -139,21 +139,21 @@ sp_flowtext_remove_child(SPObject *object, Inkscape::XML::Node *child)
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
-static void
-sp_flowtext_update(SPObject *object, SPCtx *ctx, unsigned flags)
+static void sp_flowtext_update(SPObject *object, SPCtx *ctx, unsigned flags)
{
SPFlowtext *group = SP_FLOWTEXT(object);
SPItemCtx *ictx = (SPItemCtx *) ctx;
SPItemCtx cctx = *ictx;
- if (((SPObjectClass *) (parent_class))->update)
+ if (((SPObjectClass *) (parent_class))->update) {
((SPObjectClass *) (parent_class))->update(object, ctx, flags);
+ }
if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
flags &= SP_OBJECT_MODIFIED_CASCADE;
GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
g_object_ref(G_OBJECT(child));
l = g_slist_prepend(l, child);
}
@@ -177,7 +177,7 @@ sp_flowtext_update(SPObject *object, SPCtx *ctx, unsigned flags)
group->rebuildLayout();
NRRect paintbox;
- sp_item_invoke_bbox(group, &paintbox, Geom::identity(), TRUE);
+ group->invoke_bbox( &paintbox, Geom::identity(), TRUE);
for (SPItemView *v = group->display; v != NULL; v = v->next) {
group->_clearFlow(NR_ARENA_GROUP(v->arenaitem));
nr_arena_group_set_style(NR_ARENA_GROUP(v->arenaitem), SP_OBJECT_STYLE(object));
@@ -186,8 +186,7 @@ sp_flowtext_update(SPObject *object, SPCtx *ctx, unsigned flags)
}
}
-static void
-sp_flowtext_modified(SPObject *object, guint flags)
+static void sp_flowtext_modified(SPObject *object, guint flags)
{
SPObject *ft = SP_FLOWTEXT (object);
SPObject *region = NULL;
@@ -199,7 +198,7 @@ sp_flowtext_modified(SPObject *object, guint flags)
if (flags & ( SP_OBJECT_STYLE_MODIFIED_FLAG )) {
SPFlowtext *text = SP_FLOWTEXT(object);
NRRect paintbox;
- sp_item_invoke_bbox(text, &paintbox, Geom::identity(), TRUE);
+ text->invoke_bbox( &paintbox, Geom::identity(), TRUE);
for (SPItemView* v = text->display; v != NULL; v = v->next) {
text->_clearFlow(NR_ARENA_GROUP(v->arenaitem));
nr_arena_group_set_style(NR_ARENA_GROUP(v->arenaitem), SP_OBJECT_STYLE(object));
@@ -207,17 +206,17 @@ sp_flowtext_modified(SPObject *object, guint flags)
}
}
- for (SPObject *o = sp_object_first_child(SP_OBJECT(ft)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
+ for ( SPObject *o = ft->firstChild() ; o ; o = o->getNext() ) {
if (SP_IS_FLOWREGION(o)) {
region = o;
break;
}
}
- if (!region) return;
-
- if (flags || (region->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- region->emitModified(flags); // pass down to the region only
+ if (region) {
+ if (flags || (region->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ region->emitModified(flags); // pass down to the region only
+ }
}
}
@@ -230,7 +229,7 @@ sp_flowtext_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *r
(* ((SPObjectClass *) (parent_class))->build)(object, document, repr);
}
- sp_object_read_attr(object, "inkscape:layoutOptions"); // must happen after css has been read
+ object->readAttr( "inkscape:layoutOptions" ); // must happen after css has been read
}
static void
@@ -241,7 +240,8 @@ sp_flowtext_set(SPObject *object, unsigned key, gchar const *value)
switch (key) {
case SP_ATTR_LAYOUT_OPTIONS: {
// deprecated attribute, read for backward compatibility only
- SPCSSAttr *opts = sp_repr_css_attr((SP_OBJECT(group))->repr, "inkscape:layoutOptions");
+ //XML Tree being directly used while it shouldn't be.
+ SPCSSAttr *opts = sp_repr_css_attr((SP_OBJECT(group))->getRepr(), "inkscape:layoutOptions");
{
gchar const *val = sp_repr_css_property(opts, "justification", NULL);
if (val != NULL && !object->style->text_align.set) {
@@ -291,18 +291,21 @@ sp_flowtext_set(SPObject *object, unsigned key, gchar const *value)
}
}
-static Inkscape::XML::Node *
-sp_flowtext_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+static Inkscape::XML::Node *sp_flowtext_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
if ( flags & SP_OBJECT_WRITE_BUILD ) {
- if ( repr == NULL ) repr = xml_doc->createElement("svg:flowRoot");
+ if ( repr == NULL ) {
+ repr = xml_doc->createElement("svg:flowRoot");
+ }
GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
Inkscape::XML::Node *c_repr = NULL;
if ( SP_IS_FLOWDIV(child) || SP_IS_FLOWPARA(child) || SP_IS_FLOWREGION(child) || SP_IS_FLOWREGIONEXCLUDE(child)) {
c_repr = child->updateRepr(xml_doc, NULL, flags);
}
- if ( c_repr ) l = g_slist_prepend(l, c_repr);
+ if ( c_repr ) {
+ l = g_slist_prepend(l, c_repr);
+ }
}
while ( l ) {
repr->addChild((Inkscape::XML::Node *) l->data, NULL);
@@ -310,15 +313,16 @@ sp_flowtext_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::
l = g_slist_remove(l, l->data);
}
} else {
- for (SPObject *child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
if ( SP_IS_FLOWDIV(child) || SP_IS_FLOWPARA(child) || SP_IS_FLOWREGION(child) || SP_IS_FLOWREGIONEXCLUDE(child) ) {
child->updateRepr(flags);
}
}
}
- if (((SPObjectClass *) (parent_class))->write)
+ if (((SPObjectClass *) (parent_class))->write) {
((SPObjectClass *) (parent_class))->write(object, xml_doc, repr, flags);
+ }
return repr;
}
@@ -351,9 +355,9 @@ sp_flowtext_print(SPItem *item, SPPrintContext *ctx)
SPFlowtext *group = SP_FLOWTEXT(item);
NRRect pbox;
- sp_item_invoke_bbox(item, &pbox, Geom::identity(), TRUE);
+ item->invoke_bbox( &pbox, Geom::identity(), TRUE);
NRRect bbox;
- Geom::OptRect bbox_maybe = sp_item_bbox_desktop(item);
+ Geom::OptRect bbox_maybe = item->getBboxDesktop();
if (!bbox_maybe) {
return;
}
@@ -362,9 +366,9 @@ sp_flowtext_print(SPItem *item, SPPrintContext *ctx)
NRRect dbox;
dbox.x0 = 0.0;
dbox.y0 = 0.0;
- dbox.x1 = sp_document_width(SP_OBJECT_DOCUMENT(item));
- dbox.y1 = sp_document_height(SP_OBJECT_DOCUMENT(item));
- Geom::Matrix const ctm (sp_item_i2d_affine(item));
+ dbox.x1 = SP_OBJECT_DOCUMENT(item)->getWidth();
+ dbox.y1 = SP_OBJECT_DOCUMENT(item)->getHeight();
+ Geom::Matrix const ctm (item->i2d_affine());
group->layout.print(ctx, &pbox, &dbox, &bbox, ctm);
}
@@ -392,7 +396,7 @@ static void sp_flowtext_snappoints(SPItem const *item, std::vector<Inkscape::Sna
if (layout != NULL && layout->outputExists()) {
boost::optional<Geom::Point> pt = layout->baselineAnchorPoint();
if (pt) {
- p.push_back(Inkscape::SnapCandidatePoint((*pt) * sp_item_i2d_affine(item), Inkscape::SNAPSOURCE_TEXT_BASELINE, Inkscape::SNAPTARGET_TEXT_BASELINE));
+ p.push_back(Inkscape::SnapCandidatePoint((*pt) * item->i2d_affine(), Inkscape::SNAPSOURCE_TEXT_BASELINE, Inkscape::SNAPTARGET_TEXT_BASELINE));
}
}
}
@@ -408,7 +412,7 @@ sp_flowtext_show(SPItem *item, NRArena *arena, unsigned/* key*/, unsigned /*flag
// pass the bbox of the flowtext object as paintbox (used for paintserver fills)
NRRect paintbox;
- sp_item_invoke_bbox(item, &paintbox, Geom::identity(), TRUE);
+ item->invoke_bbox( &paintbox, Geom::identity(), TRUE);
group->layout.show(flowed, &paintbox);
return flowed;
@@ -456,7 +460,7 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape,
*pending_line_break_object = NULL;
}
- for (SPObject *child = sp_object_first_child(root) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = root->firstChild() ; child ; child = child->getNext() ) {
if (SP_IS_STRING(child)) {
if (*pending_line_break_object) {
if (SP_IS_FLOWREGIONBREAK(*pending_line_break_object))
@@ -466,23 +470,27 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape,
}
*pending_line_break_object = NULL;
}
- if (with_indent)
+ if (with_indent) {
layout.appendText(SP_STRING(child)->string, root->style, child, &pi);
- else
+ } else {
layout.appendText(SP_STRING(child)->string, root->style, child);
+ }
} else if (SP_IS_FLOWREGION(child)) {
std::vector<Shape*> const &computed = SP_FLOWREGION(child)->computed;
for (std::vector<Shape*>::const_iterator it = computed.begin() ; it != computed.end() ; it++) {
shapes->push_back(Shape());
- if (exclusion_shape->hasEdges())
+ if (exclusion_shape->hasEdges()) {
shapes->back().Booleen(*it, const_cast<Shape*>(exclusion_shape), bool_op_diff);
- else
+ } else {
shapes->back().Copy(*it);
+ }
layout.appendWrapShape(&shapes->back());
}
}
- else if (!SP_IS_FLOWREGIONEXCLUDE(child) && !sp_repr_is_meta_element(child->repr))
+ //XML Tree is being directly used while it shouldn't be.
+ else if (!SP_IS_FLOWREGIONEXCLUDE(child) && !sp_repr_is_meta_element(child->getRepr())) {
_buildLayoutInput(child, exclusion_shape, shapes, pending_line_break_object);
+ }
}
if (SP_IS_FLOWDIV(root) || SP_IS_FLOWPARA(root) || SP_IS_FLOWREGIONBREAK(root) || SP_IS_FLOWLINE(root)) {
@@ -497,17 +505,18 @@ Shape* SPFlowtext::_buildExclusionShape() const
Shape *shape = new Shape;
Shape *shape_temp = new Shape;
- for (SPObject *child = children ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = children ; child ; child = child->getNext() ) {
// RH: is it right that this shouldn't be recursive?
if ( SP_IS_FLOWREGIONEXCLUDE(child) ) {
SPFlowregionExclude *c_child = SP_FLOWREGIONEXCLUDE(child);
- if (c_child->computed == NULL || !c_child->computed->hasEdges())
- continue;
- if (shape->hasEdges()) {
- shape_temp->Booleen(shape, c_child->computed, bool_op_union);
- std::swap(shape, shape_temp);
- } else
- shape->Copy(c_child->computed);
+ if ( c_child->computed && c_child->computed->hasEdges() ) {
+ if (shape->hasEdges()) {
+ shape_temp->Booleen(shape, c_child->computed, bool_op_union);
+ std::swap(shape, shape_temp);
+ } else {
+ shape->Copy(c_child->computed);
+ }
+ }
}
}
delete shape_temp;
@@ -547,7 +556,7 @@ SPFlowtext::getAsText()
SPItem *item = SP_ITEM(this);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(this));
+ Inkscape::XML::Document *xml_doc = SP_OBJECT_DOCUMENT(this)->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:text");
repr->setAttribute("xml:space", "preserve");
repr->setAttribute("style", SP_OBJECT_REPR(this)->attribute("style"));
@@ -650,40 +659,36 @@ SPFlowtext::getAsText()
SPItem *SPFlowtext::get_frame(SPItem *after)
{
- SPObject *ft = SP_OBJECT (this);
- SPObject *region = NULL;
+ SPItem *frame = 0;
- for (SPObject *o = sp_object_first_child(SP_OBJECT(ft)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
+ SPObject *region = 0;
+ for (SPObject *o = firstChild() ; o ; o = o->getNext() ) {
if (SP_IS_FLOWREGION(o)) {
region = o;
break;
}
}
- if (!region) return NULL;
-
- bool past = false;
- SPItem *frame = NULL;
+ if (region) {
+ bool past = false;
- for (SPObject *o = sp_object_first_child(SP_OBJECT(region)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
- if (SP_IS_ITEM(o)) {
- if (after == NULL || past) {
- frame = SP_ITEM(o);
- } else {
- if (SP_ITEM(o) == after) {
- past = true;
+ for (SPObject *o = region->firstChild() ; o ; o = o->getNext() ) {
+ if (SP_IS_ITEM(o)) {
+ if ( (after == NULL) || past ) {
+ frame = SP_ITEM(o);
+ } else {
+ if (SP_ITEM(o) == after) {
+ past = true;
+ }
}
}
}
- }
- if (!frame) return NULL;
-
- if (SP_IS_USE (frame)) {
- return sp_use_get_original(SP_USE(frame));
- } else {
- return frame;
+ if ( frame && SP_IS_USE(frame) ) {
+ frame = sp_use_get_original(SP_USE(frame));
+ }
}
+ return frame;
}
bool SPFlowtext::has_internal_frame()
@@ -698,7 +703,7 @@ SPItem *create_flowtext_with_internal_frame (SPDesktop *desktop, Geom::Point p0,
{
SPDocument *doc = sp_desktop_document (desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *root_repr = xml_doc->createElement("svg:flowRoot");
root_repr->setAttribute("xml:space", "preserve"); // we preserve spaces in the text objects we create
SPItem *ft_item = SP_ITEM(desktop->currentLayer()->appendChildRepr(root_repr));
@@ -742,7 +747,7 @@ SPItem *create_flowtext_with_internal_frame (SPDesktop *desktop, Geom::Point p0,
Inkscape::GC::release(para_repr);
Inkscape::GC::release(rect_repr);
- ft_item->transform = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
+ ft_item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
return ft_item;
}
diff --git a/src/sp-font-face.cpp b/src/sp-font-face.cpp
index 1912676d4..93e2eeac8 100644
--- a/src/sp-font-face.cpp
+++ b/src/sp-font-face.cpp
@@ -3,7 +3,6 @@
#endif
#ifdef ENABLE_SVG_FONTS
-#define __SP_FONTFACE_C__
/*
* SVG <font-face> element implementation
@@ -14,6 +13,7 @@
*
* Author:
* Felipe C. da S. Sanches <juca@members.fsf.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008, Felipe C. da S. Sanches
*
@@ -403,39 +403,39 @@ static void sp_fontface_build(SPObject *object, SPDocument *document, Inkscape::
((SPObjectClass *) (parent_class))->build(object, document, repr);
}
- sp_object_read_attr(object, "font-family");
- sp_object_read_attr(object, "font-style");
- sp_object_read_attr(object, "font-variant");
- sp_object_read_attr(object, "font-weight");
- sp_object_read_attr(object, "font-stretch");
- sp_object_read_attr(object, "font-size");
- sp_object_read_attr(object, "unicode-range");
- sp_object_read_attr(object, "units-per-em");
- sp_object_read_attr(object, "panose-1");
- sp_object_read_attr(object, "stem-v");
- sp_object_read_attr(object, "stem-h");
- sp_object_read_attr(object, "slope");
- sp_object_read_attr(object, "cap-height");
- sp_object_read_attr(object, "x-height");
- sp_object_read_attr(object, "accent-height");
- sp_object_read_attr(object, "ascent");
- sp_object_read_attr(object, "descent");
- sp_object_read_attr(object, "widths");
- sp_object_read_attr(object, "bbox");
- sp_object_read_attr(object, "ideographic");
- sp_object_read_attr(object, "alphabetic");
- sp_object_read_attr(object, "mathematical");
- sp_object_read_attr(object, "ranging");
- sp_object_read_attr(object, "v-ideogaphic");
- sp_object_read_attr(object, "v-alphabetic");
- sp_object_read_attr(object, "v-mathematical");
- sp_object_read_attr(object, "v-hanging");
- sp_object_read_attr(object, "underline-position");
- sp_object_read_attr(object, "underline-thickness");
- sp_object_read_attr(object, "strikethrough-position");
- sp_object_read_attr(object, "strikethrough-thickness");
- sp_object_read_attr(object, "overline-position");
- sp_object_read_attr(object, "overline-thickness");
+ object->readAttr( "font-family" );
+ object->readAttr( "font-style" );
+ object->readAttr( "font-variant" );
+ object->readAttr( "font-weight" );
+ object->readAttr( "font-stretch" );
+ object->readAttr( "font-size" );
+ object->readAttr( "unicode-range" );
+ object->readAttr( "units-per-em" );
+ object->readAttr( "panose-1" );
+ object->readAttr( "stem-v" );
+ object->readAttr( "stem-h" );
+ object->readAttr( "slope" );
+ object->readAttr( "cap-height" );
+ object->readAttr( "x-height" );
+ object->readAttr( "accent-height" );
+ object->readAttr( "ascent" );
+ object->readAttr( "descent" );
+ object->readAttr( "widths" );
+ object->readAttr( "bbox" );
+ object->readAttr( "ideographic" );
+ object->readAttr( "alphabetic" );
+ object->readAttr( "mathematical" );
+ object->readAttr( "ranging" );
+ object->readAttr( "v-ideogaphic" );
+ object->readAttr( "v-alphabetic" );
+ object->readAttr( "v-mathematical" );
+ object->readAttr( "v-hanging" );
+ object->readAttr( "underline-position" );
+ object->readAttr( "underline-thickness" );
+ object->readAttr( "strikethrough-position" );
+ object->readAttr( "strikethrough-thickness" );
+ object->readAttr( "overline-position" );
+ object->readAttr( "overline-thickness" );
}
static void sp_fontface_children_modified(SPFontFace */*sp_fontface*/)
@@ -780,39 +780,39 @@ static void
sp_fontface_update(SPObject *object, SPCtx *ctx, guint flags)
{
if (flags & (SP_OBJECT_MODIFIED_FLAG)) {
- sp_object_read_attr(object, "font-family");
- sp_object_read_attr(object, "font-style");
- sp_object_read_attr(object, "font-variant");
- sp_object_read_attr(object, "font-weight");
- sp_object_read_attr(object, "font-stretch");
- sp_object_read_attr(object, "font-size");
- sp_object_read_attr(object, "unicode-range");
- sp_object_read_attr(object, "units-per-em");
- sp_object_read_attr(object, "panose-1");
- sp_object_read_attr(object, "stemv");
- sp_object_read_attr(object, "stemh");
- sp_object_read_attr(object, "slope");
- sp_object_read_attr(object, "cap-height");
- sp_object_read_attr(object, "x-height");
- sp_object_read_attr(object, "accent-height");
- sp_object_read_attr(object, "ascent");
- sp_object_read_attr(object, "descent");
- sp_object_read_attr(object, "widths");
- sp_object_read_attr(object, "bbox");
- sp_object_read_attr(object, "ideographic");
- sp_object_read_attr(object, "alphabetic");
- sp_object_read_attr(object, "mathematical");
- sp_object_read_attr(object, "hanging");
- sp_object_read_attr(object, "v-ideographic");
- sp_object_read_attr(object, "v-alphabetic");
- sp_object_read_attr(object, "v-mathematical");
- sp_object_read_attr(object, "v-hanging");
- sp_object_read_attr(object, "underline-position");
- sp_object_read_attr(object, "underline-thickness");
- sp_object_read_attr(object, "strikethrough-position");
- sp_object_read_attr(object, "strikethrough-thickness");
- sp_object_read_attr(object, "overline-position");
- sp_object_read_attr(object, "overline-thickness");
+ object->readAttr( "font-family" );
+ object->readAttr( "font-style" );
+ object->readAttr( "font-variant" );
+ object->readAttr( "font-weight" );
+ object->readAttr( "font-stretch" );
+ object->readAttr( "font-size" );
+ object->readAttr( "unicode-range" );
+ object->readAttr( "units-per-em" );
+ object->readAttr( "panose-1" );
+ object->readAttr( "stemv" );
+ object->readAttr( "stemh" );
+ object->readAttr( "slope" );
+ object->readAttr( "cap-height" );
+ object->readAttr( "x-height" );
+ object->readAttr( "accent-height" );
+ object->readAttr( "ascent" );
+ object->readAttr( "descent" );
+ object->readAttr( "widths" );
+ object->readAttr( "bbox" );
+ object->readAttr( "ideographic" );
+ object->readAttr( "alphabetic" );
+ object->readAttr( "mathematical" );
+ object->readAttr( "hanging" );
+ object->readAttr( "v-ideographic" );
+ object->readAttr( "v-alphabetic" );
+ object->readAttr( "v-mathematical" );
+ object->readAttr( "v-hanging" );
+ object->readAttr( "underline-position" );
+ object->readAttr( "underline-thickness" );
+ object->readAttr( "strikethrough-position" );
+ object->readAttr( "strikethrough-thickness" );
+ object->readAttr( "overline-position" );
+ object->readAttr( "overline-thickness" );
}
if (((SPObjectClass *) parent_class)->update) {
@@ -866,39 +866,41 @@ static Inkscape::XML::Node *sp_fontface_write(SPObject *object, Inkscape::XML::D
sp_repr_set_svg_double(repr, "overline-thickness", face->overline_thickness);
if (repr != SP_OBJECT_REPR(object)) {
- COPY_ATTR(repr, object->repr, "font-family");
- COPY_ATTR(repr, object->repr, "font-style");
- COPY_ATTR(repr, object->repr, "font-variant");
- COPY_ATTR(repr, object->repr, "font-weight");
- COPY_ATTR(repr, object->repr, "font-stretch");
- COPY_ATTR(repr, object->repr, "font-size");
- COPY_ATTR(repr, object->repr, "unicode-range");
- COPY_ATTR(repr, object->repr, "units-per-em");
- COPY_ATTR(repr, object->repr, "panose-1");
- COPY_ATTR(repr, object->repr, "stemv");
- COPY_ATTR(repr, object->repr, "stemh");
- COPY_ATTR(repr, object->repr, "slope");
- COPY_ATTR(repr, object->repr, "cap-height");
- COPY_ATTR(repr, object->repr, "x-height");
- COPY_ATTR(repr, object->repr, "accent-height");
- COPY_ATTR(repr, object->repr, "ascent");
- COPY_ATTR(repr, object->repr, "descent");
- COPY_ATTR(repr, object->repr, "widths");
- COPY_ATTR(repr, object->repr, "bbox");
- COPY_ATTR(repr, object->repr, "ideographic");
- COPY_ATTR(repr, object->repr, "alphabetic");
- COPY_ATTR(repr, object->repr, "mathematical");
- COPY_ATTR(repr, object->repr, "hanging");
- COPY_ATTR(repr, object->repr, "v-ideographic");
- COPY_ATTR(repr, object->repr, "v-alphabetic");
- COPY_ATTR(repr, object->repr, "v-mathematical");
- COPY_ATTR(repr, object->repr, "v-hanging");
- COPY_ATTR(repr, object->repr, "underline-position");
- COPY_ATTR(repr, object->repr, "underline-thickness");
- COPY_ATTR(repr, object->repr, "strikethrough-position");
- COPY_ATTR(repr, object->repr, "strikethrough-thickness");
- COPY_ATTR(repr, object->repr, "overline-position");
- COPY_ATTR(repr, object->repr, "overline-thickness");
+ // In all COPY_ATTR given below the XML tree is
+ // being used directly while it shouldn't be.
+ COPY_ATTR(repr, object->getRepr(), "font-family");
+ COPY_ATTR(repr, object->getRepr(), "font-style");
+ COPY_ATTR(repr, object->getRepr(), "font-variant");
+ COPY_ATTR(repr, object->getRepr(), "font-weight");
+ COPY_ATTR(repr, object->getRepr(), "font-stretch");
+ COPY_ATTR(repr, object->getRepr(), "font-size");
+ COPY_ATTR(repr, object->getRepr(), "unicode-range");
+ COPY_ATTR(repr, object->getRepr(), "units-per-em");
+ COPY_ATTR(repr, object->getRepr(), "panose-1");
+ COPY_ATTR(repr, object->getRepr(), "stemv");
+ COPY_ATTR(repr, object->getRepr(), "stemh");
+ COPY_ATTR(repr, object->getRepr(), "slope");
+ COPY_ATTR(repr, object->getRepr(), "cap-height");
+ COPY_ATTR(repr, object->getRepr(), "x-height");
+ COPY_ATTR(repr, object->getRepr(), "accent-height");
+ COPY_ATTR(repr, object->getRepr(), "ascent");
+ COPY_ATTR(repr, object->getRepr(), "descent");
+ COPY_ATTR(repr, object->getRepr(), "widths");
+ COPY_ATTR(repr, object->getRepr(), "bbox");
+ COPY_ATTR(repr, object->getRepr(), "ideographic");
+ COPY_ATTR(repr, object->getRepr(), "alphabetic");
+ COPY_ATTR(repr, object->getRepr(), "mathematical");
+ COPY_ATTR(repr, object->getRepr(), "hanging");
+ COPY_ATTR(repr, object->getRepr(), "v-ideographic");
+ COPY_ATTR(repr, object->getRepr(), "v-alphabetic");
+ COPY_ATTR(repr, object->getRepr(), "v-mathematical");
+ COPY_ATTR(repr, object->getRepr(), "v-hanging");
+ COPY_ATTR(repr, object->getRepr(), "underline-position");
+ COPY_ATTR(repr, object->getRepr(), "underline-thickness");
+ COPY_ATTR(repr, object->getRepr(), "strikethrough-position");
+ COPY_ATTR(repr, object->getRepr(), "strikethrough-thickness");
+ COPY_ATTR(repr, object->getRepr(), "overline-position");
+ COPY_ATTR(repr, object->getRepr(), "overline-thickness");
}
if (((SPObjectClass *) (parent_class))->write) {
diff --git a/src/sp-font.cpp b/src/sp-font.cpp
index b2003cf08..64f7bd481 100644
--- a/src/sp-font.cpp
+++ b/src/sp-font.cpp
@@ -9,6 +9,7 @@
*
* Author:
* Felipe C. da S. Sanches <juca@members.fsf.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008, Felipe C. da S. Sanches
*
@@ -101,14 +102,14 @@ static void sp_font_build(SPObject *object, SPDocument *document, Inkscape::XML:
((SPObjectClass *) (parent_class))->build(object, document, repr);
}
- sp_object_read_attr(object, "horiz-origin-x");
- sp_object_read_attr(object, "horiz-origin-y");
- sp_object_read_attr(object, "horiz-adv-x");
- sp_object_read_attr(object, "vert-origin-x");
- sp_object_read_attr(object, "vert-origin-y");
- sp_object_read_attr(object, "vert-adv-y");
+ object->readAttr( "horiz-origin-x" );
+ object->readAttr( "horiz-origin-y" );
+ object->readAttr( "horiz-adv-x" );
+ object->readAttr( "vert-origin-x" );
+ object->readAttr( "vert-origin-y" );
+ object->readAttr( "vert-adv-y" );
- sp_document_add_resource(document, "font", object);
+ document->addResource("font", object);
}
@@ -150,7 +151,7 @@ sp_font_remove_child(SPObject *object, Inkscape::XML::Node *child)
static void sp_font_release(SPObject *object)
{
//SPFont *font = SP_FONT(object);
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "font", object);
+ SP_OBJECT_DOCUMENT(object)->removeResource("font", object);
if (((SPObjectClass *) parent_class)->release) {
((SPObjectClass *) parent_class)->release(object);
@@ -232,12 +233,12 @@ static void
sp_font_update(SPObject *object, SPCtx *ctx, guint flags)
{
if (flags & (SP_OBJECT_MODIFIED_FLAG)) {
- sp_object_read_attr(object, "horiz-origin-x");
- sp_object_read_attr(object, "horiz-origin-y");
- sp_object_read_attr(object, "horiz-adv-x");
- sp_object_read_attr(object, "vert-origin-x");
- sp_object_read_attr(object, "vert-origin-y");
- sp_object_read_attr(object, "vert-adv-y");
+ object->readAttr( "horiz-origin-x" );
+ object->readAttr( "horiz-origin-y" );
+ object->readAttr( "horiz-adv-x" );
+ object->readAttr( "vert-origin-x" );
+ object->readAttr( "vert-origin-y" );
+ object->readAttr( "vert-adv-y" );
}
if (((SPObjectClass *) parent_class)->update) {
@@ -263,12 +264,14 @@ static Inkscape::XML::Node *sp_font_write(SPObject *object, Inkscape::XML::Docum
sp_repr_set_svg_double(repr, "vert-adv-y", font->vert_adv_y);
if (repr != SP_OBJECT_REPR(object)) {
- COPY_ATTR(repr, object->repr, "horiz-origin-x");
- COPY_ATTR(repr, object->repr, "horiz-origin-y");
- COPY_ATTR(repr, object->repr, "horiz-adv-x");
- COPY_ATTR(repr, object->repr, "vert-origin-x");
- COPY_ATTR(repr, object->repr, "vert-origin-y");
- COPY_ATTR(repr, object->repr, "vert-adv-y");
+ // All the below COPY_ATTR funtions are directly using
+ // the XML Tree while they shouldn't
+ COPY_ATTR(repr, object->getRepr(), "horiz-origin-x");
+ COPY_ATTR(repr, object->getRepr(), "horiz-origin-y");
+ COPY_ATTR(repr, object->getRepr(), "horiz-adv-x");
+ COPY_ATTR(repr, object->getRepr(), "vert-origin-x");
+ COPY_ATTR(repr, object->getRepr(), "vert-origin-y");
+ COPY_ATTR(repr, object->getRepr(), "vert-adv-y");
}
if (((SPObjectClass *) (parent_class))->write) {
diff --git a/src/sp-glyph-kerning.cpp b/src/sp-glyph-kerning.cpp
index d62fbb2c2..7a9f9b2ff 100644
--- a/src/sp-glyph-kerning.cpp
+++ b/src/sp-glyph-kerning.cpp
@@ -11,6 +11,7 @@
*
* Author:
* Felipe C. da S. Sanches <juca@members.fsf.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008, Felipe C. da S. Sanches
*
@@ -42,15 +43,15 @@ GType sp_glyph_kerning_h_get_type(void)
if (!type) {
GTypeInfo info = {
sizeof(SPGlyphKerningClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
+ NULL, /* base_init */
+ NULL, /* base_finalize */
(GClassInitFunc) sp_glyph_kerning_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
+ NULL, /* class_finalize */
+ NULL, /* class_data */
sizeof(SPHkern),
- 16, /* n_preallocs */
+ 16, /* n_preallocs */
(GInstanceInitFunc) sp_glyph_kerning_init,
- NULL, /* value_table */
+ NULL, /* value_table */
};
type = g_type_register_static(SP_TYPE_OBJECT, "SPHkern", &info, (GTypeFlags) 0);
}
@@ -65,15 +66,15 @@ GType sp_glyph_kerning_v_get_type(void)
if (!type) {
GTypeInfo info = {
sizeof(SPGlyphKerningClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
+ NULL, /* base_init */
+ NULL, /* base_finalize */
(GClassInitFunc) sp_glyph_kerning_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
+ NULL, /* class_finalize */
+ NULL, /* class_data */
sizeof(SPVkern),
- 16, /* n_preallocs */
+ 16, /* n_preallocs */
(GInstanceInitFunc) sp_glyph_kerning_init,
- NULL, /* value_table */
+ NULL, /* value_table */
};
type = g_type_register_static(SP_TYPE_OBJECT, "SPVkern", &info, (GTypeFlags) 0);
}
@@ -110,11 +111,11 @@ static void sp_glyph_kerning_build(SPObject *object, SPDocument *document, Inksc
((SPObjectClass *) (parent_class))->build(object, document, repr);
}
- sp_object_read_attr(object, "u1");
- sp_object_read_attr(object, "g1");
- sp_object_read_attr(object, "u2");
- sp_object_read_attr(object, "g2");
- sp_object_read_attr(object, "k");
+ object->readAttr( "u1" );
+ object->readAttr( "g1" );
+ object->readAttr( "u2" );
+ object->readAttr( "g2" );
+ object->readAttr( "k" );
}
static void sp_glyph_kerning_release(SPObject *object)
@@ -216,10 +217,10 @@ sp_glyph_kerning_update(SPObject *object, SPCtx *ctx, guint flags)
if (flags & SP_OBJECT_MODIFIED_FLAG) {
/* do something to trigger redisplay, updates? */
- sp_object_read_attr(object, "u1");
- sp_object_read_attr(object, "u2");
- sp_object_read_attr(object, "g2");
- sp_object_read_attr(object, "k");
+ object->readAttr( "u1" );
+ object->readAttr( "u2" );
+ object->readAttr( "g2" );
+ object->readAttr( "k" );
}
if (((SPObjectClass *) parent_class)->update) {
@@ -250,11 +251,13 @@ static Inkscape::XML::Node *sp_glyph_kerning_write(SPObject *object, Inkscape::X
sp_repr_set_svg_double(repr, "vert-adv-y", glyph->vert_adv_y);
*/
if (repr != SP_OBJECT_REPR(object)) {
- COPY_ATTR(repr, object->repr, "u1");
- COPY_ATTR(repr, object->repr, "g1");
- COPY_ATTR(repr, object->repr, "u2");
- COPY_ATTR(repr, object->repr, "g2");
- COPY_ATTR(repr, object->repr, "k");
+ // All the COPY_ATTR functions below use
+ // XML Tree directly, while they shouldn't.
+ COPY_ATTR(repr, object->getRepr(), "u1");
+ COPY_ATTR(repr, object->getRepr(), "g1");
+ COPY_ATTR(repr, object->getRepr(), "u2");
+ COPY_ATTR(repr, object->getRepr(), "g2");
+ COPY_ATTR(repr, object->getRepr(), "k");
}
if (((SPObjectClass *) (parent_class))->write) {
diff --git a/src/sp-glyph.cpp b/src/sp-glyph.cpp
index 0b3b85d3f..6f7238133 100644
--- a/src/sp-glyph.cpp
+++ b/src/sp-glyph.cpp
@@ -10,6 +10,7 @@
*
* Author:
* Felipe C. da S. Sanches <juca@members.fsf.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008, Felipe C. da S. Sanches
*
@@ -39,15 +40,15 @@ GType sp_glyph_get_type(void)
if (!type) {
GTypeInfo info = {
sizeof(SPGlyphClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
+ NULL, /* base_init */
+ NULL, /* base_finalize */
(GClassInitFunc) sp_glyph_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
+ NULL, /* class_finalize */
+ NULL, /* class_data */
sizeof(SPGlyph),
- 16, /* n_preallocs */
+ 16, /* n_preallocs */
(GInstanceInitFunc) sp_glyph_init,
- NULL, /* value_table */
+ NULL, /* value_table */
};
type = g_type_register_static(SP_TYPE_OBJECT, "SPGlyph", &info, (GTypeFlags) 0);
}
@@ -90,16 +91,16 @@ static void sp_glyph_build(SPObject *object, SPDocument *document, Inkscape::XML
((SPObjectClass *) (parent_class))->build(object, document, repr);
}
- sp_object_read_attr(object, "unicode");
- sp_object_read_attr(object, "glyph-name");
- sp_object_read_attr(object, "d");
- sp_object_read_attr(object, "orientation");
- sp_object_read_attr(object, "arabic-form");
- sp_object_read_attr(object, "lang");
- sp_object_read_attr(object, "horiz-adv-x");
- sp_object_read_attr(object, "vert-origin-x");
- sp_object_read_attr(object, "vert-origin-y");
- sp_object_read_attr(object, "vert-adv-y");
+ object->readAttr( "unicode" );
+ object->readAttr( "glyph-name" );
+ object->readAttr( "d" );
+ object->readAttr( "orientation" );
+ object->readAttr( "arabic-form" );
+ object->readAttr( "lang" );
+ object->readAttr( "horiz-adv-x" );
+ object->readAttr( "vert-origin-x" );
+ object->readAttr( "vert-origin-y" );
+ object->readAttr( "vert-adv-y" );
}
static void sp_glyph_release(SPObject *object)
@@ -250,16 +251,16 @@ sp_glyph_update(SPObject *object, SPCtx *ctx, guint flags)
if (flags & SP_OBJECT_MODIFIED_FLAG) {
/* do something to trigger redisplay, updates? */
- sp_object_read_attr(object, "unicode");
- sp_object_read_attr(object, "glyph-name");
- sp_object_read_attr(object, "d");
- sp_object_read_attr(object, "orientation");
- sp_object_read_attr(object, "arabic-form");
- sp_object_read_attr(object, "lang");
- sp_object_read_attr(object, "horiz-adv-x");
- sp_object_read_attr(object, "vert-origin-x");
- sp_object_read_attr(object, "vert-origin-y");
- sp_object_read_attr(object, "vert-adv-y");
+ object->readAttr( "unicode" );
+ object->readAttr( "glyph-name" );
+ object->readAttr( "d" );
+ object->readAttr( "orientation" );
+ object->readAttr( "arabic-form" );
+ object->readAttr( "lang" );
+ object->readAttr( "horiz-adv-x" );
+ object->readAttr( "vert-origin-x" );
+ object->readAttr( "vert-origin-y" );
+ object->readAttr( "vert-adv-y" );
}
if (((SPObjectClass *) parent_class)->update) {
@@ -290,16 +291,18 @@ static Inkscape::XML::Node *sp_glyph_write(SPObject *object, Inkscape::XML::Docu
sp_repr_set_svg_double(repr, "vert-adv-y", glyph->vert_adv_y);
*/
if (repr != SP_OBJECT_REPR(object)) {
- COPY_ATTR(repr, object->repr, "unicode");
- COPY_ATTR(repr, object->repr, "glyph-name");
- COPY_ATTR(repr, object->repr, "d");
- COPY_ATTR(repr, object->repr, "orientation");
- COPY_ATTR(repr, object->repr, "arabic-form");
- COPY_ATTR(repr, object->repr, "lang");
- COPY_ATTR(repr, object->repr, "horiz-adv-x");
- COPY_ATTR(repr, object->repr, "vert-origin-x");
- COPY_ATTR(repr, object->repr, "vert-origin-y");
- COPY_ATTR(repr, object->repr, "vert-adv-y");
+ // All the COPY_ATTR functions below use
+ // XML Tree directly while they shouldn't.
+ COPY_ATTR(repr, object->getRepr(), "unicode");
+ COPY_ATTR(repr, object->getRepr(), "glyph-name");
+ COPY_ATTR(repr, object->getRepr(), "d");
+ COPY_ATTR(repr, object->getRepr(), "orientation");
+ COPY_ATTR(repr, object->getRepr(), "arabic-form");
+ COPY_ATTR(repr, object->getRepr(), "lang");
+ COPY_ATTR(repr, object->getRepr(), "horiz-adv-x");
+ COPY_ATTR(repr, object->getRepr(), "vert-origin-x");
+ COPY_ATTR(repr, object->getRepr(), "vert-origin-y");
+ COPY_ATTR(repr, object->getRepr(), "vert-adv-y");
}
if (((SPObjectClass *) (parent_class))->write) {
diff --git a/src/sp-gradient-test.h b/src/sp-gradient-test.h
index a664218e0..5ab08467d 100644
--- a/src/sp-gradient-test.h
+++ b/src/sp-gradient-test.h
@@ -1,4 +1,3 @@
-
#ifndef SEEN_SP_GRADIENT_TEST_H
#define SEEN_SP_GRADIENT_TEST_H
@@ -25,7 +24,7 @@ public:
{
if ( _doc )
{
- sp_document_unref( _doc );
+ _doc->doUnref();
}
}
@@ -56,13 +55,13 @@ public:
SPGradient *gr = static_cast<SPGradient *>(g_object_new(SP_TYPE_GRADIENT, NULL));
SP_OBJECT(gr)->document = _doc;
- sp_object_set(SP_OBJECT(gr), SP_ATTR_GRADIENTTRANSFORM, "translate(5, 8)");
+ SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, "translate(5, 8)");
TS_ASSERT_EQUALS( gr->gradientTransform, Geom::Matrix(Geom::Translate(5, 8)) );
- sp_object_set(SP_OBJECT(gr), SP_ATTR_GRADIENTTRANSFORM, "");
+ SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, "");
TS_ASSERT_EQUALS( gr->gradientTransform, Geom::identity() );
- sp_object_set(SP_OBJECT(gr), SP_ATTR_GRADIENTTRANSFORM, "rotate(90)");
+ SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, "rotate(90)");
TS_ASSERT_EQUALS( gr->gradientTransform, Geom::Matrix(rotate_degrees(90)) );
g_object_unref(gr);
@@ -74,8 +73,8 @@ public:
SPGradient *gr = static_cast<SPGradient *>(g_object_new(SP_TYPE_GRADIENT, NULL));
SP_OBJECT(gr)->document = _doc;
- sp_object_set(SP_OBJECT(gr), SP_ATTR_GRADIENTTRANSFORM, "matrix(0, 1, -1, 0, 0, 0)");
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(_doc);
+ SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, "matrix(0, 1, -1, 0, 0, 0)");
+ Inkscape::XML::Document *xml_doc = _doc->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:radialGradient");
SP_OBJECT(gr)->updateRepr(repr, SP_OBJECT_WRITE_ALL);
{
@@ -136,7 +135,7 @@ public:
sp_gradient_set_gs2d_matrix(gr, funny, larger_rect, gs2d);
TS_ASSERT( Geom::matrix_equalp(gr->gradientTransform, grXform, 1e-12) );
- sp_object_set(SP_OBJECT(gr), SP_ATTR_GRADIENTUNITS, "userSpaceOnUse");
+ SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTUNITS, "userSpaceOnUse");
Geom::Matrix const user_g2d(sp_gradient_get_g2d_matrix(gr, funny, larger_rect));
Geom::Matrix const user_gs2d(sp_gradient_get_gs2d_matrix(gr, funny, larger_rect));
TS_ASSERT_EQUALS( user_g2d, funny );
diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp
index 092bb993a..c211e4891 100644
--- a/src/sp-gradient.cpp
+++ b/src/sp-gradient.cpp
@@ -6,6 +6,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Jasper van de Gronde <th.v.d.gronde@hccnet.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -138,10 +140,10 @@ static void sp_stop_build(SPObject *object, SPDocument *document, Inkscape::XML:
if (((SPObjectClass *) stop_parent_class)->build)
(* ((SPObjectClass *) stop_parent_class)->build)(object, document, repr);
- sp_object_read_attr(object, "offset");
- sp_object_read_attr(object, "stop-color");
- sp_object_read_attr(object, "stop-opacity");
- sp_object_read_attr(object, "style");
+ object->readAttr( "offset" );
+ object->readAttr( "stop-color" );
+ object->readAttr( "stop-opacity" );
+ object->readAttr( "style" );
}
/**
@@ -165,7 +167,7 @@ sp_stop_set(SPObject *object, unsigned key, gchar const *value)
* stop-color and stop-opacity properties.
*/
{
- gchar const *p = sp_object_get_style_property(object, "stop-color", "black");
+ gchar const *p = object->getStyleProperty( "stop-color", "black");
if (streq(p, "currentColor")) {
stop->currentColor = true;
} else {
@@ -173,7 +175,7 @@ sp_stop_set(SPObject *object, unsigned key, gchar const *value)
}
}
{
- gchar const *p = sp_object_get_style_property(object, "stop-opacity", "1");
+ gchar const *p = object->getStyleProperty( "stop-opacity", "1");
gdouble opacity = sp_svg_read_percentage(p, stop->opacity);
stop->opacity = opacity;
}
@@ -182,7 +184,7 @@ sp_stop_set(SPObject *object, unsigned key, gchar const *value)
}
case SP_PROP_STOP_COLOR: {
{
- gchar const *p = sp_object_get_style_property(object, "stop-color", "black");
+ gchar const *p = object->getStyleProperty( "stop-color", "black");
if (streq(p, "currentColor")) {
stop->currentColor = true;
} else {
@@ -195,7 +197,7 @@ sp_stop_set(SPObject *object, unsigned key, gchar const *value)
}
case SP_PROP_STOP_OPACITY: {
{
- gchar const *p = sp_object_get_style_property(object, "stop-opacity", "1");
+ gchar const *p = object->getStyleProperty( "stop-opacity", "1");
gdouble opacity = sp_svg_read_percentage(p, stop->opacity);
stop->opacity = opacity;
}
@@ -287,7 +289,7 @@ void SPGradient::setSwatch( bool swatch )
if ( swatch != isSwatch() ) {
this->swatch = swatch; // to make isSolid() work, this happens first
gchar const* paintVal = swatch ? (isSolid() ? "solid" : "gradient") : 0;
- sp_object_setAttribute( this, "osb:paint", paintVal, 0 );
+ setAttribute( "osb:paint", paintVal, 0 );
requestModified( SP_OBJECT_MODIFIED_FLAG );
}
@@ -304,7 +306,7 @@ sp_stop_get_rgba32(SPStop const *const stop)
* value depends on user agent, and don't give any further restrictions that I can
* see.) */
if (stop->currentColor) {
- char const *str = sp_object_get_style_property(stop, "color", NULL);
+ char const *str = stop->getStyleProperty( "color", NULL);
if (str) {
rgb0 = sp_svg_read_color(str, rgb0);
}
@@ -411,21 +413,21 @@ void SPGradientImpl::build(SPObject *object, SPDocument *document, Inkscape::XML
(* ((SPObjectClass *) gradient_parent_class)->build)(object, document, repr);
}
- for ( SPObject *ochild = sp_object_first_child(object); ochild; ochild = ochild->next ) {
+ for ( SPObject *ochild = object->firstChild() ; ochild ; ochild = ochild->getNext() ) {
if (SP_IS_STOP(ochild)) {
gradient->has_stops = TRUE;
break;
}
}
- sp_object_read_attr(object, "gradientUnits");
- sp_object_read_attr(object, "gradientTransform");
- sp_object_read_attr(object, "spreadMethod");
- sp_object_read_attr(object, "xlink:href");
- sp_object_read_attr(object, "osb:paint");
+ object->readAttr( "gradientUnits" );
+ object->readAttr( "gradientTransform" );
+ object->readAttr( "spreadMethod" );
+ object->readAttr( "xlink:href" );
+ object->readAttr( "osb:paint" );
- /* Register ourselves */
- sp_document_add_resource(document, "gradient", object);
+ // Register ourselves
+ document->addResource("gradient", object);
}
/**
@@ -436,12 +438,12 @@ void SPGradientImpl::release(SPObject *object)
SPGradient *gradient = (SPGradient *) object;
#ifdef SP_GRADIENT_VERBOSE
- g_print("Releasing gradient %s\n", SP_OBJECT_ID(object));
+ g_print("Releasing gradient %s\n", object->getId());
#endif
if (SP_OBJECT_DOCUMENT(object)) {
/* Unregister ourselves */
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "gradient", SP_OBJECT(object));
+ SP_OBJECT_DOCUMENT(object)->removeResource("gradient", SP_OBJECT(object));
}
if (gradient->ref) {
@@ -530,7 +532,7 @@ void SPGradientImpl::setGradientAttr(SPObject *object, unsigned key, gchar const
// Might need to flip solid/gradient
Glib::ustring paintVal = ( gr->hasStops() && (gr->getStopCount() == 0) ) ? "solid" : "gradient";
if ( paintVal != value ) {
- sp_object_setAttribute( gr, "osb:paint", paintVal.c_str(), 0 );
+ gr->setAttribute( "osb:paint", paintVal.c_str(), 0 );
modified = true;
}
}
@@ -589,13 +591,13 @@ void SPGradientImpl::childAdded(SPObject *object, Inkscape::XML::Node *child, In
(* ((SPObjectClass *) gradient_parent_class)->child_added)(object, child, ref);
}
- SPObject *ochild = sp_object_get_child_by_repr(object, child);
+ SPObject *ochild = object->get_child_by_repr(child);
if ( ochild && SP_IS_STOP(ochild) ) {
gr->has_stops = TRUE;
if ( gr->getStopCount() > 0 ) {
- gchar const * attr = gr->repr->attribute("osb:paint");
+ gchar const * attr = gr->getAttribute("osb:paint");
if ( attr && strcmp(attr, "gradient") ) {
- sp_object_setAttribute( gr, "osb:paint", "gradient", 0 );
+ gr->setAttribute( "osb:paint", "gradient", 0 );
}
}
}
@@ -618,8 +620,7 @@ void SPGradientImpl::removeChild(SPObject *object, Inkscape::XML::Node *child)
}
gr->has_stops = FALSE;
- SPObject *ochild;
- for ( ochild = sp_object_first_child(object) ; ochild ; ochild = SP_OBJECT_NEXT(ochild) ) {
+ for ( SPObject *ochild = object->firstChild() ; ochild ; ochild = ochild->getNext() ) {
if (SP_IS_STOP(ochild)) {
gr->has_stops = TRUE;
break;
@@ -627,9 +628,9 @@ void SPGradientImpl::removeChild(SPObject *object, Inkscape::XML::Node *child)
}
if ( gr->getStopCount() == 0 ) {
- gchar const * attr = gr->repr->attribute("osb:paint");
+ gchar const * attr = gr->getAttribute("osb:paint");
if ( attr && strcmp(attr, "solid") ) {
- sp_object_setAttribute( gr, "osb:paint", "solid", 0 );
+ gr->setAttribute( "osb:paint", "solid", 0 );
}
}
@@ -657,7 +658,7 @@ void SPGradientImpl::modified(SPObject *object, guint flags)
// FIXME: climb up the ladder of hrefs
GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
g_object_ref(G_OBJECT(child));
l = g_slist_prepend(l, child);
}
@@ -675,7 +676,7 @@ void SPGradientImpl::modified(SPObject *object, guint flags)
SPStop* SPGradient::getFirstStop()
{
SPStop* first = 0;
- for (SPObject *ochild = sp_object_first_child(this); ochild && !first; ochild = SP_OBJECT_NEXT(ochild)) {
+ for (SPObject *ochild = firstChild(); ochild && !first; ochild = ochild->getNext()) {
if (SP_IS_STOP(ochild)) {
first = SP_STOP(ochild);
}
@@ -707,7 +708,7 @@ Inkscape::XML::Node *SPGradientImpl::write(SPObject *object, Inkscape::XML::Docu
if (flags & SP_OBJECT_WRITE_BUILD) {
GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(object); child; child = SP_OBJECT_NEXT(child)) {
+ for (SPObject *child = object->firstChild(); child; child = child->getNext()) {
Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
if (crepr) {
l = g_slist_prepend(l, crepr);
@@ -950,7 +951,7 @@ sp_gradient_repr_write_vector(SPGradient *gr)
g_return_if_fail(gr != NULL);
g_return_if_fail(SP_IS_GRADIENT(gr));
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(gr));
+ Inkscape::XML::Document *xml_doc = SP_OBJECT_DOCUMENT(gr)->getReprDoc();
Inkscape::XML::Node *repr = SP_OBJECT_REPR(gr);
/* We have to be careful, as vector may be our own, so construct repr list at first */
@@ -1006,9 +1007,7 @@ bool SPGradient::invalidateVector()
void SPGradient::rebuildVector()
{
gint len = 0;
- for ( SPObject *child = sp_object_first_child(SP_OBJECT(this)) ;
- child != NULL ;
- child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = firstChild() ; child ; child = child->getNext() ) {
if (SP_IS_STOP(child)) {
len ++;
}
@@ -1030,9 +1029,7 @@ void SPGradient::rebuildVector()
}
}
- for (SPObject *child = sp_object_first_child(SP_OBJECT(this)) ;
- child != NULL;
- child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = firstChild(); child; child = child->getNext() ) {
if (SP_IS_STOP(child)) {
SPStop *stop = SP_STOP(child);
@@ -1222,10 +1219,10 @@ static void sp_lineargradient_build(SPObject *object,
if (((SPObjectClass *) lg_parent_class)->build)
(* ((SPObjectClass *) lg_parent_class)->build)(object, document, repr);
- sp_object_read_attr(object, "x1");
- sp_object_read_attr(object, "y1");
- sp_object_read_attr(object, "x2");
- sp_object_read_attr(object, "y2");
+ object->readAttr( "x1" );
+ object->readAttr( "y1" );
+ object->readAttr( "x2" );
+ object->readAttr( "y2" );
}
/**
@@ -1386,11 +1383,11 @@ sp_radialgradient_build(SPObject *object, SPDocument *document, Inkscape::XML::N
if (((SPObjectClass *) rg_parent_class)->build)
(* ((SPObjectClass *) rg_parent_class)->build)(object, document, repr);
- sp_object_read_attr(object, "cx");
- sp_object_read_attr(object, "cy");
- sp_object_read_attr(object, "r");
- sp_object_read_attr(object, "fx");
- sp_object_read_attr(object, "fy");
+ object->readAttr( "cx" );
+ object->readAttr( "cy" );
+ object->readAttr( "r" );
+ object->readAttr( "fx" );
+ object->readAttr( "fy" );
}
/**
diff --git a/src/sp-guide-attachment.h b/src/sp-guide-attachment.h
index e42b2ed32..e5c63d04e 100644
--- a/src/sp-guide-attachment.h
+++ b/src/sp-guide-attachment.h
@@ -1,7 +1,8 @@
-#ifndef __SP_GUIDE_ATTACHMENT_H__
-#define __SP_GUIDE_ATTACHMENT_H__
+#ifndef SEEN_SP_GUIDE_ATTACHMENT_H
+#define SEEN_SP_GUIDE_ATTACHMENT_H
#include <forward.h>
+#include "sp-item.h"
class SPGuideAttachment {
public:
@@ -28,8 +29,7 @@ public:
}
};
-
-#endif /* !__SP_GUIDE_ATTACHMENT_H__ */
+#endif // SEEN_SP_GUIDE_ATTACHMENT_H
/*
Local Variables:
diff --git a/src/sp-guide.cpp b/src/sp-guide.cpp
index f5edf7d97..f92d79116 100644
--- a/src/sp-guide.cpp
+++ b/src/sp-guide.cpp
@@ -1,5 +1,3 @@
-#define __SP_GUIDE_C__
-
/*
* Inkscape guideline implementation
*
@@ -7,6 +5,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Peter Moulder <pmoulder@mail.csse.monash.edu.au>
* Johan Engelen
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2000-2002 authors
* Copyright (C) 2004 Monash University
@@ -41,6 +41,7 @@
#include <2geom/angle.h>
#include "document.h"
+using Inkscape::DocumentUndo;
using std::vector;
enum {
@@ -73,7 +74,7 @@ GType sp_guide_get_type(void)
sizeof(SPGuide),
16,
(GInstanceInitFunc) sp_guide_init,
- NULL, /* value_table */
+ NULL, /* value_table */
};
guide_type = g_type_register_static(SP_TYPE_OBJECT, "SPGuide", &guide_info, (GTypeFlags) 0);
}
@@ -158,8 +159,8 @@ static void sp_guide_build(SPObject *object, SPDocument *document, Inkscape::XML
(* ((SPObjectClass *) (parent_class))->build)(object, document, repr);
}
- sp_object_read_attr(object, "orientation");
- sp_object_read_attr(object, "position");
+ object->readAttr( "orientation" );
+ object->readAttr( "position" );
}
static void sp_guide_release(SPObject *object)
@@ -241,10 +242,10 @@ static void sp_guide_set(SPObject *object, unsigned int key, const gchar *value)
}
}
-SPGuide *
-sp_guide_create(SPDesktop *desktop, Geom::Point const &pt1, Geom::Point const &pt2) {
- SPDocument *doc=sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+SPGuide *SPGuide::createSPGuide(SPDesktop *desktop, Geom::Point const &pt1, Geom::Point const &pt2)
+{
+ SPDocument *doc = sp_desktop_document(desktop);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("sodipodi:guide");
@@ -253,7 +254,7 @@ sp_guide_create(SPDesktop *desktop, Geom::Point const &pt1, Geom::Point const &p
sp_repr_set_point(repr, "position", pt1);
sp_repr_set_point(repr, "orientation", n);
- SP_OBJECT_REPR(desktop->namedview)->appendChild(repr);
+ desktop->namedview->appendChild(repr);
Inkscape::GC::release(repr);
SPGuide *guide= SP_GUIDE(doc->getObjectByRepr(repr));
@@ -263,7 +264,7 @@ sp_guide_create(SPDesktop *desktop, Geom::Point const &pt1, Geom::Point const &p
void
sp_guide_pt_pairs_to_guides(SPDesktop *dt, std::list<std::pair<Geom::Point, Geom::Point> > &pts) {
for (std::list<std::pair<Geom::Point, Geom::Point> >::iterator i = pts.begin(); i != pts.end(); ++i) {
- sp_guide_create(dt, (*i).first, (*i).second);
+ SPGuide::createSPGuide(dt, (*i).first, (*i).second);
}
}
@@ -273,7 +274,7 @@ sp_guide_create_guides_around_page(SPDesktop *dt) {
std::list<std::pair<Geom::Point, Geom::Point> > pts;
Geom::Point A(0, 0);
- Geom::Point C(sp_document_width(doc), sp_document_height(doc));
+ Geom::Point C(doc->getWidth(), doc->getHeight());
Geom::Point B(C[Geom::X], 0);
Geom::Point D(0, C[Geom::Y]);
@@ -284,30 +285,28 @@ sp_guide_create_guides_around_page(SPDesktop *dt) {
sp_guide_pt_pairs_to_guides(dt, pts);
- sp_document_done (doc, SP_VERB_NONE, _("Guides Around Page"));
+ DocumentUndo::done(doc, SP_VERB_NONE, _("Guides Around Page"));
}
-void sp_guide_show(SPGuide *guide, SPCanvasGroup *group, GCallback handler)
+void SPGuide::showSPGuide(SPCanvasGroup *group, GCallback handler)
{
- SPCanvasItem *item = sp_guideline_new(group, guide->point_on_line, guide->normal_to_line);
- sp_guideline_set_color(SP_GUIDELINE(item), guide->color);
+ SPCanvasItem *item = sp_guideline_new(group, point_on_line, normal_to_line);
+ sp_guideline_set_color(SP_GUIDELINE(item), color);
- g_signal_connect(G_OBJECT(item), "event", G_CALLBACK(handler), guide);
+ g_signal_connect(G_OBJECT(item), "event", G_CALLBACK(handler), this);
- guide->views = g_slist_prepend(guide->views, item);
+ views = g_slist_prepend(views, item);
}
-void sp_guide_hide(SPGuide *guide, SPCanvas *canvas)
+void SPGuide::hideSPGuide(SPCanvas *canvas)
{
- g_assert(guide != NULL);
- g_assert(SP_IS_GUIDE(guide));
g_assert(canvas != NULL);
g_assert(SP_IS_CANVAS(canvas));
- for (GSList *l = guide->views; l != NULL; l = l->next) {
+ for (GSList *l = views; l != NULL; l = l->next) {
if (canvas == SP_CANVAS_ITEM(l->data)->canvas) {
sp_guideline_delete(SP_GUIDELINE(l->data));
- guide->views = g_slist_remove(guide->views, l->data);
+ views = g_slist_remove(views, l->data);
return;
}
}
@@ -315,14 +314,12 @@ void sp_guide_hide(SPGuide *guide, SPCanvas *canvas)
g_assert_not_reached();
}
-void sp_guide_sensitize(SPGuide *guide, SPCanvas *canvas, gboolean sensitive)
+void SPGuide::sensitize(SPCanvas *canvas, gboolean sensitive)
{
- g_assert(guide != NULL);
- g_assert(SP_IS_GUIDE(guide));
g_assert(canvas != NULL);
g_assert(SP_IS_CANVAS(canvas));
- for (GSList *l = guide->views; l != NULL; l = l->next) {
+ for (GSList *l = views; l != NULL; l = l->next) {
if (canvas == SP_CANVAS_ITEM(l->data)->canvas) {
sp_guideline_set_sensitive(SP_GUIDELINE(l->data), sensitive);
return;
@@ -332,14 +329,14 @@ void sp_guide_sensitize(SPGuide *guide, SPCanvas *canvas, gboolean sensitive)
g_assert_not_reached();
}
-Geom::Point sp_guide_position_from_pt(SPGuide const *guide, Geom::Point const &pt)
+Geom::Point SPGuide::getPositionFrom(Geom::Point const &pt) const
{
- return -(pt - guide->point_on_line);
+ return -(pt - point_on_line);
}
-double sp_guide_distance_from_pt(SPGuide const *guide, Geom::Point const &pt)
+double SPGuide::getDistanceFrom(Geom::Point const &pt) const
{
- return Geom::dot(pt - guide->point_on_line, guide->normal_to_line);
+ return Geom::dot(pt - point_on_line, normal_to_line);
}
/**
@@ -358,7 +355,8 @@ void sp_guide_moveto(SPGuide const &guide, Geom::Point const point_on_line, bool
/* Calling sp_repr_set_point must precede calling sp_item_notify_moveto in the commit
case, so that the guide's new position is available for sp_item_rm_unsatisfied_cns. */
if (commit) {
- sp_repr_set_point(SP_OBJECT(&guide)->repr, "position", point_on_line);
+ //XML Tree being used here directly while it shouldn't be.
+ sp_repr_set_point(SP_OBJECT(&guide)->getRepr(), "position", point_on_line);
}
/* DISABLED CODE BECAUSE SPGuideAttachment IS NOT USE AT THE MOMENT (johan)
@@ -388,7 +386,8 @@ void sp_guide_set_normal(SPGuide const &guide, Geom::Point const normal_to_line,
/* Calling sp_repr_set_svg_point must precede calling sp_item_notify_moveto in the commit
case, so that the guide's new position is available for sp_item_rm_unsatisfied_cns. */
if (commit) {
- sp_repr_set_point(SP_OBJECT(&guide)->repr, "orientation", normal_to_line);
+ //XML Tree being used directly while it shouldn't be
+ sp_repr_set_point(SP_OBJECT(&guide)->getRepr(), "orientation", normal_to_line);
}
/* DISABLED CODE BECAUSE SPGuideAttachment IS NOT USE AT THE MOMENT (johan)
@@ -458,7 +457,8 @@ void sp_guide_remove(SPGuide *guide)
}
guide->attached_items.clear();
- sp_repr_unparent(SP_OBJECT(guide)->repr);
+ //XML Tree being used directly while it shouldn't be.
+ sp_repr_unparent(SP_OBJECT(guide)->getRepr());
}
/*
diff --git a/src/sp-guide.h b/src/sp-guide.h
index 91c181a70..4fc4032db 100644
--- a/src/sp-guide.h
+++ b/src/sp-guide.h
@@ -1,5 +1,5 @@
-#ifndef SP_GUIDE_H
-#define SP_GUIDE_H
+#ifndef SEEN_SP_GUIDE_H
+#define SEEN_SP_GUIDE_H
/*
* SPGuide
@@ -8,6 +8,8 @@
*
* Copyright (C) Lauris Kaplinski 2000
* Copyright (C) Johan Engelen 2007
+ * Abhishek Sharma
+ * Jon A. Cruz <jon@joncruz.org>
*
*/
@@ -25,7 +27,8 @@
#define SP_IS_GUIDE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_GUIDE))
/* Represents the constraint on p that dot(g.direction, p) == g.position. */
-struct SPGuide : public SPObject {
+class SPGuide : public SPObject {
+public:
Geom::Point normal_to_line;
Geom::Point point_on_line;
@@ -34,27 +37,27 @@ struct SPGuide : public SPObject {
GSList *views;
std::vector<SPGuideAttachment> attached_items;
- inline bool is_horizontal() const { return (normal_to_line[Geom::X] == 0.); };
- inline bool is_vertical() const { return (normal_to_line[Geom::Y] == 0.); };
+ inline bool isHorizontal() const { return (normal_to_line[Geom::X] == 0.); };
+ inline bool isVertical() const { return (normal_to_line[Geom::Y] == 0.); };
inline double angle() const { return std::atan2( - normal_to_line[Geom::X], normal_to_line[Geom::Y] ); };
+ static SPGuide *createSPGuide(SPDesktop *desktop, Geom::Point const &pt1, Geom::Point const &pt2);
+ void showSPGuide(SPCanvasGroup *group, GCallback handler);
+ void hideSPGuide(SPCanvas *canvas);
+ void sensitize(SPCanvas *canvas, gboolean sensitive);
+ Geom::Point getPositionFrom(Geom::Point const &pt) const;
+ double getDistanceFrom(Geom::Point const &pt) const;
};
-struct SPGuideClass {
+class SPGuideClass {
+public:
SPObjectClass parent_class;
};
GType sp_guide_get_type();
-SPGuide *sp_guide_create(SPDesktop *desktop, Geom::Point const &pt1, Geom::Point const &pt2);
void sp_guide_pt_pairs_to_guides(SPDesktop *dt, std::list<std::pair<Geom::Point, Geom::Point> > &pts);
void sp_guide_create_guides_around_page(SPDesktop *dt);
-void sp_guide_show(SPGuide *guide, SPCanvasGroup *group, GCallback handler);
-void sp_guide_hide(SPGuide *guide, SPCanvas *canvas);
-void sp_guide_sensitize(SPGuide *guide, SPCanvas *canvas, gboolean sensitive);
-
-Geom::Point sp_guide_position_from_pt(SPGuide const *guide, Geom::Point const &pt);
-double sp_guide_distance_from_pt(SPGuide const *guide, Geom::Point const &pt);
void sp_guide_moveto(SPGuide const &guide, Geom::Point const point_on_line, bool const commit);
void sp_guide_set_normal(SPGuide const &guide, Geom::Point const normal_to_line, bool const commit);
void sp_guide_remove(SPGuide *guide);
@@ -62,7 +65,7 @@ void sp_guide_remove(SPGuide *guide);
char *sp_guide_description(SPGuide const *guide, const bool verbose = true);
-#endif /* !SP_GUIDE_H */
+#endif // SEEN_SP_GUIDE_H
/*
Local Variables:
diff --git a/src/sp-image.cpp b/src/sp-image.cpp
index 22392e635..6507d8948 100644
--- a/src/sp-image.cpp
+++ b/src/sp-image.cpp
@@ -4,6 +4,7 @@
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Edward Flick (EAF)
+ * Abhishek Sharma
*
* Copyright (C) 1999-2005 Authors
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -563,7 +564,7 @@ sp_image_get_type (void)
(GInstanceInitFunc) sp_image_init,
NULL, /* value_table */
};
- image_type = g_type_register_static (sp_item_get_type (), "SPImage", &image_info, (GTypeFlags)0);
+ image_type = g_type_register_static (SPItem::getType (), "SPImage", &image_info, (GTypeFlags)0);
}
return image_type;
}
@@ -579,7 +580,7 @@ sp_image_class_init (SPImageClass * klass)
sp_object_class = (SPObjectClass *) klass;
item_class = (SPItemClass *) klass;
- parent_class = (SPItemClass*)g_type_class_ref (sp_item_get_type ());
+ parent_class = (SPItemClass*)g_type_class_ref (SPItem::getType ());
sp_object_class->build = sp_image_build;
sp_object_class->release = sp_image_release;
@@ -625,16 +626,16 @@ sp_image_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
((SPObjectClass *) parent_class)->build (object, document, repr);
}
- sp_object_read_attr (object, "xlink:href");
- 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, "preserveAspectRatio");
- sp_object_read_attr (object, "color-profile");
+ object->readAttr( "xlink:href" );
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "width" );
+ object->readAttr( "height" );
+ object->readAttr( "preserveAspectRatio" );
+ object->readAttr( "color-profile" );
/* Register */
- sp_document_add_resource (document, "image", object);
+ document->addResource("image", object);
}
static void
@@ -644,7 +645,7 @@ sp_image_release (SPObject *object)
if (SP_OBJECT_DOCUMENT (object)) {
/* Unregister ourselves */
- sp_document_remove_resource (SP_OBJECT_DOCUMENT (object), "image", SP_OBJECT (object));
+ SP_OBJECT_DOCUMENT(object)->removeResource("image", SP_OBJECT(object));
}
if (image->href) {
@@ -826,9 +827,13 @@ sp_image_update (SPObject *object, SPCtx *ctx, unsigned int flags)
pixbuf = sp_image_repr_read_image (
image->lastMod,
image->pixPath,
- object->repr->attribute("xlink:href"),
- object->repr->attribute("sodipodi:absref"),
- doc->base);
+
+ //XML Tree being used directly while it shouldn't be.
+ object->getRepr()->attribute("xlink:href"),
+
+ //XML Tree being used directly while it shouldn't be.
+ object->getRepr()->attribute("sodipodi:absref"),
+ doc->getBase());
if (pixbuf) {
pixbuf = sp_image_pixbuf_force_rgba (pixbuf);
// BLIP
@@ -1042,7 +1047,9 @@ sp_image_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XM
if (image->height._set) {
sp_repr_set_svg_double(repr, "height", image->height.computed);
}
- repr->setAttribute("preserveAspectRatio", object->repr->attribute("preserveAspectRatio"));
+
+ //XML Tree being used directly here while it shouldn't be...
+ repr->setAttribute("preserveAspectRatio", object->getRepr()->attribute("preserveAspectRatio"));
#if ENABLE_LCMS
if (image->color_profile) {
repr->setAttribute("color-profile", image->color_profile);
@@ -1305,7 +1312,7 @@ static void sp_image_snappoints(SPItem const *item, std::vector<Inkscape::SnapCa
double const y0 = image.y.computed;
double const x1 = x0 + image.width.computed;
double const y1 = y0 + image.height.computed;
- Geom::Matrix const i2d (sp_item_i2d_affine (item));
+ Geom::Matrix const i2d (item->i2d_affine ());
p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x0, y0) * i2d, Inkscape::SNAPSOURCE_CORNER, Inkscape::SNAPTARGET_CORNER));
p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x0, y1) * i2d, Inkscape::SNAPSOURCE_CORNER, Inkscape::SNAPTARGET_CORNER));
p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x1, y1) * i2d, Inkscape::SNAPSOURCE_CORNER, Inkscape::SNAPTARGET_CORNER));
diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp
index beca62d7b..05ffc16ec 100644
--- a/src/sp-item-group.cpp
+++ b/src/sp-item-group.cpp
@@ -1,5 +1,3 @@
-#define __SP_GROUP_C__
-
/*
* SVG <g> implementation
*
@@ -7,6 +5,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2006 authors
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -48,6 +48,8 @@
#include "sp-desc.h"
#include "sp-switch.h"
+using Inkscape::DocumentUndo;
+
static void sp_group_class_init (SPGroupClass *klass);
static void sp_group_init (SPGroup *group);
static void sp_group_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
@@ -143,7 +145,7 @@ sp_group_init (SPGroup *group)
static void sp_group_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- sp_object_read_attr(object, "inkscape:groupmode");
+ object->readAttr( "inkscape:groupmode" );
if (((SPObjectClass *)parent_class)->build) {
((SPObjectClass *)parent_class)->build(object, document, repr);
@@ -152,7 +154,7 @@ static void sp_group_build(SPObject *object, SPDocument *document, Inkscape::XML
static void sp_group_release(SPObject *object) {
if ( SP_GROUP(object)->_layer_mode == SPGroup::LAYER ) {
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "layer", object);
+ SP_OBJECT_DOCUMENT(object)->removeResource("layer", object);
}
if (((SPObjectClass *)parent_class)->release) {
((SPObjectClass *)parent_class)->release(object);
@@ -217,28 +219,27 @@ sp_group_modified (SPObject *object, guint flags)
SP_GROUP(object)->group->onModified(flags);
}
-static Inkscape::XML::Node *
-sp_group_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+static Inkscape::XML::Node * sp_group_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
- SPGroup *group;
- SPObject *child;
- Inkscape::XML::Node *crepr;
-
- group = SP_GROUP (object);
+ SPGroup *group = SP_GROUP(object);
if (flags & SP_OBJECT_WRITE_BUILD) {
GSList *l;
if (!repr) {
- if (SP_IS_SWITCH(object))
+ if (SP_IS_SWITCH(object)) {
repr = xml_doc->createElement("svg:switch");
- else
+ } else {
repr = xml_doc->createElement("svg:g");
+ }
}
l = NULL;
- for (child = sp_object_first_child(object); child != NULL; child = SP_OBJECT_NEXT(child) ) {
- if (SP_IS_TITLE(child) || SP_IS_DESC(child)) continue;
- crepr = child->updateRepr(xml_doc, NULL, flags);
- if (crepr) l = g_slist_prepend (l, crepr);
+ for (SPObject *child = object->firstChild(); child; child = child->getNext() ) {
+ if ( !SP_IS_TITLE(child) && !SP_IS_DESC(child) ) {
+ Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
+ if (crepr) {
+ l = g_slist_prepend (l, crepr);
+ }
+ }
}
while (l) {
repr->addChild((Inkscape::XML::Node *) l->data, NULL);
@@ -246,9 +247,10 @@ sp_group_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XM
l = g_slist_remove (l, l->data);
}
} else {
- for (child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
- if (SP_IS_TITLE(child) || SP_IS_DESC(child)) continue;
- child->updateRepr(flags);
+ for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ if ( !SP_IS_TITLE(child) && !SP_IS_DESC(child) ) {
+ child->updateRepr(flags);
+ }
}
}
@@ -266,8 +268,9 @@ sp_group_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XM
repr->setAttribute("inkscape:groupmode", value);
}
- if (((SPObjectClass *) (parent_class))->write)
+ if (((SPObjectClass *) (parent_class))->write) {
((SPObjectClass *) (parent_class))->write (object, xml_doc, repr, flags);
+ }
return repr;
}
@@ -322,14 +325,12 @@ sp_group_hide (SPItem *item, unsigned int key)
SP_GROUP(item)->group->hide(key);
}
-static void sp_group_snappoints (SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs)
+static void sp_group_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs)
{
- for (SPObject const *o = sp_object_first_child(SP_OBJECT(item));
- o != NULL;
- o = SP_OBJECT_NEXT(o))
+ for ( SPObject const *o = item->firstChild(); o; o = o->getNext() )
{
if (SP_IS_ITEM(o)) {
- sp_item_snappoints(SP_ITEM(o), p, snapprefs);
+ SP_ITEM(o)->getSnappoints(p, snapprefs);
}
}
}
@@ -342,7 +343,7 @@ sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done)
g_return_if_fail (SP_IS_GROUP (group));
SPDocument *doc = SP_OBJECT_DOCUMENT (group);
- SPObject *root = SP_DOCUMENT_ROOT (doc);
+ SPObject *root = doc->getRoot();
SPObject *defs = SP_OBJECT (SP_ROOT (root)->defs);
SPItem *gitem = SP_ITEM (group);
@@ -351,7 +352,7 @@ sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done)
g_return_if_fail (!strcmp (grepr->name(), "svg:g") || !strcmp (grepr->name(), "svg:a") || !strcmp (grepr->name(), "svg:switch"));
// this converts the gradient/pattern fill/stroke on the group, if any, to userSpaceOnUse
- sp_item_adjust_paint_recursive (gitem, Geom::identity(), Geom::identity(), false);
+ gitem->adjust_paint_recursive (Geom::identity(), Geom::identity(), false);
SPItem *pitem = SP_ITEM (SP_OBJECT_PARENT (gitem));
Inkscape::XML::Node *prepr = SP_OBJECT_REPR (pitem);
@@ -366,7 +367,7 @@ sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done)
/* Step 1 - generate lists of children objects */
GSList *items = NULL;
GSList *objects = NULL;
- for (SPObject *child = sp_object_first_child(SP_OBJECT(group)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = group->firstChild() ; child; child = child->getNext() ) {
if (SP_IS_ITEM (child)) {
@@ -375,7 +376,7 @@ sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done)
/* Merging of style */
// this converts the gradient/pattern fill/stroke, if any, to userSpaceOnUse; we need to do
// it here _before_ the new transform is set, so as to use the pre-transform bbox
- sp_item_adjust_paint_recursive (citem, Geom::identity(), Geom::identity(), false);
+ citem->adjust_paint_recursive (Geom::identity(), Geom::identity(), false);
sp_style_merge_from_dying_parent(SP_OBJECT_STYLE(child), SP_OBJECT_STYLE(gitem));
/*
@@ -485,7 +486,7 @@ sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done)
// fill in the children list if non-null
SPItem *item = (SPItem *) doc->getObjectByRepr(repr);
- sp_item_write_transform(item, repr, item->transform, NULL, false);
+ item->doWriteTransform(repr, item->transform, NULL, false);
Inkscape::GC::release(repr);
if (children && SP_IS_ITEM (item))
@@ -494,38 +495,36 @@ sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done)
items = g_slist_remove (items, items->data);
}
- if (do_done)
- sp_document_done (doc, SP_VERB_NONE, _("Ungroup"));
+ if (do_done) {
+ DocumentUndo::done(doc, SP_VERB_NONE, _("Ungroup"));
+ }
}
/*
* some API for list aspect of SPGroup
*/
-GSList *
-sp_item_group_item_list (SPGroup * group)
+GSList *sp_item_group_item_list(SPGroup * group)
{
- g_return_val_if_fail (group != NULL, NULL);
- g_return_val_if_fail (SP_IS_GROUP (group), NULL);
+ g_return_val_if_fail(group != NULL, NULL);
+ g_return_val_if_fail(SP_IS_GROUP(group), NULL);
GSList *s = NULL;
- for (SPObject *o = sp_object_first_child(SP_OBJECT(group)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
- if (SP_IS_ITEM (o)) {
- s = g_slist_prepend (s, o);
+ for (SPObject *o = group->firstChild() ; o ; o = o->getNext() ) {
+ if ( SP_IS_ITEM(o) ) {
+ s = g_slist_prepend(s, o);
}
}
return g_slist_reverse (s);
}
-SPObject *
-sp_item_group_get_child_by_name (SPGroup *group, SPObject *ref, const gchar *name)
+SPObject *sp_item_group_get_child_by_name(SPGroup *group, SPObject *ref, const gchar *name)
{
- SPObject *child;
- child = (ref) ? SP_OBJECT_NEXT(ref) : sp_object_first_child(SP_OBJECT(group));
- while ( child && strcmp (SP_OBJECT_REPR(child)->name(), name) ) {
- child = SP_OBJECT_NEXT(child);
+ SPObject *child = (ref) ? ref->getNext() : group->firstChild();
+ while ( child && strcmp(child->getRepr()->name(), name) ) {
+ child = child->getNext();
}
return child;
}
@@ -533,9 +532,9 @@ sp_item_group_get_child_by_name (SPGroup *group, SPObject *ref, const gchar *nam
void SPGroup::setLayerMode(LayerMode mode) {
if ( _layer_mode != mode ) {
if ( mode == LAYER ) {
- sp_document_add_resource(SP_OBJECT_DOCUMENT(this), "layer", this);
+ SP_OBJECT_DOCUMENT(this)->addResource("layer", this);
} else if ( _layer_mode == LAYER ) {
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(this), "layer", this);
+ SP_OBJECT_DOCUMENT(this)->removeResource("layer", this);
}
_layer_mode = mode;
_updateLayerMode();
@@ -573,12 +572,10 @@ void SPGroup::_updateLayerMode(unsigned int display_key) {
void SPGroup::translateChildItems(Geom::Translate const &tr)
{
- if (this->hasChildren())
- {
- SPObject *o = NULL;
- for (o = sp_object_first_child(SP_OBJECT(this)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
- if (SP_IS_ITEM (o)) {
- sp_item_move_rel(static_cast<SPItem *>(o), tr);
+ if ( hasChildren() ) {
+ for (SPObject *o = firstChild() ; o ; o = o->getNext() ) {
+ if ( SP_IS_ITEM(o) ) {
+ sp_item_move_rel(reinterpret_cast<SPItem *>(o), tr);
}
}
}
@@ -602,7 +599,7 @@ void CGroup::onChildAdded(Inkscape::XML::Node *child) {
NRArenaItem *ac;
for (v = _group->display; v != NULL; v = v->next) {
- ac = sp_item_invoke_show (SP_ITEM (ochild), NR_ARENA_ITEM_ARENA (v->arenaitem), v->key, v->flags);
+ ac = SP_ITEM (ochild)->invoke_show (NR_ARENA_ITEM_ARENA (v->arenaitem), v->key, v->flags);
if (ac) {
nr_arena_item_append_child (v->arenaitem, ac);
@@ -610,16 +607,16 @@ void CGroup::onChildAdded(Inkscape::XML::Node *child) {
}
}
} else { // general case
- SPObject *ochild = sp_object_get_child_by_repr(_group, child);
+ SPObject *ochild = _group->get_child_by_repr(child);
if ( ochild && SP_IS_ITEM(ochild) ) {
/* TODO: this should be moved into SPItem somehow */
SPItemView *v;
NRArenaItem *ac;
- unsigned position = sp_item_pos_in_parent(SP_ITEM(ochild));
+ unsigned position = SP_ITEM(ochild)->pos_in_parent();
for (v = _group->display; v != NULL; v = v->next) {
- ac = sp_item_invoke_show (SP_ITEM (ochild), NR_ARENA_ITEM_ARENA (v->arenaitem), v->key, v->flags);
+ ac = SP_ITEM (ochild)->invoke_show (NR_ARENA_ITEM_ARENA (v->arenaitem), v->key, v->flags);
if (ac) {
nr_arena_item_add_child (v->arenaitem, ac, NULL);
@@ -707,7 +704,7 @@ void CGroup::calculateBBox(NRRect *bbox, Geom::Matrix const &transform, unsigned
if (SP_IS_ITEM(o) && !SP_ITEM(o)->isHidden()) {
SPItem *child = SP_ITEM(o);
Geom::Matrix const ct(child->transform * transform);
- sp_item_invoke_bbox_full(child, dummy_bbox, ct, flags, FALSE);
+ child->invoke_bbox_full( dummy_bbox, ct, flags, FALSE);
}
l = g_slist_remove (l, o);
}
@@ -720,7 +717,7 @@ void CGroup::onPrint(SPPrintContext *ctx) {
while (l) {
SPObject *o = SP_OBJECT (l->data);
if (SP_IS_ITEM(o)) {
- sp_item_invoke_print (SP_ITEM (o), ctx);
+ SP_ITEM(o)->invoke_print (ctx);
}
l = g_slist_remove (l, o);
}
@@ -728,7 +725,7 @@ void CGroup::onPrint(SPPrintContext *ctx) {
gint CGroup::getItemCount() {
gint len = 0;
- for (SPObject *o = sp_object_first_child(SP_OBJECT(_group)) ; o != NULL ; o = SP_OBJECT_NEXT(o) ) {
+ for (SPObject *o = _group->firstChild() ; o ; o = o->getNext() ) {
if (SP_IS_ITEM(o)) {
len++;
}
@@ -769,7 +766,7 @@ void CGroup::_showChildren (NRArena *arena, NRArenaItem *ai, unsigned int key, u
SPObject *o = SP_OBJECT (l->data);
if (SP_IS_ITEM (o)) {
child = SP_ITEM (o);
- ac = sp_item_invoke_show (child, arena, key, flags);
+ ac = child->invoke_show (arena, key, flags);
if (ac) {
nr_arena_item_add_child (ai, ac, ar);
ar = ac;
@@ -787,7 +784,7 @@ void CGroup::hide (unsigned int key) {
SPObject *o = SP_OBJECT (l->data);
if (SP_IS_ITEM (o)) {
child = SP_ITEM (o);
- sp_item_invoke_hide (child, key);
+ child->invoke_hide (key);
}
l = g_slist_remove (l, o);
}
@@ -798,11 +795,11 @@ void CGroup::hide (unsigned int key) {
void CGroup::onOrderChanged (Inkscape::XML::Node *child, Inkscape::XML::Node *, Inkscape::XML::Node *)
{
- SPObject *ochild = sp_object_get_child_by_repr(_group, child);
+ SPObject *ochild = _group->get_child_by_repr(child);
if ( ochild && SP_IS_ITEM(ochild) ) {
/* TODO: this should be moved into SPItem somehow */
SPItemView *v;
- unsigned position = sp_item_pos_in_parent(SP_ITEM(ochild));
+ unsigned position = SP_ITEM(ochild)->pos_in_parent();
for ( v = SP_ITEM (ochild)->display ; v != NULL ; v = v->next ) {
nr_arena_item_set_order (v->arenaitem, position);
}
@@ -856,12 +853,12 @@ sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write)
if (SP_IS_PATH(subitem)) {
c = sp_path_get_original_curve(SP_PATH(subitem));
} else {
- c = sp_shape_get_curve(SP_SHAPE(subitem));
+ c = SP_SHAPE(subitem)->getCurve();
}
// only run LPEs when the shape has a curve defined
if (c) {
sp_lpe_item_perform_path_effect(SP_LPE_ITEM(topgroup), c);
- sp_shape_set_curve(SP_SHAPE(subitem), c, TRUE);
+ SP_SHAPE(subitem)->setCurve(c, TRUE);
if (write) {
Inkscape::XML::Node *repr = SP_OBJECT_REPR(subitem);
diff --git a/src/sp-item-notify-moveto.cpp b/src/sp-item-notify-moveto.cpp
index 6383a1fae..928d6f82f 100644
--- a/src/sp-item-notify-moveto.cpp
+++ b/src/sp-item-notify-moveto.cpp
@@ -25,7 +25,7 @@ void sp_item_notify_moveto(SPItem &item, SPGuide const &mv_g, int const snappoin
g_return_if_fail( dir_lensq != 0 );
std::vector<Inkscape::SnapCandidatePoint> snappoints;
- sp_item_snappoints(&item, snappoints, NULL);
+ item.getSnappoints(snappoints, NULL);
g_return_if_fail( snappoint_ix < int(snappoints.size()) );
double const pos0 = dot(dir, snappoints[snappoint_ix].getPoint());
@@ -41,7 +41,7 @@ void sp_item_notify_moveto(SPItem &item, SPGuide const &mv_g, int const snappoin
s = (position - pos0) / dot(dir, dir). */
Geom::Translate const tr( ( position - pos0 )
* ( dir / dir_lensq ) );
- sp_item_set_i2d_affine(&item, sp_item_i2d_affine(&item) * tr);
+ item.set_i2d_affine(item.i2d_affine() * tr);
/// \todo Reget snappoints, check satisfied.
if (commit) {
@@ -49,7 +49,7 @@ void sp_item_notify_moveto(SPItem &item, SPGuide const &mv_g, int const snappoin
/* Commit repr. */
{
- sp_item_write_transform(&item, SP_OBJECT_REPR(&item), item.transform);
+ item.doWriteTransform(SP_OBJECT_REPR(&item), item.transform);
}
sp_item_rm_unsatisfied_cns(item);
diff --git a/src/sp-item-rm-unsatisfied-cns.cpp b/src/sp-item-rm-unsatisfied-cns.cpp
index 78628f4a5..de4c7dca1 100644
--- a/src/sp-item-rm-unsatisfied-cns.cpp
+++ b/src/sp-item-rm-unsatisfied-cns.cpp
@@ -15,13 +15,13 @@ void sp_item_rm_unsatisfied_cns(SPItem &item)
return;
}
std::vector<Inkscape::SnapCandidatePoint> snappoints;
- sp_item_snappoints(&item, snappoints, NULL);
+ item.getSnappoints(snappoints, NULL);
for (unsigned i = item.constraints.size(); i--;) {
g_assert( i < item.constraints.size() );
SPGuideConstraint const &cn = item.constraints[i];
int const snappoint_ix = cn.snappoint_ix;
g_assert( snappoint_ix < int(snappoints.size()) );
- if (!approx_equal( sp_guide_distance_from_pt(cn.g, snappoints[snappoint_ix].getPoint()), 0) ) {
+ if (!approx_equal( cn.g->getDistanceFrom(snappoints[snappoint_ix].getPoint()), 0) ) {
remove_last(cn.g->attached_items, SPGuideAttachment(&item, cn.snappoint_ix));
g_assert( i < item.constraints.size() );
vector<SPGuideConstraint>::iterator const ei(&item.constraints[i]);
diff --git a/src/sp-item-transform.cpp b/src/sp-item-transform.cpp
index e9a219cc7..5b983b64b 100644
--- a/src/sp-item-transform.cpp
+++ b/src/sp-item-transform.cpp
@@ -1,5 +1,3 @@
-#define __SP_ITEM_TRANSFORM_C__
-
/*
* Transforming single items
*
@@ -8,6 +6,7 @@
* Frank Felfe <innerspace@iname.com>
* bulia byak <buliabyak@gmail.com>
* Johan Engelen <goejendaagh@zonnet.nl>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2008 authors
*
@@ -25,9 +24,9 @@ sp_item_rotate_rel(SPItem *item, Geom::Rotate const &rotation)
Geom::Matrix affine = Geom::Matrix(s).inverse() * Geom::Matrix(rotation) * Geom::Matrix(s);
// Rotate item.
- sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * (Geom::Matrix)affine);
+ item->set_i2d_affine(item->i2d_affine() * (Geom::Matrix)affine);
// Use each item's own transform writer, consistent with sp_selection_apply_affine()
- sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform);
+ item->doWriteTransform(SP_OBJECT_REPR(item), item->transform);
// Restore the center position (it's changed because the bbox center changed)
if (item->isCenterSet()) {
@@ -39,11 +38,11 @@ sp_item_rotate_rel(SPItem *item, Geom::Rotate const &rotation)
void
sp_item_scale_rel (SPItem *item, Geom::Scale const &scale)
{
- Geom::OptRect bbox = sp_item_bbox_desktop(item);
+ Geom::OptRect bbox = item->getBboxDesktop();
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);
- sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform);
+ item->set_i2d_affine(item->i2d_affine() * s.inverse() * scale * s);
+ item->doWriteTransform(SP_OBJECT_REPR(item), item->transform);
}
}
@@ -56,8 +55,8 @@ sp_item_skew_rel (SPItem *item, double skewX, double skewY)
Geom::Matrix const skew(1, skewY, skewX, 1, 0, 0);
Geom::Matrix affine = Geom::Matrix(s).inverse() * skew * Geom::Matrix(s);
- sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * affine);
- sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform);
+ item->set_i2d_affine(item->i2d_affine() * affine);
+ item->doWriteTransform(SP_OBJECT_REPR(item), item->transform);
// Restore the center position (it's changed because the bbox center changed)
if (item->isCenterSet()) {
@@ -68,9 +67,9 @@ sp_item_skew_rel (SPItem *item, double skewX, double skewY)
void sp_item_move_rel(SPItem *item, Geom::Translate const &tr)
{
- sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * tr);
+ item->set_i2d_affine(item->i2d_affine() * tr);
- sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform);
+ item->doWriteTransform(SP_OBJECT_REPR(item), item->transform);
}
/*
diff --git a/src/sp-item-update-cns.cpp b/src/sp-item-update-cns.cpp
index c90df01ba..315d09108 100644
--- a/src/sp-item-update-cns.cpp
+++ b/src/sp-item-update-cns.cpp
@@ -10,7 +10,7 @@ using std::vector;
void sp_item_update_cns(SPItem &item, SPDesktop const &desktop)
{
std::vector<Inkscape::SnapCandidatePoint> snappoints;
- sp_item_snappoints(&item, snappoints, NULL);
+ item.getSnappoints(snappoints, NULL);
/* TODO: Implement the ordering. */
vector<SPGuideConstraint> found_cns;
satisfied_guide_cns(desktop, snappoints, found_cns);
diff --git a/src/sp-item.cpp b/src/sp-item.cpp
index 6c14537c5..d2d940644 100644
--- a/src/sp-item.cpp
+++ b/src/sp-item.cpp
@@ -6,6 +6,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ * Abhishek Sharma
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2001-2006 authors
* Copyright (C) 2001 Ximian, Inc.
@@ -46,6 +48,7 @@
#include "sp-text.h"
#include "sp-item-rm-unsatisfied-cns.h"
#include "sp-pattern.h"
+#include "sp-paint-server.h"
#include "sp-switch.h"
#include "sp-guide-constraint.h"
#include "gradient-chemistry.h"
@@ -75,38 +78,20 @@
#define noSP_ITEM_DEBUG_IDLE
-static void sp_item_class_init(SPItemClass *klass);
-static void sp_item_init(SPItem *item);
-
-static void sp_item_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static void sp_item_release(SPObject *object);
-static void sp_item_set(SPObject *object, unsigned key, gchar const *value);
-static void sp_item_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_item_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static gchar *sp_item_private_description(SPItem *item);
-static void sp_item_private_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs);
-
-static SPItemView *sp_item_view_new_prepend(SPItemView *list, SPItem *item, unsigned flags, unsigned key, NRArenaItem *arenaitem);
-static SPItemView *sp_item_view_list_remove(SPItemView *list, SPItemView *view);
-
-static SPObjectClass *parent_class;
-
-static void clip_ref_changed(SPObject *old_clip, SPObject *clip, SPItem *item);
-static void mask_ref_changed(SPObject *old_clip, SPObject *clip, SPItem *item);
+SPObjectClass * SPItemClass::static_parent_class=0;
/**
* Registers SPItem class and returns its type number.
*/
GType
-sp_item_get_type(void)
+SPItem::getType(void)
{
static GType type = 0;
if (!type) {
GTypeInfo info = {
sizeof(SPItemClass),
NULL, NULL,
- (GClassInitFunc) sp_item_class_init,
+ (GClassInitFunc) SPItemClass::sp_item_class_init,
NULL, NULL,
sizeof(SPItem),
16,
@@ -121,60 +106,59 @@ sp_item_get_type(void)
/**
* SPItem vtable initialization.
*/
-static void
-sp_item_class_init(SPItemClass *klass)
+void
+SPItemClass::sp_item_class_init(SPItemClass *klass)
{
SPObjectClass *sp_object_class = (SPObjectClass *) klass;
- parent_class = (SPObjectClass *)g_type_class_ref(SP_TYPE_OBJECT);
+ static_parent_class = (SPObjectClass *)g_type_class_ref(SP_TYPE_OBJECT);
- sp_object_class->build = sp_item_build;
- sp_object_class->release = sp_item_release;
- sp_object_class->set = sp_item_set;
- sp_object_class->update = sp_item_update;
- sp_object_class->write = sp_item_write;
+ sp_object_class->build = SPItem::sp_item_build;
+ sp_object_class->release = SPItem::sp_item_release;
+ sp_object_class->set = SPItem::sp_item_set;
+ sp_object_class->update = SPItem::sp_item_update;
+ sp_object_class->write = SPItem::sp_item_write;
- klass->description = sp_item_private_description;
- klass->snappoints = sp_item_private_snappoints;
+ klass->description = SPItem::sp_item_private_description;
+ klass->snappoints = SPItem::sp_item_private_snappoints;
}
/**
* Callback for SPItem object initialization.
*/
-static void
-sp_item_init(SPItem *item)
+void SPItem::sp_item_init(SPItem *item)
{
item->init();
}
void SPItem::init() {
- this->sensitive = TRUE;
+ sensitive = TRUE;
- this->transform_center_x = 0;
- this->transform_center_y = 0;
+ transform_center_x = 0;
+ transform_center_y = 0;
- this->_is_evaluated = true;
- this->_evaluated_status = StatusUnknown;
+ _is_evaluated = true;
+ _evaluated_status = StatusUnknown;
- this->transform = Geom::identity();
+ transform = Geom::identity();
- this->display = NULL;
+ display = NULL;
- this->clip_ref = new SPClipPathReference(this);
- sigc::signal<void, SPObject *, SPObject *> cs1=this->clip_ref->changedSignal();
- sigc::slot2<void,SPObject*, SPObject *> sl1=sigc::bind(sigc::ptr_fun(clip_ref_changed), this);
+ clip_ref = new SPClipPathReference(this);
+ sigc::signal<void, SPObject *, SPObject *> cs1 = clip_ref->changedSignal();
+ sigc::slot2<void,SPObject*, SPObject *> sl1 = sigc::bind(sigc::ptr_fun(clip_ref_changed), this);
_clip_ref_connection = cs1.connect(sl1);
- this->mask_ref = new SPMaskReference(this);
- sigc::signal<void, SPObject *, SPObject *> cs2=this->mask_ref->changedSignal();
+ mask_ref = new SPMaskReference(this);
+ sigc::signal<void, SPObject *, SPObject *> cs2 = mask_ref->changedSignal();
sigc::slot2<void,SPObject*, SPObject *> sl2=sigc::bind(sigc::ptr_fun(mask_ref_changed), this);
_mask_ref_connection = cs2.connect(sl2);
- this->avoidRef = new SPAvoidRef(this);
+ avoidRef = new SPAvoidRef(this);
- new (&this->constraints) std::vector<SPGuideConstraint>();
+ new (&constraints) std::vector<SPGuideConstraint>();
- new (&this->_transformed_signal) sigc::signal<void, Geom::Matrix const *, SPItem *>();
+ new (&_transformed_signal) sigc::signal<void, Geom::Matrix const *, SPItem *>();
}
bool SPItem::isVisibleAndUnlocked() const {
@@ -195,8 +179,8 @@ bool SPItem::isLocked() const {
}
void SPItem::setLocked(bool locked) {
- this->repr->setAttribute("sodipodi:insensitive",
- ( locked ? "1" : NULL ));
+ setAttribute("sodipodi:insensitive",
+ ( locked ? "1" : NULL ));
updateRepr();
}
@@ -246,7 +230,6 @@ void SPItem::resetEvaluated() {
requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
}
} if ( StatusSet == _evaluated_status ) {
- SPObject const *const parent = this->parent;
if (SP_IS_SWITCH(parent)) {
SP_SWITCH(parent)->resetChildEvaluated();
}
@@ -265,34 +248,31 @@ bool SPItem::isEvaluated() const {
* Returns something suitable for the `Hide' checkbox in the Object Properties dialog box.
* Corresponds to setExplicitlyHidden.
*/
-bool
-SPItem::isExplicitlyHidden() const
+bool SPItem::isExplicitlyHidden() const
{
- return (this->style->display.set
- && this->style->display.value == SP_CSS_DISPLAY_NONE);
+ return (style->display.set
+ && style->display.value == SP_CSS_DISPLAY_NONE);
}
/**
* Sets the display CSS property to `hidden' if \a val is true,
* otherwise makes it unset
*/
-void
-SPItem::setExplicitlyHidden(bool const val) {
- this->style->display.set = val;
- this->style->display.value = ( val ? SP_CSS_DISPLAY_NONE : SP_CSS_DISPLAY_INLINE );
- this->style->display.computed = this->style->display.value;
- this->updateRepr();
+void SPItem::setExplicitlyHidden(bool const val) {
+ style->display.set = val;
+ style->display.value = ( val ? SP_CSS_DISPLAY_NONE : SP_CSS_DISPLAY_INLINE );
+ style->display.computed = style->display.value;
+ updateRepr();
}
/**
* Sets the transform_center_x and transform_center_y properties to retain the rotation centre
*/
-void
-SPItem::setCenter(Geom::Point object_centre) {
+void SPItem::setCenter(Geom::Point object_centre) {
// for getBounds() to work
- sp_document_ensure_up_to_date( this->document );
+ document->ensureUpToDate();
- Geom::OptRect bbox = getBounds(sp_item_i2d_affine(this));
+ Geom::OptRect bbox = getBounds(i2d_affine());
if (bbox) {
transform_center_x = object_centre[Geom::X] - bbox->midpoint()[Geom::X];
if (fabs(transform_center_x) < 1e-5) // rounding error
@@ -315,13 +295,13 @@ bool SPItem::isCenterSet() {
Geom::Point SPItem::getCenter() const {
// for getBounds() to work
- sp_document_ensure_up_to_date( this->document );
+ document->ensureUpToDate();
- Geom::OptRect bbox = getBounds(sp_item_i2d_affine(this));
+ Geom::OptRect bbox = getBounds(i2d_affine());
if (bbox) {
- return to_2geom(bbox->midpoint()) + Geom::Point (this->transform_center_x, this->transform_center_y);
+ return to_2geom(bbox->midpoint()) + Geom::Point (transform_center_x, transform_center_y);
} else {
- return Geom::Point (0, 0); // something's wrong!
+ return Geom::Point(0, 0); // something's wrong!
}
}
@@ -338,22 +318,20 @@ void SPItem::raiseToTop() {
using Inkscape::Algorithms::find_last_if;
SPObject *topmost=find_last_if<SPObject::SiblingIterator>(
- this->next, NULL, &is_item
+ next, NULL, &is_item
);
if (topmost) {
- Inkscape::XML::Node *repr = this->repr;
- sp_repr_parent(repr)->changeOrder( repr, topmost->repr );
+ getRepr()->parent()->changeOrder( getRepr(), topmost->getRepr() );
}
}
void SPItem::raiseOne() {
SPObject *next_higher=std::find_if<SPObject::SiblingIterator>(
- this->next, NULL, &is_item
+ next, NULL, &is_item
);
if (next_higher) {
- Inkscape::XML::Node *repr = this->repr;
- Inkscape::XML::Node *ref = next_higher->repr;
- sp_repr_parent(repr)->changeOrder(repr, ref);
+ Inkscape::XML::Node *ref = next_higher->getRepr();
+ getRepr()->parent()->changeOrder(getRepr(), ref);
}
}
@@ -363,16 +341,15 @@ void SPItem::lowerOne() {
MutableList<SPObject &> next_lower=std::find_if(
reverse_list<SPObject::SiblingIterator>(
- this->parent->firstChild(), this
+ parent->firstChild(), this
),
MutableList<SPObject &>(),
&is_item
);
if (next_lower) {
++next_lower;
- Inkscape::XML::Node *repr = this->repr;
- Inkscape::XML::Node *ref = ( next_lower ? next_lower->repr : NULL );
- sp_repr_parent(repr)->changeOrder(repr, ref);
+ Inkscape::XML::Node *ref = ( next_lower ? next_lower->getRepr() : NULL );
+ getRepr()->parent()->changeOrder(getRepr(), ref);
}
}
@@ -383,40 +360,37 @@ void SPItem::lowerToBottom() {
MutableList<SPObject &> bottom=find_last_if(
reverse_list<SPObject::SiblingIterator>(
- this->parent->firstChild(), this
+ parent->firstChild(), this
),
MutableList<SPObject &>(),
&is_item
);
if (bottom) {
++bottom;
- Inkscape::XML::Node *repr = this->repr;
- Inkscape::XML::Node *ref = ( bottom ? bottom->repr : NULL );
- sp_repr_parent(repr)->changeOrder(repr, ref);
+ Inkscape::XML::Node *ref = ( bottom ? bottom->getRepr() : NULL );
+ getRepr()->parent()->changeOrder(getRepr(), ref);
}
}
-static void
-sp_item_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+void SPItem::sp_item_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- sp_object_read_attr(object, "style");
- sp_object_read_attr(object, "transform");
- sp_object_read_attr(object, "clip-path");
- sp_object_read_attr(object, "mask");
- sp_object_read_attr(object, "sodipodi:insensitive");
- sp_object_read_attr(object, "sodipodi:nonprintable");
- sp_object_read_attr(object, "inkscape:transform-center-x");
- sp_object_read_attr(object, "inkscape:transform-center-y");
- sp_object_read_attr(object, "inkscape:connector-avoid");
- sp_object_read_attr(object, "inkscape:connection-points");
+ object->readAttr( "style" );
+ object->readAttr( "transform" );
+ object->readAttr( "clip-path" );
+ object->readAttr( "mask" );
+ object->readAttr( "sodipodi:insensitive" );
+ object->readAttr( "sodipodi:nonprintable" );
+ object->readAttr( "inkscape:transform-center-x" );
+ object->readAttr( "inkscape:transform-center-y" );
+ object->readAttr( "inkscape:connector-avoid" );
+ object->readAttr( "inkscape:connection-points" );
- if (((SPObjectClass *) (parent_class))->build) {
- (* ((SPObjectClass *) (parent_class))->build)(object, document, repr);
+ if (((SPObjectClass *) (SPItemClass::static_parent_class))->build) {
+ (* ((SPObjectClass *) (SPItemClass::static_parent_class))->build)(object, document, repr);
}
}
-static void
-sp_item_release(SPObject *object)
+void SPItem::sp_item_release(SPObject *object)
{
SPItem *item = (SPItem *) object;
@@ -424,7 +398,7 @@ sp_item_release(SPObject *object)
item->_mask_ref_connection.disconnect();
// Note: do this here before the clip_ref is deleted, since calling
- // sp_document_ensure_up_to_date for triggered routing may reference
+ // ensureUpToDate() for triggered routing may reference
// the deleted clip_ref.
if (item->avoidRef) {
delete item->avoidRef;
@@ -443,8 +417,8 @@ sp_item_release(SPObject *object)
item->mask_ref = NULL;
}
- if (((SPObjectClass *) (parent_class))->release) {
- ((SPObjectClass *) parent_class)->release(object);
+ if (((SPObjectClass *) (SPItemClass::static_parent_class))->release) {
+ ((SPObjectClass *) SPItemClass::static_parent_class)->release(object);
}
while (item->display) {
@@ -455,8 +429,7 @@ sp_item_release(SPObject *object)
item->_transformed_signal.~signal();
}
-static void
-sp_item_set(SPObject *object, unsigned key, gchar const *value)
+void SPItem::sp_item_set(SPObject *object, unsigned key, gchar const *value)
{
SPItem *item = (SPItem *) object;
@@ -464,9 +437,9 @@ sp_item_set(SPObject *object, unsigned key, gchar const *value)
case SP_ATTR_TRANSFORM: {
Geom::Matrix t;
if (value && sp_svg_transform_read(value, &t)) {
- sp_item_set_item_transform(item, t);
+ item->set_item_transform(t);
} else {
- sp_item_set_item_transform(item, Geom::identity());
+ item->set_item_transform(Geom::identity());
}
break;
}
@@ -542,45 +515,43 @@ sp_item_set(SPObject *object, unsigned key, gchar const *value)
sp_style_read_from_object(object->style, object);
object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
} else {
- if (((SPObjectClass *) (parent_class))->set) {
- (* ((SPObjectClass *) (parent_class))->set)(object, key, value);
+ if (((SPObjectClass *) (SPItemClass::static_parent_class))->set) {
+ (* ((SPObjectClass *) (SPItemClass::static_parent_class))->set)(object, key, value);
}
}
break;
}
}
-static void
-clip_ref_changed(SPObject *old_clip, SPObject *clip, SPItem *item)
+void SPItem::clip_ref_changed(SPObject *old_clip, SPObject *clip, SPItem *item)
{
if (old_clip) {
SPItemView *v;
/* Hide clippath */
for (v = item->display; v != NULL; v = v->next) {
- sp_clippath_hide(SP_CLIPPATH(old_clip), NR_ARENA_ITEM_GET_KEY(v->arenaitem));
+ SP_CLIPPATH(old_clip)->hide(NR_ARENA_ITEM_GET_KEY(v->arenaitem));
nr_arena_item_set_clip(v->arenaitem, NULL);
}
}
if (SP_IS_CLIPPATH(clip)) {
NRRect bbox;
- sp_item_invoke_bbox(item, &bbox, Geom::identity(), TRUE);
+ item->invoke_bbox( &bbox, Geom::identity(), TRUE);
for (SPItemView *v = item->display; v != NULL; v = v->next) {
if (!v->arenaitem->key) {
- NR_ARENA_ITEM_SET_KEY(v->arenaitem, sp_item_display_key_new(3));
+ NR_ARENA_ITEM_SET_KEY(v->arenaitem, SPItem::display_key_new(3));
}
- NRArenaItem *ai = sp_clippath_show(SP_CLIPPATH(clip),
+ NRArenaItem *ai = SP_CLIPPATH(clip)->show(
NR_ARENA_ITEM_ARENA(v->arenaitem),
NR_ARENA_ITEM_GET_KEY(v->arenaitem));
nr_arena_item_set_clip(v->arenaitem, ai);
nr_arena_item_unref(ai);
- sp_clippath_set_bbox(SP_CLIPPATH(clip), NR_ARENA_ITEM_GET_KEY(v->arenaitem), &bbox);
+ SP_CLIPPATH(clip)->setBBox(NR_ARENA_ITEM_GET_KEY(v->arenaitem), &bbox);
clip->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
}
}
-static void
-mask_ref_changed(SPObject *old_mask, SPObject *mask, SPItem *item)
+void SPItem::mask_ref_changed(SPObject *old_mask, SPObject *mask, SPItem *item)
{
if (old_mask) {
/* Hide mask */
@@ -591,10 +562,10 @@ mask_ref_changed(SPObject *old_mask, SPObject *mask, SPItem *item)
}
if (SP_IS_MASK(mask)) {
NRRect bbox;
- sp_item_invoke_bbox(item, &bbox, Geom::identity(), TRUE);
+ item->invoke_bbox( &bbox, Geom::identity(), TRUE);
for (SPItemView *v = item->display; v != NULL; v = v->next) {
if (!v->arenaitem->key) {
- NR_ARENA_ITEM_SET_KEY(v->arenaitem, sp_item_display_key_new(3));
+ NR_ARENA_ITEM_SET_KEY(v->arenaitem, SPItem::display_key_new(3));
}
NRArenaItem *ai = sp_mask_show(SP_MASK(mask),
NR_ARENA_ITEM_ARENA(v->arenaitem),
@@ -607,13 +578,13 @@ mask_ref_changed(SPObject *old_mask, SPObject *mask, SPItem *item)
}
}
-static void
-sp_item_update(SPObject *object, SPCtx *ctx, guint flags)
+void SPItem::sp_item_update(SPObject *object, SPCtx *ctx, guint flags)
{
SPItem *item = SP_ITEM(object);
- if (((SPObjectClass *) (parent_class))->update)
- (* ((SPObjectClass *) (parent_class))->update)(object, ctx, flags);
+ if (((SPObjectClass *) (SPItemClass::static_parent_class))->update) {
+ (* ((SPObjectClass *) (SPItemClass::static_parent_class))->update)(object, ctx, flags);
+ }
if (flags & (SP_OBJECT_CHILD_MODIFIED_FLAG | SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG)) {
if (flags & SP_OBJECT_MODIFIED_FLAG) {
@@ -627,10 +598,10 @@ sp_item_update(SPObject *object, SPCtx *ctx, guint flags)
if ( clip_path || mask ) {
NRRect bbox;
- sp_item_invoke_bbox(item, &bbox, Geom::identity(), TRUE);
+ item->invoke_bbox( &bbox, Geom::identity(), TRUE);
if (clip_path) {
for (SPItemView *v = item->display; v != NULL; v = v->next) {
- sp_clippath_set_bbox(clip_path, NR_ARENA_ITEM_GET_KEY(v->arenaitem), &bbox);
+ clip_path->setBBox(NR_ARENA_ITEM_GET_KEY(v->arenaitem), &bbox);
}
}
if (mask) {
@@ -651,7 +622,7 @@ sp_item_update(SPObject *object, SPCtx *ctx, guint flags)
/* Update bounding box data used by filters */
if (item->style->filter.set && item->display) {
Geom::OptRect item_bbox;
- sp_item_invoke_bbox(item, item_bbox, Geom::identity(), TRUE, SPItem::GEOMETRIC_BBOX);
+ item->invoke_bbox( item_bbox, Geom::identity(), TRUE, SPItem::GEOMETRIC_BBOX);
SPItemView *itemview = item->display;
do {
@@ -665,8 +636,7 @@ sp_item_update(SPObject *object, SPCtx *ctx, guint flags)
item->avoidRef->handleSettingChange();
}
-static Inkscape::XML::Node *
-sp_item_write(SPObject *const object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+Inkscape::XML::Node *SPItem::sp_item_write(SPObject *const object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
SPObject *child;
SPItem *item = SP_ITEM(object);
@@ -677,7 +647,7 @@ sp_item_write(SPObject *const object, Inkscape::XML::Document *xml_doc, Inkscape
Inkscape::XML::Node *crepr;
GSList *l;
l = NULL;
- for (child = sp_object_first_child(object); child != NULL; child = child->next ) {
+ for (child = object->firstChild(); child != NULL; child = child->next ) {
if (!SP_IS_TITLE(child) && !SP_IS_DESC(child)) continue;
crepr = child->updateRepr(xml_doc, NULL, flags);
if (crepr) l = g_slist_prepend (l, crepr);
@@ -688,7 +658,7 @@ sp_item_write(SPObject *const object, Inkscape::XML::Document *xml_doc, Inkscape
l = g_slist_remove (l, l->data);
}
} else {
- for (child = sp_object_first_child(object) ; child != NULL; child = child->next ) {
+ for (child = object->firstChild() ; child != NULL; child = child->next ) {
if (!SP_IS_TITLE(child) && !SP_IS_DESC(child)) continue;
child->updateRepr(flags);
}
@@ -721,8 +691,8 @@ sp_item_write(SPObject *const object, Inkscape::XML::Document *xml_doc, Inkscape
g_free ((void *) value);
}
- if (((SPObjectClass *) (parent_class))->write) {
- ((SPObjectClass *) (parent_class))->write(object, xml_doc, repr, flags);
+ if (((SPObjectClass *) (SPItemClass::static_parent_class))->write) {
+ ((SPObjectClass *) (SPItemClass::static_parent_class))->write(object, xml_doc, repr, flags);
}
return repr;
@@ -737,21 +707,19 @@ Geom::OptRect SPItem::getBounds(Geom::Matrix const &transform,
unsigned int /*dkey*/) const
{
Geom::OptRect r;
- sp_item_invoke_bbox_full(this, r, transform, type, TRUE);
+ invoke_bbox_full( r, transform, type, TRUE);
return r;
}
-void
-sp_item_invoke_bbox(SPItem const *item, Geom::OptRect &bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type)
+void SPItem::invoke_bbox( Geom::OptRect &bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type)
{
- sp_item_invoke_bbox_full(item, bbox, transform, type, clear);
+ invoke_bbox_full( bbox, transform, type, clear);
}
// 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)
+void SPItem::invoke_bbox( NRRect *bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type)
{
- sp_item_invoke_bbox_full(item, bbox, transform, type, clear);
+ invoke_bbox_full( bbox, transform, type, clear);
}
/** Calls \a item's subclass' bounding box method; clips it by the bbox of clippath, if any; and
@@ -761,12 +729,8 @@ sp_item_invoke_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transf
* \retval bbox Note that there is no guarantee that bbox will contain a rectangle when the
* function returns. If this item does not have a boundingbox, this might well be empty.
*/
-void
-sp_item_invoke_bbox_full(SPItem const *item, Geom::OptRect &bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear)
+void SPItem::invoke_bbox_full( Geom::OptRect &bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear) const
{
- g_assert(item != NULL);
- g_assert(SP_IS_ITEM(item));
-
if (clear) {
bbox = Geom::OptRect();
}
@@ -778,14 +742,14 @@ sp_item_invoke_bbox_full(SPItem const *item, Geom::OptRect &bbox, Geom::Matrix c
temp_bbox.x1 = temp_bbox.y1 = -Geom::infinity();
// call the subclass method
- if (((SPItemClass *) G_OBJECT_GET_CLASS(item))->bbox) {
- ((SPItemClass *) G_OBJECT_GET_CLASS(item))->bbox(item, &temp_bbox, transform, flags);
+ if (((SPItemClass *) G_OBJECT_GET_CLASS(this))->bbox) {
+ ((SPItemClass *) G_OBJECT_GET_CLASS(this))->bbox(this, &temp_bbox, transform, flags);
}
// unless this is geometric bbox, extend by filter area and crop the bbox by clip path, if any
if ((SPItem::BBoxType) flags != SPItem::GEOMETRIC_BBOX) {
- if ( item->style && item->style->filter.href ) {
- SPObject *filter = item->style->getFilter();
+ if ( style && style->filter.href) {
+ SPObject *filter = style->getFilter();
if (filter && SP_IS_FILTER(filter)) {
// default filer area per the SVG spec:
double x = -0.1;
@@ -825,7 +789,7 @@ sp_item_invoke_bbox_full(SPItem const *item, Geom::OptRect &bbox, Geom::Matrix c
}
// transform the expansions by the item's transform:
- Geom::Matrix i2d(sp_item_i2d_affine (item));
+ Geom::Matrix i2d(i2d_affine ());
dx0 *= i2d.expansionX();
dx1 *= i2d.expansionX();
dy0 *= i2d.expansionY();
@@ -838,9 +802,9 @@ sp_item_invoke_bbox_full(SPItem const *item, Geom::OptRect &bbox, Geom::Matrix c
temp_bbox.y1 += dy1;
}
}
- if (item->clip_ref->getObject()) {
+ if (clip_ref->getObject()) {
NRRect b;
- sp_clippath_get_bbox(SP_CLIPPATH(item->clip_ref->getObject()), &b, transform, flags);
+ SP_CLIPPATH(clip_ref->getObject())->getBBox(&b, transform, flags);
nr_rect_d_intersect (&temp_bbox, &temp_bbox, &b);
}
}
@@ -869,11 +833,8 @@ sp_item_invoke_bbox_full(SPItem const *item, Geom::OptRect &bbox, Geom::Matrix c
* 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,
* clones), in turn, call this function in their bbox methods. */
-void
-sp_item_invoke_bbox_full(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear)
+void SPItem::invoke_bbox_full( NRRect *bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear)
{
- g_assert(item != NULL);
- g_assert(SP_IS_ITEM(item));
g_assert(bbox != NULL);
if (clear) {
@@ -886,14 +847,14 @@ sp_item_invoke_bbox_full(SPItem const *item, NRRect *bbox, Geom::Matrix const &t
this_bbox.x1 = this_bbox.y1 = -1e18;
// call the subclass method
- if (((SPItemClass *) G_OBJECT_GET_CLASS(item))->bbox) {
- ((SPItemClass *) G_OBJECT_GET_CLASS(item))->bbox(item, &this_bbox, transform, flags);
+ if (((SPItemClass *) G_OBJECT_GET_CLASS(this))->bbox) {
+ ((SPItemClass *) G_OBJECT_GET_CLASS(this))->bbox(this, &this_bbox, transform, flags);
}
// unless this is geometric bbox, crop the bbox by clip path, if any
- if ((SPItem::BBoxType) flags != SPItem::GEOMETRIC_BBOX && item->clip_ref->getObject()) {
+ if ((SPItem::BBoxType) flags != SPItem::GEOMETRIC_BBOX && clip_ref->getObject()) {
NRRect b;
- sp_clippath_get_bbox(SP_CLIPPATH(item->clip_ref->getObject()), &b, transform, flags);
+ SP_CLIPPATH(clip_ref->getObject())->getBBox(&b, transform, flags);
nr_rect_d_intersect (&this_bbox, &this_bbox, &b);
}
@@ -903,19 +864,15 @@ sp_item_invoke_bbox_full(SPItem const *item, NRRect *bbox, Geom::Matrix const &t
}
}
-unsigned sp_item_pos_in_parent(SPItem *item)
+unsigned SPItem::pos_in_parent()
{
- g_assert(item != NULL);
- g_assert(SP_IS_ITEM(item));
-
- SPObject *parent = item->parent;
g_assert(parent != NULL);
g_assert(SP_IS_OBJECT(parent));
- SPObject *object = item;
+ SPObject *object = this;
- unsigned pos = 0;
- for ( SPObject *iter = sp_object_first_child(parent) ; iter ; iter = iter->next) {
+ unsigned pos=0;
+ for ( SPObject *iter = parent->firstChild() ; iter ; iter = iter->next) {
if ( iter == object ) {
return pos;
}
@@ -928,31 +885,28 @@ unsigned sp_item_pos_in_parent(SPItem *item)
return 0;
}
-void
-sp_item_bbox_desktop(SPItem *item, NRRect *bbox, SPItem::BBoxType type)
+void SPItem::getBboxDesktop(NRRect *bbox, SPItem::BBoxType type)
{
- g_assert(item != NULL);
- g_assert(SP_IS_ITEM(item));
g_assert(bbox != NULL);
- sp_item_invoke_bbox(item, bbox, sp_item_i2d_affine(item), TRUE, type);
+ invoke_bbox( bbox, i2d_affine(), TRUE, type);
}
-Geom::OptRect sp_item_bbox_desktop(SPItem *item, SPItem::BBoxType type)
+Geom::OptRect SPItem::getBboxDesktop(SPItem::BBoxType type)
{
Geom::OptRect rect = Geom::OptRect();
- sp_item_invoke_bbox(item, rect, sp_item_i2d_affine(item), TRUE, type);
+ invoke_bbox( rect, i2d_affine(), TRUE, type);
return rect;
}
-static void sp_item_private_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const */*snapprefs*/)
+void SPItem::sp_item_private_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const */*snapprefs*/)
{
/* This will only be called if the derived class doesn't override this.
* see for example sp_genericellipse_snappoints in sp-ellipse.cpp
* We don't know what shape we could be dealing with here, so we'll just
* return the corners of the bounding box */
- Geom::OptRect bbox = item->getBounds(sp_item_i2d_affine(item));
+ Geom::OptRect bbox = item->getBounds(item->i2d_affine());
if (bbox) {
Geom::Point p1, p2;
@@ -966,34 +920,24 @@ static void sp_item_private_snappoints(SPItem const *item, std::vector<Inkscape:
}
-void sp_item_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs)
+void SPItem::getSnappoints(std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs) const
{
- if (item == NULL) {
- g_warning("sp_item_snappoints: cannot snap because no item is being provided");
- return;
- }
-
- if (!SP_IS_ITEM(item)) {
- g_warning("sp_item_snappoints: cannot snap because this is not a SP_ITEM");
- return;
- }
-
// Get the snappoints of the item
- SPItemClass const &item_class = *(SPItemClass const *) G_OBJECT_GET_CLASS(item);
+ SPItemClass const &item_class = *(SPItemClass const *) G_OBJECT_GET_CLASS(this);
if (item_class.snappoints) {
- item_class.snappoints(item, p, snapprefs);
+ item_class.snappoints(this, p, snapprefs);
}
// Get the snappoints at the item's center
if (snapprefs != NULL && snapprefs->getIncludeItemCenter()) {
- p.push_back(Inkscape::SnapCandidatePoint(item->getCenter(), Inkscape::SNAPSOURCE_ROTATION_CENTER, Inkscape::SNAPTARGET_ROTATION_CENTER));
+ p.push_back(Inkscape::SnapCandidatePoint(getCenter(), Inkscape::SNAPSOURCE_ROTATION_CENTER, Inkscape::SNAPTARGET_ROTATION_CENTER));
}
// Get the snappoints of clipping paths and mask, if any
std::list<SPObject const *> clips_and_masks;
- clips_and_masks.push_back(item->clip_ref->getObject());
- clips_and_masks.push_back(item->mask_ref->getObject());
+ clips_and_masks.push_back(clip_ref->getObject());
+ clips_and_masks.push_back(mask_ref->getObject());
SPDesktop *desktop = inkscape_active_desktop();
for (std::list<SPObject const *>::const_iterator o = clips_and_masks.begin(); o != clips_and_masks.end(); o++) {
@@ -1003,12 +947,12 @@ void sp_item_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidateP
if (SP_IS_ITEM(child)) {
std::vector<Inkscape::SnapCandidatePoint> p_clip_or_mask;
// Please note the recursive call here!
- sp_item_snappoints(SP_ITEM(child), p_clip_or_mask, snapprefs);
+ SP_ITEM(child)->getSnappoints(p_clip_or_mask, snapprefs);
// Take into account the transformation of the item being clipped or masked
for (std::vector<Inkscape::SnapCandidatePoint>::const_iterator p_orig = p_clip_or_mask.begin(); p_orig != p_clip_or_mask.end(); p_orig++) {
// All snappoints are in desktop coordinates, but the item's transformation is
// in document coordinates. Hence the awkward construction below
- Geom::Point pt = desktop->dt2doc((*p_orig).getPoint()) * sp_item_i2d_affine(item);
+ Geom::Point pt = desktop->dt2doc((*p_orig).getPoint()) * i2d_affine();
p.push_back(Inkscape::SnapCandidatePoint(pt, (*p_orig).getSourceType(), (*p_orig).getTargetType()));
}
}
@@ -1017,26 +961,24 @@ void sp_item_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidateP
}
}
-void
-sp_item_invoke_print(SPItem *item, SPPrintContext *ctx)
+void SPItem::invoke_print(SPPrintContext *ctx)
{
- if (!item->isHidden()) {
- if (((SPItemClass *) G_OBJECT_GET_CLASS(item))->print) {
- if (!item->transform.isIdentity()
- || item->style->opacity.value != SP_SCALE24_MAX)
+ if ( !isHidden() ) {
+ if ( reinterpret_cast<SPItemClass *>(G_OBJECT_GET_CLASS(this))->print ) {
+ if (!transform.isIdentity()
+ || style->opacity.value != SP_SCALE24_MAX)
{
- sp_print_bind(ctx, item->transform, SP_SCALE24_TO_FLOAT(item->style->opacity.value));
- ((SPItemClass *) G_OBJECT_GET_CLASS(item))->print(item, ctx);
+ sp_print_bind(ctx, transform, SP_SCALE24_TO_FLOAT(style->opacity.value));
+ reinterpret_cast<SPItemClass *>(G_OBJECT_GET_CLASS(this))->print(this, ctx);
sp_print_release(ctx);
} else {
- ((SPItemClass *) G_OBJECT_GET_CLASS(item))->print(item, ctx);
+ reinterpret_cast<SPItemClass *>(G_OBJECT_GET_CLASS(this))->print(this, ctx);
}
}
}
}
-static gchar *
-sp_item_private_description(SPItem */*item*/)
+gchar *SPItem::sp_item_private_description(SPItem */*item*/)
{
return g_strdup(_("Object"));
}
@@ -1046,27 +988,23 @@ sp_item_private_description(SPItem */*item*/)
*
* Must be freed by caller.
*/
-gchar *
-sp_item_description(SPItem *item)
+gchar *SPItem::description()
{
- g_assert(item != NULL);
- g_assert(SP_IS_ITEM(item));
-
- if (((SPItemClass *) G_OBJECT_GET_CLASS(item))->description) {
- gchar *s = ((SPItemClass *) G_OBJECT_GET_CLASS(item))->description(item);
- if (s && item->clip_ref->getObject()) {
+ if (((SPItemClass *) G_OBJECT_GET_CLASS(this))->description) {
+ gchar *s = ((SPItemClass *) G_OBJECT_GET_CLASS(this))->description(this);
+ if (s && clip_ref->getObject()) {
gchar *snew = g_strdup_printf (_("%s; <i>clipped</i>"), s);
g_free (s);
s = snew;
}
- if (s && item->mask_ref->getObject()) {
+ if (s && mask_ref->getObject()) {
gchar *snew = g_strdup_printf (_("%s; <i>masked</i>"), s);
g_free (s);
s = snew;
}
- if ( item->style && item->style->filter.href && item->style->filter.href->getObject() ) {
- const gchar *label = item->style->filter.href->getObject()->label();
- gchar *snew;
+ if ( style && style->filter.href && style->filter.href->getObject() ) {
+ const gchar *label = style->filter.href->getObject()->label();
+ gchar *snew = 0;
if (label) {
snew = g_strdup_printf (_("%s; <i>filtered (%s)</i>"), s, _(label));
} else {
@@ -1088,8 +1026,7 @@ sp_item_description(SPItem *item)
* \return First allocated key; hence if the returned key is n
* you can use n, n + 1, ..., n + (numkeys - 1)
*/
-unsigned
-sp_item_display_key_new(unsigned numkeys)
+unsigned SPItem::display_key_new(unsigned numkeys)
{
static unsigned dkey = 0;
@@ -1098,51 +1035,48 @@ sp_item_display_key_new(unsigned numkeys)
return dkey - numkeys;
}
-NRArenaItem *
-sp_item_invoke_show(SPItem *item, NRArena *arena, unsigned key, unsigned flags)
+NRArenaItem *SPItem::invoke_show(NRArena *arena, unsigned key, unsigned flags)
{
- g_assert(item != NULL);
- g_assert(SP_IS_ITEM(item));
g_assert(arena != NULL);
g_assert(NR_IS_ARENA(arena));
NRArenaItem *ai = NULL;
- if (((SPItemClass *) G_OBJECT_GET_CLASS(item))->show) {
- ai = ((SPItemClass *) G_OBJECT_GET_CLASS(item))->show(item, arena, key, flags);
+ if (((SPItemClass *) G_OBJECT_GET_CLASS(this))->show) {
+ ai = ((SPItemClass *) G_OBJECT_GET_CLASS(this))->show(this, arena, key, flags);
}
if (ai != NULL) {
- item->display = sp_item_view_new_prepend(item->display, item, flags, key, ai);
- nr_arena_item_set_transform(ai, item->transform);
- nr_arena_item_set_opacity(ai, SP_SCALE24_TO_FLOAT(item->style->opacity.value));
- nr_arena_item_set_visible(ai, !item->isHidden());
- nr_arena_item_set_sensitive(ai, item->sensitive);
- if (item->clip_ref->getObject()) {
- SPClipPath *cp = item->clip_ref->getObject();
-
- if (!item->display->arenaitem->key) {
- NR_ARENA_ITEM_SET_KEY(item->display->arenaitem, sp_item_display_key_new(3));
+ display = sp_item_view_new_prepend(display, this, flags, key, ai);
+ nr_arena_item_set_transform(ai, transform);
+ nr_arena_item_set_opacity(ai, SP_SCALE24_TO_FLOAT(style->opacity.value));
+ nr_arena_item_set_visible(ai, !isHidden());
+ nr_arena_item_set_sensitive(ai, sensitive);
+ if (clip_ref->getObject()) {
+ SPClipPath *cp = clip_ref->getObject();
+
+ if (!display->arenaitem->key) {
+ NR_ARENA_ITEM_SET_KEY(display->arenaitem, display_key_new(3));
}
- int clip_key = NR_ARENA_ITEM_GET_KEY(item->display->arenaitem);
+ int clip_key = NR_ARENA_ITEM_GET_KEY(display->arenaitem);
// Show and set clip
- NRArenaItem *ac = sp_clippath_show(cp, arena, clip_key);
+ NRArenaItem *ac = cp->show(arena, clip_key);
nr_arena_item_set_clip(ai, ac);
nr_arena_item_unref(ac);
// Update bbox, in case the clip uses bbox units
NRRect bbox;
- sp_item_invoke_bbox(item, &bbox, Geom::identity(), TRUE);
- sp_clippath_set_bbox(SP_CLIPPATH(cp), clip_key, &bbox);
+ invoke_bbox( &bbox, Geom::identity(), TRUE);
+ SP_CLIPPATH(cp)->setBBox(clip_key, &bbox);
cp->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
- if (item->mask_ref->getObject()) {
- SPMask *mask = item->mask_ref->getObject();
+ if (mask_ref->getObject()) {
+ SPMask *mask = mask_ref->getObject();
- if (!item->display->arenaitem->key) {
- NR_ARENA_ITEM_SET_KEY(item->display->arenaitem, sp_item_display_key_new(3));
+ if (!display->arenaitem->key) {
+ NR_ARENA_ITEM_SET_KEY(display->arenaitem, display_key_new(3));
}
- int mask_key = NR_ARENA_ITEM_GET_KEY(item->display->arenaitem);
+ int mask_key = NR_ARENA_ITEM_GET_KEY(display->arenaitem);
// Show and set mask
NRArenaItem *ac = sp_mask_show(mask, arena, mask_key);
@@ -1151,44 +1085,40 @@ sp_item_invoke_show(SPItem *item, NRArena *arena, unsigned key, unsigned flags)
// Update bbox, in case the mask uses bbox units
NRRect bbox;
- sp_item_invoke_bbox(item, &bbox, Geom::identity(), TRUE);
+ invoke_bbox( &bbox, Geom::identity(), TRUE);
sp_mask_set_bbox(SP_MASK(mask), mask_key, &bbox);
mask->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
- NR_ARENA_ITEM_SET_DATA(ai, item);
+ NR_ARENA_ITEM_SET_DATA(ai, this);
Geom::OptRect item_bbox;
- sp_item_invoke_bbox(item, item_bbox, Geom::identity(), TRUE, SPItem::GEOMETRIC_BBOX);
+ invoke_bbox( item_bbox, Geom::identity(), TRUE, SPItem::GEOMETRIC_BBOX);
nr_arena_item_set_item_bbox(ai, item_bbox);
}
return ai;
}
-void
-sp_item_invoke_hide(SPItem *item, unsigned key)
+void SPItem::invoke_hide(unsigned key)
{
- g_assert(item != NULL);
- g_assert(SP_IS_ITEM(item));
-
- if (((SPItemClass *) G_OBJECT_GET_CLASS(item))->hide) {
- ((SPItemClass *) G_OBJECT_GET_CLASS(item))->hide(item, key);
+ if (((SPItemClass *) G_OBJECT_GET_CLASS(this))->hide) {
+ ((SPItemClass *) G_OBJECT_GET_CLASS(this))->hide(this, key);
}
SPItemView *ref = NULL;
- SPItemView *v = item->display;
+ SPItemView *v = display;
while (v != NULL) {
SPItemView *next = v->next;
if (v->key == key) {
- if (item->clip_ref->getObject()) {
- sp_clippath_hide(item->clip_ref->getObject(), NR_ARENA_ITEM_GET_KEY(v->arenaitem));
+ if (clip_ref->getObject()) {
+ (clip_ref->getObject())->hide(NR_ARENA_ITEM_GET_KEY(v->arenaitem));
nr_arena_item_set_clip(v->arenaitem, NULL);
}
- if (item->mask_ref->getObject()) {
- sp_mask_hide(item->mask_ref->getObject(), NR_ARENA_ITEM_GET_KEY(v->arenaitem));
+ if (mask_ref->getObject()) {
+ sp_mask_hide(mask_ref->getObject(), NR_ARENA_ITEM_GET_KEY(v->arenaitem));
nr_arena_item_set_mask(v->arenaitem, NULL);
}
if (!ref) {
- item->display = v->next;
+ display = v->next;
} else {
ref->next = v->next;
}
@@ -1204,34 +1134,29 @@ sp_item_invoke_hide(SPItem *item, unsigned key)
// Adjusters
-void
-sp_item_adjust_pattern (SPItem *item, Geom::Matrix const &postmul, bool set)
+void SPItem::adjust_pattern (Geom::Matrix const &postmul, bool set)
{
- SPStyle *style = item->style;
-
- if ( style && style->fill.isPaintserver() ) {
- SPPaintServer *server = item->style->getFillPaintServer();
+ if (style && (style->fill.isPaintserver())) {
+ SPObject *server = style->getFillPaintServer();
if ( SP_IS_PATTERN(server) ) {
- SPPattern *pattern = sp_pattern_clone_if_necessary(item, SP_PATTERN(server), "fill");
+ SPPattern *pattern = sp_pattern_clone_if_necessary(this, SP_PATTERN(server), "fill");
sp_pattern_transform_multiply(pattern, postmul, set);
}
}
- if ( style && style->stroke.isPaintserver() ) {
- SPPaintServer *server = item->style->getStrokePaintServer();
+ if (style && (style->stroke.isPaintserver())) {
+ SPObject *server = style->getStrokePaintServer();
if ( SP_IS_PATTERN(server) ) {
- SPPattern *pattern = sp_pattern_clone_if_necessary(item, SP_PATTERN(server), "stroke");
+ SPPattern *pattern = sp_pattern_clone_if_necessary(this, SP_PATTERN(server), "stroke");
sp_pattern_transform_multiply(pattern, postmul, set);
}
}
}
-void sp_item_adjust_gradient( SPItem *item, Geom::Matrix const &postmul, bool set )
+void SPItem::adjust_gradient( Geom::Matrix const &postmul, bool set )
{
- SPStyle *style = item->style;
-
if ( style && style->fill.isPaintserver() ) {
- SPPaintServer *server = item->style->getFillPaintServer();
+ SPPaintServer *server = style->getFillPaintServer();
if ( SP_IS_GRADIENT(server) ) {
/**
@@ -1243,27 +1168,26 @@ void sp_item_adjust_gradient( SPItem *item, Geom::Matrix const &postmul, bool se
* \todo FIXME: convert back to bbox units after transforming with
* the item, so as to preserve the original units.
*/
- SPGradient *gradient = sp_gradient_convert_to_userspace( SP_GRADIENT(server), item, "fill" );
+ SPGradient *gradient = sp_gradient_convert_to_userspace( SP_GRADIENT(server), this, "fill" );
sp_gradient_transform_multiply( gradient, postmul, set );
}
}
if ( style && style->stroke.isPaintserver() ) {
- SPPaintServer *server = item->style->getStrokePaintServer();
+ SPPaintServer *server = style->getStrokePaintServer();
if ( SP_IS_GRADIENT(server) ) {
- SPGradient *gradient = sp_gradient_convert_to_userspace( SP_GRADIENT(server), item, "stroke" );
+ SPGradient *gradient = sp_gradient_convert_to_userspace( SP_GRADIENT(server), this, "stroke");
sp_gradient_transform_multiply( gradient, postmul, set );
}
}
}
-void sp_item_adjust_stroke( SPItem *item, gdouble ex )
+void SPItem::adjust_stroke( gdouble ex )
{
- SPStyle *style = item->style;
+ SPStyle *style = this->style;
if (style && !style->stroke.isNone() && !Geom::are_near(ex, 1.0, Geom::EPSILON)) {
-
style->stroke_width.computed *= ex;
style->stroke_width.set = TRUE;
@@ -1274,18 +1198,17 @@ void sp_item_adjust_stroke( SPItem *item, gdouble ex )
style->stroke_dash.offset *= ex;
}
- item->updateRepr();
+ updateRepr();
}
}
/**
* Find out the inverse of previous transform of an item (from its repr)
*/
-Geom::Matrix
-sp_item_transform_repr (SPItem *item)
+Geom::Matrix sp_item_transform_repr (SPItem *item)
{
Geom::Matrix t_old(Geom::identity());
- gchar const *t_attr = item->repr->attribute("transform");
+ gchar const *t_attr = item->getRepr()->attribute("transform");
if (t_attr) {
Geom::Matrix t;
if (sp_svg_transform_read(t_attr, &t)) {
@@ -1300,18 +1223,17 @@ sp_item_transform_repr (SPItem *item)
/**
* Recursively scale stroke width in \a item and its children by \a expansion.
*/
-void
-sp_item_adjust_stroke_width_recursive(SPItem *item, double expansion)
+void SPItem::adjust_stroke_width_recursive(double expansion)
{
- sp_item_adjust_stroke (item, expansion);
+ adjust_stroke (expansion);
// A clone's child is the ghost of its original - we must not touch it, skip recursion
- if (item && SP_IS_USE(item))
- return;
-
- for (SPObject *o = item->children; o != NULL; o = o->next) {
- if (SP_IS_ITEM(o))
- sp_item_adjust_stroke_width_recursive(SP_ITEM(o), expansion);
+ if ( !SP_IS_USE(this) ) {
+ for ( SPObject *o = children; o; o = o->getNext() ) {
+ if (SP_IS_ITEM(o)) {
+ SP_ITEM(o)->adjust_stroke_width_recursive(expansion);
+ }
+ }
}
}
@@ -1334,24 +1256,23 @@ sp_item_adjust_rects_recursive(SPItem *item, Geom::Matrix advertized_transform)
/**
* Recursively compensate pattern or gradient transform.
*/
-void
-sp_item_adjust_paint_recursive (SPItem *item, Geom::Matrix advertized_transform, Geom::Matrix t_ancestors, bool is_pattern)
+void SPItem::adjust_paint_recursive (Geom::Matrix advertized_transform, Geom::Matrix t_ancestors, bool is_pattern)
{
// _Before_ full pattern/gradient transform: t_paint * t_item * t_ancestors
// _After_ full pattern/gradient transform: t_paint_new * t_item * t_ancestors * advertised_transform
// By equating these two expressions we get t_paint_new = t_paint * paint_delta, where:
- Geom::Matrix t_item = sp_item_transform_repr (item);
+ Geom::Matrix t_item = sp_item_transform_repr (this);
Geom::Matrix paint_delta = t_item * t_ancestors * advertized_transform * t_ancestors.inverse() * t_item.inverse();
// Within text, we do not fork gradients, and so must not recurse to avoid double compensation;
// also we do not recurse into clones, because a clone's child is the ghost of its original -
// we must not touch it
- if (!(item && (SP_IS_TEXT(item) || SP_IS_USE(item)))) {
- for (SPObject *o = item->children; o != NULL; o = o->next) {
+ if (!(this && (SP_IS_TEXT(this) || SP_IS_USE(this)))) {
+ for (SPObject *o = children; o != NULL; o = o->next) {
if (SP_IS_ITEM(o)) {
// At the level of the transformed item, t_ancestors is identity;
// below it, it is the accmmulated chain of transforms from this level to the top level
- sp_item_adjust_paint_recursive (SP_ITEM(o), advertized_transform, t_item * t_ancestors, is_pattern);
+ SP_ITEM(o)->adjust_paint_recursive (advertized_transform, t_item * t_ancestors, is_pattern);
}
}
}
@@ -1361,31 +1282,29 @@ sp_item_adjust_paint_recursive (SPItem *item, Geom::Matrix advertized_transform,
// and paintservers on leaves inheriting their values from ancestors could adjust themselves properly
// before ancestors themselves are adjusted, probably differently (bug 1286535)
- if (is_pattern)
- sp_item_adjust_pattern (item, paint_delta);
- else
- sp_item_adjust_gradient (item, paint_delta);
-
+ if (is_pattern) {
+ adjust_pattern(paint_delta);
+ } else {
+ adjust_gradient(paint_delta);
+ }
}
-void
-sp_item_adjust_livepatheffect (SPItem *item, Geom::Matrix const &postmul, bool set)
+void SPItem::adjust_livepatheffect (Geom::Matrix const &postmul, bool set)
{
- if ( !SP_IS_LPE_ITEM(item) )
- return;
-
- SPLPEItem *lpeitem = SP_LPE_ITEM (item);
- if ( sp_lpe_item_has_path_effect(lpeitem) ) {
- sp_lpe_item_fork_path_effects_if_necessary(lpeitem);
-
- // now that all LPEs are forked_if_necessary, we can apply the transform
- PathEffectList effect_list = sp_lpe_item_get_effect_list(lpeitem);
- for (PathEffectList::iterator it = effect_list.begin(); it != effect_list.end(); it++)
- {
- LivePathEffectObject *lpeobj = (*it)->lpeobject;
- if (lpeobj && lpeobj->get_lpe()) {
- Inkscape::LivePathEffect::Effect * effect = lpeobj->get_lpe();
- effect->transform_multiply(postmul, set);
+ if ( SP_IS_LPE_ITEM(this) ) {
+ SPLPEItem *lpeitem = SP_LPE_ITEM (this);
+ if ( sp_lpe_item_has_path_effect(lpeitem) ) {
+ sp_lpe_item_fork_path_effects_if_necessary(lpeitem);
+
+ // now that all LPEs are forked_if_necessary, we can apply the transform
+ PathEffectList effect_list = sp_lpe_item_get_effect_list(lpeitem);
+ for (PathEffectList::iterator it = effect_list.begin(); it != effect_list.end(); it++)
+ {
+ LivePathEffectObject *lpeobj = (*it)->lpeobject;
+ if (lpeobj && lpeobj->get_lpe()) {
+ Inkscape::LivePathEffect::Effect * effect = lpeobj->get_lpe();
+ effect->transform_multiply(postmul, set);
+ }
}
}
}
@@ -1399,11 +1318,8 @@ sp_item_adjust_livepatheffect (SPItem *item, Geom::Matrix const &postmul, bool s
* stored optimized. Send _transformed_signal. Invoke _write method so that
* the repr is updated with the new transform.
*/
-void
-sp_item_write_transform(SPItem *item, Inkscape::XML::Node *repr, Geom::Matrix const &transform, Geom::Matrix const *adv, bool compensate)
+void SPItem::doWriteTransform(Inkscape::XML::Node *repr, Geom::Matrix const &transform, Geom::Matrix const *adv, bool compensate)
{
- g_return_if_fail(item != NULL);
- g_return_if_fail(SP_IS_ITEM(item));
g_return_if_fail(repr != NULL);
// calculate the relative transform, if not given by the adv attribute
@@ -1411,7 +1327,7 @@ sp_item_write_transform(SPItem *item, Inkscape::XML::Node *repr, Geom::Matrix co
if (adv != NULL) {
advertized_transform = *adv;
} else {
- advertized_transform = sp_item_transform_repr (item).inverse() * transform;
+ advertized_transform = sp_item_transform_repr (this).inverse() * transform;
}
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -1420,26 +1336,26 @@ sp_item_write_transform(SPItem *item, Inkscape::XML::Node *repr, Geom::Matrix co
// recursively compensate for stroke scaling, depending on user preference
if (!prefs->getBool("/options/transform/stroke", true)) {
double const expansion = 1. / advertized_transform.descrim();
- sp_item_adjust_stroke_width_recursive(item, expansion);
+ adjust_stroke_width_recursive(expansion);
}
// recursively compensate rx/ry of a rect if requested
if (!prefs->getBool("/options/transform/rectcorners", true)) {
- sp_item_adjust_rects_recursive(item, advertized_transform);
+ sp_item_adjust_rects_recursive(this, advertized_transform);
}
// recursively compensate pattern fill if it's not to be transformed
if (!prefs->getBool("/options/transform/pattern", true)) {
- sp_item_adjust_paint_recursive (item, advertized_transform.inverse(), Geom::identity(), true);
+ adjust_paint_recursive (advertized_transform.inverse(), Geom::identity(), true);
}
/// \todo FIXME: add the same else branch as for gradients below, to convert patterns to userSpaceOnUse as well
/// recursively compensate gradient fill if it's not to be transformed
if (!prefs->getBool("/options/transform/gradient", true)) {
- sp_item_adjust_paint_recursive (item, advertized_transform.inverse(), Geom::identity(), false);
+ adjust_paint_recursive (advertized_transform.inverse(), Geom::identity(), false);
} else {
// this converts the gradient/pattern fill/stroke, if any, to userSpaceOnUse; we need to do
// it here _before_ the new transform is set, so as to use the pre-transform bbox
- sp_item_adjust_paint_recursive (item, Geom::identity(), Geom::identity(), false);
+ adjust_paint_recursive (Geom::identity(), Geom::identity(), false);
}
} // endif(compensate)
@@ -1447,36 +1363,32 @@ sp_item_write_transform(SPItem *item, Inkscape::XML::Node *repr, Geom::Matrix co
gint preserve = prefs->getBool("/options/preservetransform/value", 0);
Geom::Matrix transform_attr (transform);
if ( // run the object's set_transform (i.e. embed transform) only if:
- ((SPItemClass *) G_OBJECT_GET_CLASS(item))->set_transform && // it does have a set_transform method
+ ((SPItemClass *) G_OBJECT_GET_CLASS(this))->set_transform && // it does have a set_transform method
!preserve && // user did not chose to preserve all transforms
- !item->clip_ref->getObject() && // the object does not have a clippath
- !item->mask_ref->getObject() && // the object does not have a mask
- !(!transform.isTranslation() && item->style && item->style->getFilter())
+ !clip_ref->getObject() && // the object does not have a clippath
+ !mask_ref->getObject() && // the object does not have a mask
+ !(!transform.isTranslation() && style && style->getFilter())
// the object does not have a filter, or the transform is translation (which is supposed to not affect filters)
) {
- transform_attr = ((SPItemClass *) G_OBJECT_GET_CLASS(item))->set_transform(item, transform);
+ transform_attr = ((SPItemClass *) G_OBJECT_GET_CLASS(this))->set_transform(this, transform);
}
- sp_item_set_item_transform(item, transform_attr);
+ set_item_transform(transform_attr);
// Note: updateRepr comes before emitting the transformed signal since
// it causes clone SPUse's copy of the original object to brought up to
// date with the original. Otherwise, sp_use_bbox returns incorrect
// values if called in code handling the transformed signal.
- item->updateRepr();
+ updateRepr();
// send the relative transform with a _transformed_signal
- item->_transformed_signal.emit(&advertized_transform, item);
+ _transformed_signal.emit(&advertized_transform, this);
}
-gint
-sp_item_event(SPItem *item, SPEvent *event)
+gint SPItem::emitEvent(SPEvent &event)
{
- g_return_val_if_fail(item != NULL, FALSE);
- g_return_val_if_fail(SP_IS_ITEM(item), FALSE);
- g_return_val_if_fail(event != NULL, FALSE);
-
- if (((SPItemClass *) G_OBJECT_GET_CLASS(item))->event)
- return ((SPItemClass *) G_OBJECT_GET_CLASS(item))->event(item, event);
+ if (((SPItemClass *) G_OBJECT_GET_CLASS(this))->event) {
+ return ((SPItemClass *) G_OBJECT_GET_CLASS(this))->event(this, &event);
+ }
return FALSE;
}
@@ -1485,35 +1397,26 @@ sp_item_event(SPItem *item, SPEvent *event)
* Sets item private transform (not propagated to repr), without compensating stroke widths,
* gradients, patterns as sp_item_write_transform does.
*/
-void
-sp_item_set_item_transform(SPItem *item, Geom::Matrix const &transform)
+void SPItem::set_item_transform(Geom::Matrix const &transform_matrix)
{
- g_return_if_fail(item != NULL);
- g_return_if_fail(SP_IS_ITEM(item));
-
- if (!matrix_equalp(transform, item->transform, NR_EPSILON)) {
- item->transform = transform;
+ if (!matrix_equalp(transform_matrix, transform, NR_EPSILON)) {
+ transform = transform_matrix;
/* The SP_OBJECT_USER_MODIFIED_FLAG_B is used to mark the fact that it's only a
transformation. It's apparently not used anywhere else. */
- item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_USER_MODIFIED_FLAG_B);
- sp_item_rm_unsatisfied_cns(*item);
+ requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_USER_MODIFIED_FLAG_B);
+ sp_item_rm_unsatisfied_cns(*this);
}
}
-void
-sp_item_convert_item_to_guides(SPItem *item) {
- g_return_if_fail(item != NULL);
- g_return_if_fail(SP_IS_ITEM(item));
+void SPItem::convert_item_to_guides() {
+ // Use derived method if present ...
+ if (((SPItemClass *) G_OBJECT_GET_CLASS(this))->convert_to_guides) {
+ (*((SPItemClass *) G_OBJECT_GET_CLASS(this))->convert_to_guides)(this);
+ } else {
+ // .. otherwise simply place the guides around the item's bounding box
- /* Use derived method if present ... */
- if (((SPItemClass *) G_OBJECT_GET_CLASS(item))->convert_to_guides) {
- (*((SPItemClass *) G_OBJECT_GET_CLASS(item))->convert_to_guides)(item);
- return;
+ convert_to_guides();
}
-
- /* .. otherwise simply place the guides around the item's bounding box */
-
- sp_item_convert_to_guides(item);
}
@@ -1553,66 +1456,56 @@ Geom::Matrix SPItem::getRelativeTransform(SPObject const *dest) const {
* Returns the accumulated transformation of the item and all its ancestors, including root's viewport.
* \pre (item != NULL) and SP_IS_ITEM(item).
*/
-Geom::Matrix sp_item_i2doc_affine(SPItem const *item)
+Geom::Matrix SPItem::i2doc_affine() const
{
- return i2anc_affine(item, NULL);
+ return i2anc_affine(this, NULL);
}
/**
* Returns the transformation from item to desktop coords
*/
-Geom::Matrix sp_item_i2d_affine(SPItem const *item)
+Geom::Matrix SPItem::i2d_affine() const
{
- g_assert(item != NULL);
- g_assert(SP_IS_ITEM(item));
-
- Geom::Matrix const ret( sp_item_i2doc_affine(item)
+ Geom::Matrix const ret( i2doc_affine()
* Geom::Scale(1, -1)
- * Geom::Translate(0, sp_document_height(item->document)) );
+ * Geom::Translate(0, document->getHeight()) );
return ret;
}
-void sp_item_set_i2d_affine(SPItem *item, Geom::Matrix const &i2dt)
+void SPItem::set_i2d_affine(Geom::Matrix const &i2dt)
{
- g_return_if_fail( item != NULL );
- g_return_if_fail( SP_IS_ITEM(item) );
-
Geom::Matrix dt2p; /* desktop to item parent transform */
- if (item->parent) {
- dt2p = sp_item_i2d_affine(static_cast<SPItem *>(item->parent)).inverse();
+ if (parent) {
+ dt2p = static_cast<SPItem *>(parent)->i2d_affine().inverse();
} else {
- dt2p = ( Geom::Translate(0, -sp_document_height(item->document))
+ dt2p = ( Geom::Translate(0, -document->getHeight())
* Geom::Scale(1, -1) );
}
Geom::Matrix const i2p( i2dt * dt2p );
- sp_item_set_item_transform(item, i2p);
+ set_item_transform(i2p);
}
/**
* should rather be named "sp_item_d2i_affine" to match "sp_item_i2d_affine" (or vice versa)
*/
-Geom::Matrix
-sp_item_dt2i_affine(SPItem const *item)
+Geom::Matrix SPItem::dt2i_affine() const
{
/* fixme: Implement the right way (Lauris) */
- return sp_item_i2d_affine(item).inverse();
+ return i2d_affine().inverse();
}
/* Item views */
-static SPItemView *
-sp_item_view_new_prepend(SPItemView *list, SPItem *item, unsigned flags, unsigned key, NRArenaItem *arenaitem)
+SPItemView *SPItem::sp_item_view_new_prepend(SPItemView *list, SPItem *item, unsigned flags, unsigned key, NRArenaItem *arenaitem)
{
- SPItemView *new_view;
-
g_assert(item != NULL);
g_assert(SP_IS_ITEM(item));
g_assert(arenaitem != NULL);
g_assert(NR_IS_ARENA_ITEM(arenaitem));
- new_view = g_new(SPItemView, 1);
+ SPItemView *new_view = g_new(SPItemView, 1);
new_view->next = list;
new_view->flags = flags;
@@ -1622,8 +1515,7 @@ sp_item_view_new_prepend(SPItemView *list, SPItem *item, unsigned flags, unsigne
return new_view;
}
-static SPItemView *
-sp_item_view_list_remove(SPItemView *list, SPItemView *view)
+SPItemView *SPItem::sp_item_view_list_remove(SPItemView *list, SPItemView *view)
{
if (view == list) {
list = list->next;
@@ -1644,10 +1536,9 @@ sp_item_view_list_remove(SPItemView *list, SPItemView *view)
* Return the arenaitem corresponding to the given item in the display
* with the given key
*/
-NRArenaItem *
-sp_item_get_arenaitem(SPItem *item, unsigned key)
+NRArenaItem *SPItem::get_arenaitem(unsigned key)
{
- for ( SPItemView *iv = item->display ; iv ; iv = iv->next ) {
+ for ( SPItemView *iv = display ; iv ; iv = iv->next ) {
if ( iv->key == key ) {
return iv->arenaitem;
}
@@ -1656,36 +1547,34 @@ sp_item_get_arenaitem(SPItem *item, unsigned key)
return NULL;
}
-int
-sp_item_repr_compare_position(SPItem *first, SPItem *second)
+int sp_item_repr_compare_position(SPItem *first, SPItem *second)
{
- return sp_repr_compare_position(first->repr,
- second->repr);
+ return sp_repr_compare_position(first->getRepr(),
+ second->getRepr());
}
-SPItem *
-sp_item_first_item_child (SPObject *obj)
+SPItem *sp_item_first_item_child(SPObject *obj)
{
- for ( SPObject *iter = sp_object_first_child(obj) ; iter ; iter = iter->next) {
+ SPItem *child = 0;
+ for ( SPObject *iter = obj->firstChild() ; iter ; iter = iter->next ) {
if ( SP_IS_ITEM(iter) ) {
- return SP_ITEM (iter);
+ child = SP_ITEM(iter);
+ break;
}
}
- return NULL;
+ return child;
}
-void
-sp_item_convert_to_guides(SPItem *item) {
+void SPItem::convert_to_guides() {
SPDesktop *dt = inkscape_active_desktop();
- SPNamedView *nv = sp_desktop_namedview(dt);
- (void)nv;
+ sp_desktop_namedview(dt);
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
int prefs_bbox = prefs->getInt("/tools/bounding_box", 0);
SPItem::BBoxType bbox_type = (prefs_bbox ==0)?
SPItem::APPROXIMATE_BBOX : SPItem::GEOMETRIC_BBOX;
- Geom::OptRect bbox = sp_item_bbox_desktop(item, bbox_type);
+ Geom::OptRect bbox = getBboxDesktop(bbox_type);
if (!bbox) {
g_warning ("Cannot determine item's bounding box during conversion to guides.\n");
return;
diff --git a/src/sp-item.h b/src/sp-item.h
index 7387a63cf..4ba3dc7a4 100644
--- a/src/sp-item.h
+++ b/src/sp-item.h
@@ -1,5 +1,5 @@
-#ifndef __SP_ITEM_H__
-#define __SP_ITEM_H__
+#ifndef SEEN_SP_ITEM_H
+#define SEEN_SP_ITEM_H
/** \file
* Some things pertinent to all visible shapes: SPItem, SPItemView, SPItemCtx, SPItemClass, SPEvent.
@@ -10,6 +10,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2006 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -53,13 +54,15 @@ enum {
* Also, this probably goes to SPObject base class.
*
*/
-struct SPEvent {
+class SPEvent {
+public:
unsigned int type;
gpointer data;
};
/// SPItemView
-struct SPItemView {
+class SPItemView {
+public:
SPItemView *next;
unsigned int flags;
unsigned int key;
@@ -79,7 +82,8 @@ struct SPItemView {
#define SP_ITEM_REFERENCE_FLAGS (1 << 1)
/// Contains transformations to document/viewport and the viewport size.
-struct SPItemCtx {
+class SPItemCtx {
+public:
SPCtx ctx;
/** Item to document transformation */
Geom::Matrix i2doc;
@@ -89,8 +93,19 @@ struct SPItemCtx {
Geom::Matrix i2vp;
};
+class SPItem;
+class SPItemClass;
+
+#define SP_TYPE_ITEM (SPItem::getType ())
+#define SP_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ITEM, SPItem))
+#define SP_ITEM_CLASS(clazz) (G_TYPE_CHECK_CLASS_CAST((clazz), SP_TYPE_ITEM, SPItemClass))
+#define SP_IS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ITEM))
+
+
/** Abstract base class for all visible shapes. */
-struct SPItem : public SPObject {
+class SPItem : public SPObject {
+public:
+ static GType getType();
enum BBoxType {
// legacy behavior: includes crude stroke, markers; excludes long miters, blur margin; is known to be wrong for caps
APPROXIMATE_BBOX,
@@ -160,6 +175,36 @@ struct SPItem : public SPObject {
sigc::connection connectTransformed(sigc::slot<void, Geom::Matrix const *, SPItem *> slot) {
return _transformed_signal.connect(slot);
}
+ void invoke_bbox( Geom::OptRect &bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
+ void invoke_bbox( NRRect *bbox, Geom::Matrix const &transform, unsigned const clear, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) __attribute__ ((deprecated));
+ void invoke_bbox_full( Geom::OptRect &bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear) const;
+ void invoke_bbox_full( NRRect *bbox, Geom::Matrix const &transform, unsigned const flags, unsigned const clear) __attribute__ ((deprecated));
+
+ unsigned pos_in_parent();
+ gchar *description();
+ void invoke_print(SPPrintContext *ctx);
+ static unsigned int display_key_new(unsigned int numkeys);
+ NRArenaItem *invoke_show(NRArena *arena, unsigned int key, unsigned int flags);
+ void invoke_hide(unsigned int key);
+ void getSnappoints(std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs=0) const;
+ void adjust_pattern(/* Geom::Matrix const &premul, */ Geom::Matrix const &postmul, bool set = false);
+ void adjust_gradient(/* Geom::Matrix const &premul, */ Geom::Matrix const &postmul, bool set = false);
+ void adjust_stroke(gdouble ex);
+ void adjust_stroke_width_recursive(gdouble ex);
+ void adjust_paint_recursive(Geom::Matrix advertized_transform, Geom::Matrix t_ancestors, bool is_pattern);
+ void adjust_livepatheffect(Geom::Matrix const &postmul, bool set = false);
+ void doWriteTransform(Inkscape::XML::Node *repr, Geom::Matrix const &transform, Geom::Matrix const *adv = NULL, bool compensate = true);
+ void set_item_transform(Geom::Matrix const &transform_matrix);
+ void convert_item_to_guides();
+ gint emitEvent (SPEvent &event);
+ NRArenaItem *get_arenaitem(unsigned int key);
+ void getBboxDesktop(NRRect *bbox, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) __attribute__ ((deprecated));
+ Geom::OptRect getBboxDesktop(SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
+ Geom::Matrix i2doc_affine() const;
+ Geom::Matrix i2d_affine() const;
+ void set_i2d_affine(Geom::Matrix const &transform);
+ Geom::Matrix dt2i_affine() const;
+ void convert_to_guides();
private:
enum EvaluatedStatus
@@ -169,10 +214,29 @@ private:
mutable bool _is_evaluated;
mutable EvaluatedStatus _evaluated_status;
+
+ static void sp_item_init(SPItem *item);
+
+ static void sp_item_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+ static void sp_item_release(SPObject *object);
+ static void sp_item_set(SPObject *object, unsigned key, gchar const *value);
+ static void sp_item_update(SPObject *object, SPCtx *ctx, guint flags);
+ static Inkscape::XML::Node *sp_item_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+ static gchar *sp_item_private_description(SPItem *item);
+ static void sp_item_private_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs);
+
+ static SPItemView *sp_item_view_new_prepend(SPItemView *list, SPItem *item, unsigned flags, unsigned key, NRArenaItem *arenaitem);
+ static SPItemView *sp_item_view_list_remove(SPItemView *list, SPItemView *view);
+ static void clip_ref_changed(SPObject *old_clip, SPObject *clip, SPItem *item);
+ static void mask_ref_changed(SPObject *old_clip, SPObject *clip, SPItem *item);
+
+ friend class SPItemClass;
};
/// The SPItem vtable.
-struct SPItemClass {
+class SPItemClass {
+public:
SPObjectClass parent_class;
/** BBox union in given coordinate system */
@@ -201,58 +265,19 @@ struct SPItemClass {
/** Emit event, if applicable */
gint (* event) (SPItem *item, SPEvent *event);
-};
-
-/* Flag testing macros */
-
-#define SP_ITEM_STOP_PAINT(i) (SP_ITEM (i)->stop_paint)
-
-/* Methods */
-
-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, 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);
+ private:
+ static SPObjectClass *static_parent_class;
+ static void sp_item_class_init(SPItemClass *klass);
-gchar *sp_item_description(SPItem * item);
-void sp_item_invoke_print(SPItem *item, SPPrintContext *ctx);
-
-/** Shows/Hides item on given arena display list */
-unsigned int sp_item_display_key_new(unsigned int numkeys);
-NRArenaItem *sp_item_invoke_show(SPItem *item, NRArena *arena, unsigned int key, unsigned int flags);
-void sp_item_invoke_hide(SPItem *item, unsigned int key);
-
-void sp_item_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs);
-
-void sp_item_adjust_pattern(SPItem *item, /* Geom::Matrix const &premul, */ Geom::Matrix const &postmul, bool set = false);
-void sp_item_adjust_gradient(SPItem *item, /* Geom::Matrix const &premul, */ Geom::Matrix const &postmul, bool set = false);
-void sp_item_adjust_stroke(SPItem *item, gdouble ex);
-void sp_item_adjust_stroke_width_recursive(SPItem *item, gdouble ex);
-void sp_item_adjust_paint_recursive(SPItem *item, Geom::Matrix advertized_transform, Geom::Matrix t_ancestors, bool is_pattern);
-void sp_item_adjust_livepatheffect(SPItem *item, Geom::Matrix const &postmul, bool set = false);
-
-void sp_item_write_transform(SPItem *item, Inkscape::XML::Node *repr, Geom::Matrix const &transform, Geom::Matrix const *adv = NULL, bool compensate = true);
-
-void sp_item_set_item_transform(SPItem *item, Geom::Matrix const &transform);
-
-void sp_item_convert_item_to_guides(SPItem *item);
-
-gint sp_item_event (SPItem *item, SPEvent *event);
-
-/* Utility */
-
-NRArenaItem *sp_item_get_arenaitem(SPItem *item, unsigned int key);
+ friend class SPItem;
+};
-void sp_item_bbox_desktop(SPItem *item, NRRect *bbox, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX) __attribute__ ((deprecated));
-Geom::OptRect sp_item_bbox_desktop(SPItem *item, SPItem::BBoxType type = SPItem::APPROXIMATE_BBOX);
+// Utility
Geom::Matrix i2anc_affine(SPObject const *item, SPObject const *ancestor);
Geom::Matrix i2i_affine(SPObject const *src, SPObject const *dest);
-Geom::Matrix sp_item_i2doc_affine(SPItem const *item);
-
/* fixme: - these are evil, but OK */
/* Fill *TRANSFORM with the item-to-desktop transform. See doc/coordinates.txt
@@ -261,15 +286,10 @@ Geom::Matrix sp_item_i2doc_affine(SPItem const *item);
*
* \return TRANSFORM.
*/
-Geom::Matrix sp_item_i2d_affine(SPItem const *item);
-void sp_item_set_i2d_affine(SPItem *item, Geom::Matrix const &transform);
-Geom::Matrix sp_item_dt2i_affine(SPItem const *item);
int sp_item_repr_compare_position(SPItem *first, SPItem *second);
SPItem *sp_item_first_item_child (SPObject *obj);
-void sp_item_convert_to_guides(SPItem *item);
-
-#endif
+#endif // SEEN_SP_ITEM_H
/*
Local Variables:
diff --git a/src/sp-line.cpp b/src/sp-line.cpp
index f489da2f1..67a88e17a 100644
--- a/src/sp-line.cpp
+++ b/src/sp-line.cpp
@@ -1,10 +1,10 @@
-#define __SP_LINE_C__
-
/*
* SVG <line> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 1999-2002 Lauris Kaplinski
*
@@ -24,224 +24,213 @@
#include "document.h"
#include "inkscape.h"
-static void sp_line_class_init (SPLineClass *klass);
-static void sp_line_init (SPLine *line);
-
-static void sp_line_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * repr);
-static void sp_line_set (SPObject *object, unsigned int key, const gchar *value);
-static Inkscape::XML::Node *sp_line_write (SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static gchar *sp_line_description (SPItem * item);
-static Geom::Matrix sp_line_set_transform(SPItem *item, Geom::Matrix const &xform);
-
-static void sp_line_update (SPObject *object, SPCtx *ctx, guint flags);
-static void sp_line_set_shape (SPShape *shape);
-static void sp_line_convert_to_guides(SPItem *item);
+SPShapeClass * SPLineClass::static_parent_class = 0;
-static SPShapeClass *parent_class;
-
-GType
-sp_line_get_type (void)
+GType SPLine::sp_line_get_type(void)
{
- static GType line_type = 0;
-
- if (!line_type) {
- GTypeInfo line_info = {
- sizeof (SPLineClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) sp_line_class_init,
- NULL, /* klass_finalize */
- NULL, /* klass_data */
- sizeof (SPLine),
- 16, /* n_preallocs */
- (GInstanceInitFunc) sp_line_init,
- NULL, /* value_table */
- };
- line_type = g_type_register_static (SP_TYPE_SHAPE, "SPLine", &line_info, (GTypeFlags)0);
- }
- return line_type;
+ static GType line_type = 0;
+
+ if (!line_type) {
+ GTypeInfo line_info = {
+ sizeof(SPLineClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) SPLineClass::sp_line_class_init,
+ NULL, /* klass_finalize */
+ NULL, /* klass_data */
+ sizeof(SPLine),
+ 16, /* n_preallocs */
+ (GInstanceInitFunc) init,
+ NULL, /* value_table */
+ };
+ line_type = g_type_register_static(SP_TYPE_SHAPE, "SPLine", &line_info,(GTypeFlags)0);
+ }
+ return line_type;
}
-static void
-sp_line_class_init (SPLineClass *klass)
+void SPLineClass::sp_line_class_init(SPLineClass *klass)
{
- parent_class = (SPShapeClass *) g_type_class_ref (SP_TYPE_SHAPE);
+ SPLineClass::static_parent_class = (SPShapeClass *) g_type_class_ref(SP_TYPE_SHAPE);
- SPObjectClass *sp_object_class = (SPObjectClass *) klass;
- sp_object_class->build = sp_line_build;
- sp_object_class->set = sp_line_set;
- sp_object_class->write = sp_line_write;
+ SPObjectClass *sp_object_class = (SPObjectClass *) klass;
+ sp_object_class->build = SPLine::build;
+ sp_object_class->set = SPLine::set;
+ sp_object_class->write = SPLine::write;
- SPItemClass *item_class = (SPItemClass *) klass;
- item_class->description = sp_line_description;
- item_class->set_transform = sp_line_set_transform;
- item_class->convert_to_guides = sp_line_convert_to_guides;
+ SPItemClass *item_class = (SPItemClass *) klass;
+ item_class->description = SPLine::getDescription;
+ item_class->set_transform = SPLine::setTransform;
+ item_class->convert_to_guides = SPLine::convertToGuides;
- sp_object_class->update = sp_line_update;
+ sp_object_class->update = SPLine::update;
- SPShapeClass *shape_class = (SPShapeClass *) klass;
- shape_class->set_shape = sp_line_set_shape;
+ SPShapeClass *shape_class = (SPShapeClass *) klass;
+ shape_class->set_shape = SPLine::setShape;
}
-static void
-sp_line_init (SPLine * line)
+void SPLine::init(SPLine * line)
{
- line->x1.unset();
- line->y1.unset();
- line->x2.unset();
- line->y2.unset();
+ line->x1.unset();
+ line->y1.unset();
+ line->x2.unset();
+ line->y2.unset();
}
-static void
-sp_line_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * repr)
+void SPLine::build(SPObject * object, SPDocument * document, Inkscape::XML::Node * repr)
{
- if (((SPObjectClass *) parent_class)->build) {
- ((SPObjectClass *) parent_class)->build (object, document, repr);
- }
-
- sp_object_read_attr (object, "x1");
- sp_object_read_attr (object, "y1");
- sp_object_read_attr (object, "x2");
- sp_object_read_attr (object, "y2");
+ if (((SPObjectClass *) SPLineClass::static_parent_class)->build) {
+ ((SPObjectClass *) SPLineClass::static_parent_class)->build(object, document, repr);
+ }
+
+ object->readAttr( "x1" );
+ object->readAttr( "y1" );
+ object->readAttr( "x2" );
+ object->readAttr( "y2" );
}
-static void
-sp_line_set (SPObject *object, unsigned int key, const gchar *value)
+void SPLine::set(SPObject *object, unsigned int key, const gchar *value)
{
- SPLine * line = SP_LINE (object);
-
- /* fixme: we should really collect updates */
-
- switch (key) {
- case SP_ATTR_X1:
- line->x1.readOrUnset(value);
- object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
- break;
- case SP_ATTR_Y1:
- line->y1.readOrUnset(value);
- object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
- break;
- case SP_ATTR_X2:
- line->x2.readOrUnset(value);
- object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
- break;
- case SP_ATTR_Y2:
- line->y2.readOrUnset(value);
- object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
- break;
- default:
- if (((SPObjectClass *) parent_class)->set)
- ((SPObjectClass *) parent_class)->set (object, key, value);
- break;
- }
+ SPLine * line = SP_LINE(object);
+
+ /* fixme: we should really collect updates */
+
+ switch (key) {
+ case SP_ATTR_X1:
+ line->x1.readOrUnset(value);
+ object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ break;
+ case SP_ATTR_Y1:
+ line->y1.readOrUnset(value);
+ object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ break;
+ case SP_ATTR_X2:
+ line->x2.readOrUnset(value);
+ object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ break;
+ case SP_ATTR_Y2:
+ line->y2.readOrUnset(value);
+ object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ break;
+ default:
+ if (((SPObjectClass *) SPLineClass::static_parent_class)->set) {
+ ((SPObjectClass *) SPLineClass::static_parent_class)->set(object, key, value);
+ }
+ break;
+ }
}
-static void
-sp_line_update (SPObject *object, SPCtx *ctx, guint flags)
+void SPLine::update(SPObject *object, SPCtx *ctx, guint flags)
{
- if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
- SPLine *line = SP_LINE (object);
+ if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+ SPLine *line = SP_LINE(object);
- SPStyle const *style = object->style;
+ SPStyle const *style = object->style;
SPItemCtx const *ictx = (SPItemCtx const *) ctx;
double const w = (ictx->vp.x1 - ictx->vp.x0);
double const h = (ictx->vp.y1 - ictx->vp.y0);
- double const em = style->font_size.computed;
- double const ex = em * 0.5; // fixme: get from pango or libnrtype.
- line->x1.update(em, ex, w);
- line->x2.update(em, ex, w);
- line->y1.update(em, ex, h);
- line->y2.update(em, ex, h);
-
- sp_shape_set_shape ((SPShape *) object);
- }
-
- if (((SPObjectClass *) parent_class)->update)
- ((SPObjectClass *) parent_class)->update (object, ctx, flags);
+ double const em = style->font_size.computed;
+ double const ex = em * 0.5; // fixme: get from pango or libnrtype.
+ line->x1.update(em, ex, w);
+ line->x2.update(em, ex, w);
+ line->y1.update(em, ex, h);
+ line->y2.update(em, ex, h);
+
+ ((SPShape *) object)->setShape();
+ }
+
+ if (((SPObjectClass *) SPLineClass::static_parent_class)->update) {
+ ((SPObjectClass *) SPLineClass::static_parent_class)->update(object, ctx, flags);
+ }
}
-static Inkscape::XML::Node *
-sp_line_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+Inkscape::XML::Node * SPLine::write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
- SPLine *line = SP_LINE (object);
+ SPLine *line = SP_LINE(object);
- if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
- repr = xml_doc->createElement("svg:line");
- }
+ if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
+ repr = xml_doc->createElement("svg:line");
+ }
- if (repr != SP_OBJECT_REPR (object)) {
- repr->mergeFrom(SP_OBJECT_REPR (object), "id");
- }
+ if (repr != object->getRepr()) {
+ repr->mergeFrom(object->getRepr(), "id");
+ }
- sp_repr_set_svg_double(repr, "x1", line->x1.computed);
- sp_repr_set_svg_double(repr, "y1", line->y1.computed);
- sp_repr_set_svg_double(repr, "x2", line->x2.computed);
- sp_repr_set_svg_double(repr, "y2", line->y2.computed);
+ sp_repr_set_svg_double(repr, "x1", line->x1.computed);
+ sp_repr_set_svg_double(repr, "y1", line->y1.computed);
+ sp_repr_set_svg_double(repr, "x2", line->x2.computed);
+ sp_repr_set_svg_double(repr, "y2", line->y2.computed);
- if (((SPObjectClass *) (parent_class))->write)
- ((SPObjectClass *) (parent_class))->write (object, xml_doc, repr, flags);
+ if (((SPObjectClass *) (SPLineClass::static_parent_class))->write) {
+ ((SPObjectClass *) (SPLineClass::static_parent_class))->write(object, xml_doc, repr, flags);
+ }
- return repr;
+ return repr;
}
-static gchar *
-sp_line_description(SPItem */*item*/)
+gchar * SPLine::getDescription(SPItem */*item*/)
{
return g_strdup(_("<b>Line</b>"));
}
-static void
-sp_line_convert_to_guides(SPItem *item)
+void SPLine::convertToGuides(SPItem *item)
{
- SPLine *line = SP_LINE(item);
- Geom::Point points[2];
+ SPLine *line = SP_LINE(item);
+ Geom::Point points[2];
- Geom::Matrix const i2d (sp_item_i2d_affine(item));
+ Geom::Matrix const i2d(item->i2d_affine());
- points[0] = Geom::Point(line->x1.computed, line->y1.computed)*i2d;
- points[1] = Geom::Point(line->x2.computed, line->y2.computed)*i2d;
+ points[0] = Geom::Point(line->x1.computed, line->y1.computed)*i2d;
+ points[1] = Geom::Point(line->x2.computed, line->y2.computed)*i2d;
- sp_guide_create(inkscape_active_desktop(), points[0], points[1]);
+ SPGuide::createSPGuide(inkscape_active_desktop(), points[0], points[1]);
}
-static Geom::Matrix
-sp_line_set_transform (SPItem *item, Geom::Matrix const &xform)
+Geom::Matrix SPLine::setTransform(SPItem *item, Geom::Matrix const &xform)
{
- SPLine *line = SP_LINE (item);
- Geom::Point points[2];
+ SPLine *line = SP_LINE(item);
+ Geom::Point points[2];
- points[0] = Geom::Point(line->x1.computed, line->y1.computed);
- points[1] = Geom::Point(line->x2.computed, line->y2.computed);
+ points[0] = Geom::Point(line->x1.computed, line->y1.computed);
+ points[1] = Geom::Point(line->x2.computed, line->y2.computed);
- points[0] *= xform;
- points[1] *= xform;
+ points[0] *= xform;
+ points[1] *= xform;
- line->x1.computed = points[0][Geom::X];
- line->y1.computed = points[0][Geom::Y];
- line->x2.computed = points[1][Geom::X];
- line->y2.computed = points[1][Geom::Y];
+ line->x1.computed = points[0][Geom::X];
+ line->y1.computed = points[0][Geom::Y];
+ line->x2.computed = points[1][Geom::X];
+ line->y2.computed = points[1][Geom::Y];
- sp_item_adjust_stroke(item, xform.descrim());
+ item->adjust_stroke(xform.descrim());
- SP_OBJECT (item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
+ SP_OBJECT(item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
- return Geom::identity();
+ return Geom::identity();
}
-static void
-sp_line_set_shape (SPShape *shape)
+void SPLine::setShape(SPShape *shape)
{
- SPLine *line = SP_LINE (shape);
+ SPLine *line = SP_LINE(shape);
- SPCurve *c = new SPCurve ();
+ SPCurve *c = new SPCurve();
- c->moveto(line->x1.computed, line->y1.computed);
- c->lineto(line->x2.computed, line->y2.computed);
+ c->moveto(line->x1.computed, line->y1.computed);
+ c->lineto(line->x2.computed, line->y2.computed);
- sp_shape_set_curve_insync (shape, c, TRUE); // *_insync does not call update, avoiding infinite recursion when set_shape is called by update
+ shape->setCurveInsync(c, TRUE); // *_insync does not call update, avoiding infinite recursion when set_shape is called by update
- c->unref();
+ c->unref();
}
+
+/*
+ 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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/sp-line.h b/src/sp-line.h
index cc6802b7f..8bcb81645 100644
--- a/src/sp-line.h
+++ b/src/sp-line.h
@@ -1,11 +1,13 @@
-#ifndef __SP_LINE_H__
-#define __SP_LINE_H__
+#ifndef SEEN_SP_LINE_H
+#define SEEN_SP_LINE_H
/*
* SVG <line> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 1999-2002 Lauris Kaplinski
*
@@ -17,28 +19,60 @@
-#define SP_TYPE_LINE (sp_line_get_type ())
-#define SP_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_LINE, SPLine))
-#define SP_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_LINE, SPLineClass))
-#define SP_IS_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_LINE))
-#define SP_IS_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_LINE))
+#define SP_TYPE_LINE (SPLine::sp_line_get_type())
+#define SP_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_LINE, SPLine))
+#define SP_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_LINE, SPLineClass))
+#define SP_IS_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_LINE))
+#define SP_IS_LINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_LINE))
class SPLine;
class SPLineClass;
-struct SPLine : public SPShape {
- SVGLength x1;
- SVGLength y1;
- SVGLength x2;
- SVGLength y2;
-};
+class SPLine : public SPShape {
+public:
+ SVGLength x1;
+ SVGLength y1;
+ SVGLength x2;
+ SVGLength y2;
+ static GType sp_line_get_type(void);
+
+private:
+ static void init(SPLine *line);
+
+ static void build(SPObject * object, SPDocument * document, Inkscape::XML::Node * repr);
+ static void set(SPObject *object, unsigned int key, const gchar *value);
+ static Inkscape::XML::Node *write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+ static gchar *getDescription(SPItem * item);
+ static Geom::Matrix setTransform(SPItem *item, Geom::Matrix const &xform);
-struct SPLineClass {
- SPShapeClass parent_class;
+ static void update(SPObject *object, SPCtx *ctx, guint flags);
+ static void setShape(SPShape *shape);
+ static void convertToGuides(SPItem *item);
+
+ friend class SPLineClass;
};
-GType sp_line_get_type (void);
+class SPLineClass {
+public:
+ SPShapeClass parent_class;
+private:
+ static SPShapeClass *static_parent_class;
+ static void sp_line_class_init(SPLineClass *klass);
+
+ friend class SPLine;
+};
-#endif
+#endif // SEEN_SP_LINE_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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/sp-lpe-item.cpp b/src/sp-lpe-item.cpp
index 43eb3c52e..afd36d2dd 100644
--- a/src/sp-lpe-item.cpp
+++ b/src/sp-lpe-item.cpp
@@ -1,5 +1,3 @@
-#define __SP_LPE_ITEM_CPP__
-
/** \file
* Base class for live path effect items
*/
@@ -7,6 +5,7 @@
* Authors:
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
* Bastien Bouclet <bgkweb@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2008 authors
*
@@ -137,7 +136,7 @@ sp_lpe_item_finalize(GObject *object)
static void
sp_lpe_item_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- sp_object_read_attr(object, "inkscape:path-effect");
+ object->readAttr( "inkscape:path-effect" );
if (((SPObjectClass *) parent_class)->build) {
((SPObjectClass *) parent_class)->build(object, document, repr);
@@ -681,7 +680,7 @@ sp_lpe_item_child_added (SPObject *object, Inkscape::XML::Node *child, Inkscape:
(* ((SPObjectClass *) (parent_class))->child_added) (object, child, ref);
if (SP_IS_LPE_ITEM(object) && sp_lpe_item_has_path_effect_recursive(SP_LPE_ITEM(object))) {
- SPObject *ochild = sp_object_get_child_by_repr(object, child);
+ SPObject *ochild = object->get_child_by_repr(child);
if ( ochild && SP_IS_LPE_ITEM(ochild) ) {
sp_lpe_item_create_original_path_recursive(SP_LPE_ITEM(ochild));
}
@@ -692,7 +691,7 @@ static void
sp_lpe_item_remove_child (SPObject * object, Inkscape::XML::Node * child)
{
if (SP_IS_LPE_ITEM(object) && sp_lpe_item_has_path_effect_recursive(SP_LPE_ITEM(object))) {
- SPObject *ochild = sp_object_get_child_by_repr(object, child);
+ SPObject *ochild = object->get_child_by_repr(child);
if ( ochild && SP_IS_LPE_ITEM(ochild) ) {
sp_lpe_item_cleanup_original_path_recursive(SP_LPE_ITEM(ochild));
}
diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp
index 4d880dfa1..54dc51608 100644
--- a/src/sp-mask.cpp
+++ b/src/sp-mask.cpp
@@ -1,10 +1,10 @@
-#define __SP_MASK_C__
-
/*
* SVG <mask> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2003 authors
*
@@ -103,11 +103,11 @@ sp_mask_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *repr
((SPObjectClass *) parent_class)->build (object, document, repr);
}
- sp_object_read_attr (object, "maskUnits");
- sp_object_read_attr (object, "maskContentUnits");
+ object->readAttr( "maskUnits" );
+ object->readAttr( "maskContentUnits" );
/* Register ourselves */
- sp_document_add_resource (document, "mask", object);
+ document->addResource("mask", object);
}
static void
@@ -115,7 +115,7 @@ sp_mask_release (SPObject * object)
{
if (SP_OBJECT_DOCUMENT (object)) {
/* Unregister ourselves */
- sp_document_remove_resource (SP_OBJECT_DOCUMENT (object), "mask", object);
+ SP_OBJECT_DOCUMENT(object)->removeResource("mask", object);
}
SPMask *cp = SP_MASK (object);
@@ -179,8 +179,7 @@ sp_mask_child_added (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML
if (SP_IS_ITEM (ochild)) {
SPMask *cp = SP_MASK (object);
for (SPMaskView *v = cp->display; v != NULL; v = v->next) {
- NRArenaItem *ac = sp_item_invoke_show (SP_ITEM (ochild),
- NR_ARENA_ITEM_ARENA (v->arenaitem),
+ NRArenaItem *ac = SP_ITEM (ochild)->invoke_show ( NR_ARENA_ITEM_ARENA (v->arenaitem),
v->key,
SP_ITEM_REFERENCE_FLAGS);
if (ac) {
@@ -190,68 +189,66 @@ sp_mask_child_added (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML
}
}
-static void
-sp_mask_update (SPObject *object, SPCtx *ctx, guint flags)
+static void sp_mask_update(SPObject *object, SPCtx *ctx, guint flags)
{
- if (flags & SP_OBJECT_MODIFIED_FLAG) {
- flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- }
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
- flags &= SP_OBJECT_MODIFIED_CASCADE;
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
- SPObjectGroup *og = SP_OBJECTGROUP (object);
- GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(SP_OBJECT(og)); child != NULL; child = SP_OBJECT_NEXT(child)) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- SPObject *child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- child->updateDisplay(ctx, flags);
- }
- g_object_unref (G_OBJECT (child));
- }
+ SPObjectGroup *og = SP_OBJECTGROUP(object);
+ GSList *l = NULL;
+ for (SPObject *child = og->firstChild(); child; child = child->getNext()) {
+ g_object_ref(G_OBJECT (child));
+ l = g_slist_prepend (l, child);
+ }
+ l = g_slist_reverse (l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ child->updateDisplay(ctx, flags);
+ }
+ g_object_unref(G_OBJECT(child));
+ }
- SPMask *mask = SP_MASK (object);
- for (SPMaskView *v = mask->display; v != NULL; v = v->next) {
- if (mask->maskContentUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) {
+ SPMask *mask = SP_MASK(object);
+ for (SPMaskView *v = mask->display; v != NULL; v = v->next) {
+ if (mask->maskContentUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) {
Geom::Matrix t(Geom::Scale(v->bbox.x1 - v->bbox.x0, v->bbox.y1 - v->bbox.y0));
- t[4] = v->bbox.x0;
- t[5] = v->bbox.y0;
- nr_arena_group_set_child_transform (NR_ARENA_GROUP (v->arenaitem), &t);
- } else {
- nr_arena_group_set_child_transform (NR_ARENA_GROUP (v->arenaitem), NULL);
- }
- }
+ t[4] = v->bbox.x0;
+ t[5] = v->bbox.y0;
+ nr_arena_group_set_child_transform(NR_ARENA_GROUP(v->arenaitem), &t);
+ } else {
+ nr_arena_group_set_child_transform(NR_ARENA_GROUP(v->arenaitem), NULL);
+ }
+ }
}
-static void
-sp_mask_modified (SPObject *object, guint flags)
+static void sp_mask_modified(SPObject *object, guint flags)
{
- if (flags & SP_OBJECT_MODIFIED_FLAG) {
- flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- }
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
- flags &= SP_OBJECT_MODIFIED_CASCADE;
+ flags &= SP_OBJECT_MODIFIED_CASCADE;
- SPObjectGroup *og = SP_OBJECTGROUP (object);
- GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(SP_OBJECT(og)); child != NULL; child = SP_OBJECT_NEXT(child)) {
- g_object_ref (G_OBJECT (child));
- l = g_slist_prepend (l, child);
- }
- l = g_slist_reverse (l);
- while (l) {
- SPObject *child = SP_OBJECT (l->data);
- l = g_slist_remove (l, child);
- if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
- child->emitModified(flags);
- }
- g_object_unref (G_OBJECT (child));
- }
+ SPObjectGroup *og = SP_OBJECTGROUP(object);
+ GSList *l = NULL;
+ for (SPObject *child = og->firstChild(); child; child = child->getNext()) {
+ g_object_ref(G_OBJECT(child));
+ l = g_slist_prepend(l, child);
+ }
+ l = g_slist_reverse(l);
+ while (l) {
+ SPObject *child = SP_OBJECT(l->data);
+ l = g_slist_remove(l, child);
+ if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ child->emitModified(flags);
+ }
+ g_object_unref(G_OBJECT(child));
+ }
}
static Inkscape::XML::Node *
@@ -273,7 +270,7 @@ sp_mask_create (GSList *reprs, SPDocument *document, Geom::Matrix const* applyTr
{
Inkscape::XML::Node *defsrepr = SP_OBJECT_REPR (SP_DOCUMENT_DEFS (document));
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:mask");
repr->setAttribute("maskUnits", "userSpaceOnUse");
@@ -288,7 +285,7 @@ sp_mask_create (GSList *reprs, SPDocument *document, Geom::Matrix const* applyTr
if (NULL != applyTransform) {
Geom::Matrix transform (item->transform);
transform *= (*applyTransform);
- sp_item_write_transform(item, SP_OBJECT_REPR(item), transform);
+ item->doWriteTransform(SP_OBJECT_REPR(item), transform);
}
}
@@ -299,8 +296,7 @@ sp_mask_create (GSList *reprs, SPDocument *document, Geom::Matrix const* applyTr
return mask_id;
}
-NRArenaItem *
-sp_mask_show (SPMask *mask, NRArena *arena, unsigned int key)
+NRArenaItem *sp_mask_show(SPMask *mask, NRArena *arena, unsigned int key)
{
g_return_val_if_fail (mask != NULL, NULL);
g_return_val_if_fail (SP_IS_MASK (mask), NULL);
@@ -310,9 +306,9 @@ sp_mask_show (SPMask *mask, NRArena *arena, unsigned int key)
NRArenaItem *ai = NRArenaGroup::create(arena);
mask->display = sp_mask_view_new_prepend (mask->display, key, ai);
- for (SPObject *child = sp_object_first_child(SP_OBJECT(mask)) ; child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for ( SPObject *child = mask->firstChild() ; child; child = child->getNext() ) {
if (SP_IS_ITEM (child)) {
- NRArenaItem *ac = sp_item_invoke_show (SP_ITEM (child), arena, key, SP_ITEM_REFERENCE_FLAGS);
+ NRArenaItem *ac = SP_ITEM (child)->invoke_show (arena, key, SP_ITEM_REFERENCE_FLAGS);
if (ac) {
/* The order is not important in mask */
nr_arena_item_add_child (ai, ac, NULL);
@@ -330,15 +326,14 @@ sp_mask_show (SPMask *mask, NRArena *arena, unsigned int key)
return ai;
}
-void
-sp_mask_hide (SPMask *cp, unsigned int key)
+void sp_mask_hide(SPMask *cp, unsigned int key)
{
g_return_if_fail (cp != NULL);
g_return_if_fail (SP_IS_MASK (cp));
- for (SPObject *child = sp_object_first_child(SP_OBJECT(cp)); child != NULL; child = SP_OBJECT_NEXT(child)) {
+ for ( SPObject *child = cp->firstChild(); child; child = child->getNext()) {
if (SP_IS_ITEM (child)) {
- sp_item_invoke_hide (SP_ITEM (child), key);
+ SP_ITEM(child)->invoke_hide (key);
}
}
diff --git a/src/sp-mask.h b/src/sp-mask.h
index 0b995f0ce..d8b6b33ea 100644
--- a/src/sp-mask.h
+++ b/src/sp-mask.h
@@ -1,11 +1,12 @@
-#ifndef __SP_MASK_H__
-#define __SP_MASK_H__
+#ifndef SEEN_SP_MASK_H
+#define SEEN_SP_MASK_H
/*
* SVG <mask> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 2003 authors
*
@@ -63,8 +64,10 @@ protected:
}
SPObject * const owner = this->getOwner();
if (obj->isAncestorOf(owner)) {
- Inkscape::XML::Node * const owner_repr = owner->repr;
- Inkscape::XML::Node * const obj_repr = obj->repr;
+ //XML Tree being used directly here while it shouldn't be...
+ Inkscape::XML::Node * const owner_repr = owner->getRepr();
+ //XML Tree being used directly here while it shouldn't be...
+ Inkscape::XML::Node * const obj_repr = obj->getRepr();
gchar const * owner_name = NULL;
gchar const * owner_mask = NULL;
gchar const * obj_name = NULL;
@@ -94,4 +97,4 @@ void sp_mask_set_bbox (SPMask *mask, unsigned int key, NRRect *bbox);
const gchar *sp_mask_create (GSList *reprs, SPDocument *document, Geom::Matrix const* applyTransform);
-#endif
+#endif // SEEN_SP_MASK_H
diff --git a/src/sp-missing-glyph.cpp b/src/sp-missing-glyph.cpp
index 7d5c42763..9604fe0ca 100644
--- a/src/sp-missing-glyph.cpp
+++ b/src/sp-missing-glyph.cpp
@@ -3,13 +3,13 @@
#endif
#ifdef ENABLE_SVG_FONTS
-#define __SP_MISSING_GLYPH_C__
/*
* SVG <missing-glyph> element implementation
*
* Author:
* Felipe C. da S. Sanches <juca@members.fsf.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008, Felipe C. da S. Sanches
*
@@ -82,11 +82,11 @@ static void sp_missing_glyph_build(SPObject *object, SPDocument *document, Inksc
((SPObjectClass *) (parent_class))->build(object, document, repr);
}
- sp_object_read_attr(object, "d");
- sp_object_read_attr(object, "horiz-adv-x");
- sp_object_read_attr(object, "vert-origin-x");
- sp_object_read_attr(object, "vert-origin-y");
- sp_object_read_attr(object, "vert-adv-y");
+ object->readAttr( "d" );
+ object->readAttr( "horiz-adv-x" );
+ object->readAttr( "vert-origin-x" );
+ object->readAttr( "vert-origin-y" );
+ object->readAttr( "vert-adv-y" );
}
static void sp_missing_glyph_release(SPObject *object)
@@ -176,11 +176,14 @@ static Inkscape::XML::Node *sp_missing_glyph_write(SPObject *object, Inkscape::X
sp_repr_set_svg_double(repr, "vert-adv-y", glyph->vert_adv_y);
*/
if (repr != SP_OBJECT_REPR(object)) {
- COPY_ATTR(repr, object->repr, "d");
- COPY_ATTR(repr, object->repr, "horiz-adv-x");
- COPY_ATTR(repr, object->repr, "vert-origin-x");
- COPY_ATTR(repr, object->repr, "vert-origin-y");
- COPY_ATTR(repr, object->repr, "vert-adv-y");
+
+ // All the COPY_ATTR functions below use
+ // XML Tree directly while they shouldn't.
+ COPY_ATTR(repr, object->getRepr(), "d");
+ COPY_ATTR(repr, object->getRepr(), "horiz-adv-x");
+ COPY_ATTR(repr, object->getRepr(), "vert-origin-x");
+ COPY_ATTR(repr, object->getRepr(), "vert-origin-y");
+ COPY_ATTR(repr, object->getRepr(), "vert-adv-y");
}
if (((SPObjectClass *) (parent_class))->write) {
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index be2bcd478..59ef4762d 100644
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -1,11 +1,11 @@
-#define __SP_NAMEDVIEW_C__
-
/*
* <sodipodi:namedview> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
* Copyright (C) 1999-2008 Authors
@@ -35,6 +35,8 @@
#include "desktop.h"
#include "conn-avoid-ref.h" // for defaultConnSpacing.
+using Inkscape::DocumentUndo;
+
#define DEFAULTGRIDCOLOR 0x3f3fff25
#define DEFAULTGRIDEMPCOLOR 0x3f3fff60
#define DEFAULTGRIDEMPSPACING 5
@@ -176,7 +178,7 @@ static void sp_namedview_generate_old_grid(SPNamedView * /*nv*/, SPDocument *doc
// generate new xy grid with the correct settings
// first create the child xml node, then hook it to repr. This order is important, to not set off listeners to repr before the new node is complete.
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *newnode = xml_doc->createElement("inkscape:grid");
newnode->setAttribute("id", "GridFromPre046Settings");
newnode->setAttribute("type", Inkscape::CanvasGrid::getSVGName(Inkscape::GRID_RECTANGULAR));
@@ -204,7 +206,7 @@ static void sp_namedview_generate_old_grid(SPNamedView * /*nv*/, SPDocument *doc
repr->setAttribute("gridempopacity", NULL);
repr->setAttribute("gridempspacing", NULL);
-// sp_document_done(doc, SP_VERB_DIALOG_NAMEDVIEW, _("Create new grid from pre0.46 grid settings"));
+// SPDocumentUndo::done(doc, SP_VERB_DIALOG_NAMEDVIEW, _("Create new grid from pre0.46 grid settings"));
}
}
@@ -217,57 +219,57 @@ static void sp_namedview_build(SPObject *object, SPDocument *document, Inkscape:
(* ((SPObjectClass *) (parent_class))->build)(object, document, repr);
}
- sp_object_read_attr(object, "inkscape:document-units");
- sp_object_read_attr(object, "units");
- sp_object_read_attr(object, "viewonly");
- sp_object_read_attr(object, "showguides");
- sp_object_read_attr(object, "showgrid");
- sp_object_read_attr(object, "gridtolerance");
- sp_object_read_attr(object, "guidetolerance");
- sp_object_read_attr(object, "objecttolerance");
- sp_object_read_attr(object, "guidecolor");
- sp_object_read_attr(object, "guideopacity");
- sp_object_read_attr(object, "guidehicolor");
- sp_object_read_attr(object, "guidehiopacity");
- sp_object_read_attr(object, "showborder");
- sp_object_read_attr(object, "inkscape:showpageshadow");
- sp_object_read_attr(object, "borderlayer");
- sp_object_read_attr(object, "bordercolor");
- sp_object_read_attr(object, "borderopacity");
- sp_object_read_attr(object, "pagecolor");
- sp_object_read_attr(object, "inkscape:pageopacity");
- sp_object_read_attr(object, "inkscape:pageshadow");
- sp_object_read_attr(object, "inkscape:zoom");
- sp_object_read_attr(object, "inkscape:cx");
- sp_object_read_attr(object, "inkscape:cy");
- sp_object_read_attr(object, "inkscape:window-width");
- sp_object_read_attr(object, "inkscape:window-height");
- sp_object_read_attr(object, "inkscape:window-x");
- sp_object_read_attr(object, "inkscape:window-y");
- sp_object_read_attr(object, "inkscape:window-maximized");
- sp_object_read_attr(object, "inkscape:snap-global");
- sp_object_read_attr(object, "inkscape:snap-bbox");
- sp_object_read_attr(object, "inkscape:snap-nodes");
- sp_object_read_attr(object, "inkscape:snap-from-guide");
- sp_object_read_attr(object, "inkscape:snap-center");
- sp_object_read_attr(object, "inkscape:snap-smooth-nodes");
- sp_object_read_attr(object, "inkscape:snap-midpoints");
- sp_object_read_attr(object, "inkscape:snap-object-midpoints");
- sp_object_read_attr(object, "inkscape:snap-bbox-edge-midpoints");
- sp_object_read_attr(object, "inkscape:snap-bbox-midpoints");
- sp_object_read_attr(object, "inkscape:snap-to-guides");
- sp_object_read_attr(object, "inkscape:snap-grids");
- sp_object_read_attr(object, "inkscape:snap-intersection-paths");
- sp_object_read_attr(object, "inkscape:object-paths");
- sp_object_read_attr(object, "inkscape:object-nodes");
- sp_object_read_attr(object, "inkscape:bbox-paths");
- sp_object_read_attr(object, "inkscape:bbox-nodes");
- sp_object_read_attr(object, "inkscape:snap-page");
- sp_object_read_attr(object, "inkscape:current-layer");
- sp_object_read_attr(object, "inkscape:connector-spacing");
+ object->readAttr( "inkscape:document-units" );
+ object->readAttr( "units" );
+ object->readAttr( "viewonly" );
+ object->readAttr( "showguides" );
+ object->readAttr( "showgrid" );
+ object->readAttr( "gridtolerance" );
+ object->readAttr( "guidetolerance" );
+ object->readAttr( "objecttolerance" );
+ object->readAttr( "guidecolor" );
+ object->readAttr( "guideopacity" );
+ object->readAttr( "guidehicolor" );
+ object->readAttr( "guidehiopacity" );
+ object->readAttr( "showborder" );
+ object->readAttr( "inkscape:showpageshadow" );
+ object->readAttr( "borderlayer" );
+ object->readAttr( "bordercolor" );
+ object->readAttr( "borderopacity" );
+ object->readAttr( "pagecolor" );
+ object->readAttr( "inkscape:pageopacity" );
+ object->readAttr( "inkscape:pageshadow" );
+ object->readAttr( "inkscape:zoom" );
+ object->readAttr( "inkscape:cx" );
+ object->readAttr( "inkscape:cy" );
+ object->readAttr( "inkscape:window-width" );
+ object->readAttr( "inkscape:window-height" );
+ object->readAttr( "inkscape:window-x" );
+ object->readAttr( "inkscape:window-y" );
+ object->readAttr( "inkscape:window-maximized" );
+ object->readAttr( "inkscape:snap-global" );
+ object->readAttr( "inkscape:snap-bbox" );
+ object->readAttr( "inkscape:snap-nodes" );
+ object->readAttr( "inkscape:snap-from-guide" );
+ object->readAttr( "inkscape:snap-center" );
+ object->readAttr( "inkscape:snap-smooth-nodes" );
+ object->readAttr( "inkscape:snap-midpoints" );
+ object->readAttr( "inkscape:snap-object-midpoints" );
+ object->readAttr( "inkscape:snap-bbox-edge-midpoints" );
+ object->readAttr( "inkscape:snap-bbox-midpoints" );
+ object->readAttr( "inkscape:snap-to-guides" );
+ object->readAttr( "inkscape:snap-grids" );
+ object->readAttr( "inkscape:snap-intersection-paths" );
+ object->readAttr( "inkscape:object-paths" );
+ object->readAttr( "inkscape:object-nodes" );
+ object->readAttr( "inkscape:bbox-paths" );
+ object->readAttr( "inkscape:bbox-nodes" );
+ object->readAttr( "inkscape:snap-page" );
+ object->readAttr( "inkscape:current-layer" );
+ object->readAttr( "inkscape:connector-spacing" );
/* Construct guideline list */
- for (SPObject *o = sp_object_first_child(SP_OBJECT(og)) ; o != NULL; o = SP_OBJECT_NEXT(o) ) {
+ for (SPObject *o = SP_OBJECT(og)->firstChild() ; o; o = o->getNext() ) {
if (SP_IS_GUIDE(o)) {
SPGuide * g = SP_GUIDE(o);
nv->guides = g_slist_prepend(nv->guides, g);
@@ -331,17 +333,17 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_GRIDTOLERANCE:
- nv->snap_manager.snapprefs.setGridTolerance(value ? g_ascii_strtod(value, NULL) : 10000);
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
- break;
+ nv->snap_manager.snapprefs.setGridTolerance(value ? g_ascii_strtod(value, NULL) : 10000);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ break;
case SP_ATTR_GUIDETOLERANCE:
- nv->snap_manager.snapprefs.setGuideTolerance(value ? g_ascii_strtod(value, NULL) : 20);
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
- break;
+ nv->snap_manager.snapprefs.setGuideTolerance(value ? g_ascii_strtod(value, NULL) : 20);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ break;
case SP_ATTR_OBJECTTOLERANCE:
- nv->snap_manager.snapprefs.setObjectTolerance(value ? g_ascii_strtod(value, NULL) : 20);
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
- break;
+ nv->snap_manager.snapprefs.setObjectTolerance(value ? g_ascii_strtod(value, NULL) : 20);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ break;
case SP_ATTR_GUIDECOLOR:
nv->guidecolor = (nv->guidecolor & 0xff) | (DEFAULTGUIDECOLOR & 0xffffff00);
if (value) {
@@ -448,10 +450,10 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_WINDOW_MAXIMIZED:
- nv->window_maximized = value ? atoi(value) : 0;
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
- break;
- case SP_ATTR_INKSCAPE_SNAP_GLOBAL:
+ nv->window_maximized = value ? atoi(value) : 0;
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ break;
+ case SP_ATTR_INKSCAPE_SNAP_GLOBAL:
nv->snap_manager.snapprefs.setSnapEnabledGlobally(value ? sp_str_to_bool(value) : TRUE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
@@ -468,14 +470,14 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_SNAP_GRIDS:
- nv->snap_manager.snapprefs.setSnapToGrids(value ? sp_str_to_bool(value) : TRUE);
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
- break;
+ nv->snap_manager.snapprefs.setSnapToGrids(value ? sp_str_to_bool(value) : TRUE);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ break;
case SP_ATTR_INKSCAPE_SNAP_TO_GUIDES:
- nv->snap_manager.snapprefs.setSnapToGuides(value ? sp_str_to_bool(value) : TRUE);
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
- break;
- case SP_ATTR_INKSCAPE_SNAP_SMOOTH_NODES:
+ nv->snap_manager.snapprefs.setSnapToGuides(value ? sp_str_to_bool(value) : TRUE);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ break;
+ case SP_ATTR_INKSCAPE_SNAP_SMOOTH_NODES:
nv->snap_manager.snapprefs.setSnapSmoothNodes(value ? sp_str_to_bool(value) : FALSE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
@@ -484,18 +486,18 @@ static void sp_namedview_set(SPObject *object, unsigned int key, const gchar *va
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
case SP_ATTR_INKSCAPE_SNAP_OBJECT_MIDPOINTS:
- nv->snap_manager.snapprefs.setSnapObjectMidpoints(value ? sp_str_to_bool(value) : FALSE);
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
- break;
+ nv->snap_manager.snapprefs.setSnapObjectMidpoints(value ? sp_str_to_bool(value) : FALSE);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ break;
case SP_ATTR_INKSCAPE_SNAP_BBOX_EDGE_MIDPOINTS:
- nv->snap_manager.snapprefs.setSnapBBoxEdgeMidpoints(value ? sp_str_to_bool(value) : FALSE);
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
- break;
- case SP_ATTR_INKSCAPE_SNAP_BBOX_MIDPOINTS:
- nv->snap_manager.snapprefs.setSnapBBoxMidpoints(value ? sp_str_to_bool(value) : FALSE);
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
- break;
- case SP_ATTR_INKSCAPE_SNAP_FROM_GUIDE:
+ nv->snap_manager.snapprefs.setSnapBBoxEdgeMidpoints(value ? sp_str_to_bool(value) : FALSE);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ break;
+ case SP_ATTR_INKSCAPE_SNAP_BBOX_MIDPOINTS:
+ nv->snap_manager.snapprefs.setSnapBBoxMidpoints(value ? sp_str_to_bool(value) : FALSE);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ break;
+ case SP_ATTR_INKSCAPE_SNAP_FROM_GUIDE:
nv->snap_manager.snapprefs.setSnapModeGuide(value ? sp_str_to_bool(value) : TRUE);
object->requestModified(SP_OBJECT_MODIFIED_FLAG);
break;
@@ -667,10 +669,9 @@ static void sp_namedview_child_added(SPObject *object, Inkscape::XML::Node *chil
g_object_set(G_OBJECT(g), "color", nv->guidecolor, "hicolor", nv->guidehicolor, NULL);
if (nv->editable) {
for (GSList *l = nv->views; l != NULL; l = l->next) {
- sp_guide_show(g, static_cast<SPDesktop*>(l->data)->guides, (GCallback) sp_dt_guide_event);
+ g->SPGuide::showSPGuide(static_cast<SPDesktop*>(l->data)->guides, (GCallback) sp_dt_guide_event);
if (static_cast<SPDesktop*>(l->data)->guides_active)
- sp_guide_sensitize(g,
- sp_desktop_canvas(static_cast<SPDesktop*> (l->data)),
+ g->sensitize(sp_desktop_canvas(static_cast<SPDesktop*> (l->data)),
TRUE);
sp_namedview_show_single_guide(SP_GUIDE(g), nv->showguides);
}
@@ -728,9 +729,9 @@ static Inkscape::XML::Node *sp_namedview_write(SPObject *object, Inkscape::XML::
void SPNamedView::show(SPDesktop *desktop)
{
for (GSList *l = guides; l != NULL; l = l->next) {
- sp_guide_show(SP_GUIDE(l->data), desktop->guides, (GCallback) sp_dt_guide_event);
+ SP_GUIDE(l->data)->showSPGuide( desktop->guides, (GCallback) sp_dt_guide_event);
if (desktop->guides_active) {
- sp_guide_sensitize(SP_GUIDE(l->data), sp_desktop_canvas(desktop), TRUE);
+ SP_GUIDE(l->data)->sensitize(sp_desktop_canvas(desktop), TRUE);
}
sp_namedview_show_single_guide(SP_GUIDE(l->data), showguides);
}
@@ -752,6 +753,12 @@ void SPNamedView::show(SPDesktop *desktop)
#define MIN_ONSCREEN_DISTANCE 50
+void SPNamedView::writeNewGrid(SPDocument *document,int gridtype)
+{
+ g_assert(this->getRepr() != NULL);
+ Inkscape::CanvasGrid::writeNewGridToRepr(this->getRepr(),document,static_cast<Inkscape::GridType>(gridtype));
+}
+
/*
* Restores window geometry from the document settings or defaults in prefs
*/
@@ -763,25 +770,25 @@ void sp_namedview_window_from_document(SPDesktop *desktop)
// restore window size and position stored with the document
if (geometry_from_file) {
- if (nv->window_maximized) {
- Gtk::Window *win = desktop->getToplevel();
- if (win){
- win->maximize();
- }
- } else {
- gint w = MIN(gdk_screen_width(), nv->window_width);
- gint h = MIN(gdk_screen_height(), nv->window_height);
- // prevent the window from moving off the screen to the right or to the bottom
- gint x = MIN(gdk_screen_width() - MIN_ONSCREEN_DISTANCE, nv->window_x);
- gint y = MIN(gdk_screen_height() - MIN_ONSCREEN_DISTANCE, nv->window_y);
- // prevent the window from moving off the screen to the left or to the top
- x = MAX(MIN_ONSCREEN_DISTANCE - nv->window_width, x);
- y = MAX(MIN_ONSCREEN_DISTANCE - nv->window_height, y);
- if (w>0 && h>0) {
- desktop->setWindowSize(w, h);
- desktop->setWindowPosition(Geom::Point(x, y));
- }
- }
+ if (nv->window_maximized) {
+ Gtk::Window *win = desktop->getToplevel();
+ if (win){
+ win->maximize();
+ }
+ } else {
+ gint w = MIN(gdk_screen_width(), nv->window_width);
+ gint h = MIN(gdk_screen_height(), nv->window_height);
+ // prevent the window from moving off the screen to the right or to the bottom
+ gint x = MIN(gdk_screen_width() - MIN_ONSCREEN_DISTANCE, nv->window_x);
+ gint y = MIN(gdk_screen_height() - MIN_ONSCREEN_DISTANCE, nv->window_y);
+ // prevent the window from moving off the screen to the left or to the top
+ x = MAX(MIN_ONSCREEN_DISTANCE - nv->window_width, x);
+ y = MAX(MIN_ONSCREEN_DISTANCE - nv->window_height, y);
+ if (w>0 && h>0) {
+ desktop->setWindowSize(w, h);
+ desktop->setWindowPosition(Geom::Point(x, y));
+ }
+ }
}
// restore zoom and view
@@ -800,6 +807,17 @@ void sp_namedview_window_from_document(SPDesktop *desktop)
}
}
+bool SPNamedView::getSnapGlobal() const
+{
+ return this->snap_manager.snapprefs.getSnapEnabledGlobally();
+}
+
+void SPNamedView::setSnapGlobal(bool v)
+{
+ g_assert(this->getRepr() != NULL);
+ sp_repr_set_boolean(this->getRepr(), "inkscape:snap-global", v);
+}
+
void sp_namedview_update_layers_from_document (SPDesktop *desktop)
{
SPObject *layer = NULL;
@@ -814,8 +832,7 @@ void sp_namedview_update_layers_from_document (SPDesktop *desktop)
}
// if that didn't work out, look for the topmost layer
if (!layer) {
- SPObject *iter = sp_object_first_child(SP_DOCUMENT_ROOT(document));
- for ( ; iter ; iter = SP_OBJECT_NEXT(iter) ) {
+ for ( SPObject *iter = document->getRoot()->firstChild(); iter ; iter = iter->getNext() ) {
if (desktop->isLayer(iter)) {
layer = iter;
}
@@ -837,15 +854,15 @@ void sp_namedview_document_from_window(SPDesktop *desktop)
Geom::Rect const r = desktop->get_display_area();
// saving window geometry is not undoable
- bool saved = sp_document_get_undo_sensitive(sp_desktop_document(desktop));
- sp_document_set_undo_sensitive(sp_desktop_document(desktop), false);
+ bool saved = DocumentUndo::getUndoSensitive(sp_desktop_document(desktop));
+ DocumentUndo::setUndoSensitive(sp_desktop_document(desktop), false);
sp_repr_set_svg_double(view, "inkscape:zoom", desktop->current_zoom());
sp_repr_set_svg_double(view, "inkscape:cx", r.midpoint()[Geom::X]);
sp_repr_set_svg_double(view, "inkscape:cy", r.midpoint()[Geom::Y]);
if (save_geometry_in_file) {
- gint w, h, x, y;
+ gint w, h, x, y;
desktop->getWindowGeometry(x, y, w, h);
sp_repr_set_int(view, "inkscape:window-width", w);
sp_repr_set_int(view, "inkscape:window-height", h);
@@ -857,7 +874,7 @@ void sp_namedview_document_from_window(SPDesktop *desktop)
view->setAttribute("inkscape:current-layer", desktop->currentLayer()->getId());
// restore undoability
- sp_document_set_undo_sensitive(sp_desktop_document(desktop), saved);
+ DocumentUndo::setUndoSensitive(sp_desktop_document(desktop), saved);
}
void SPNamedView::hide(SPDesktop const *desktop)
@@ -866,7 +883,7 @@ void SPNamedView::hide(SPDesktop const *desktop)
g_assert(g_slist_find(views, desktop));
for (GSList *l = guides; l != NULL; l = l->next) {
- sp_guide_hide(SP_GUIDE(l->data), sp_desktop_canvas(desktop));
+ SP_GUIDE(l->data)->hideSPGuide(sp_desktop_canvas(desktop));
}
views = g_slist_remove(views, desktop);
@@ -880,28 +897,28 @@ void SPNamedView::activateGuides(gpointer desktop, gboolean active)
SPDesktop *dt = static_cast<SPDesktop*>(desktop);
for (GSList *l = guides; l != NULL; l = l->next) {
- sp_guide_sensitize(SP_GUIDE(l->data), sp_desktop_canvas(dt), active);
+ SP_GUIDE(l->data)->sensitize( sp_desktop_canvas(dt), active);
}
}
static void sp_namedview_setup_guides(SPNamedView *nv)
{
for (GSList *l = nv->guides; l != NULL; l = l->next) {
- sp_namedview_show_single_guide(SP_GUIDE(l->data), nv->showguides);
+ sp_namedview_show_single_guide(SP_GUIDE(l->data), nv->showguides);
}
}
static void sp_namedview_show_single_guide(SPGuide* guide, bool show)
{
- for (GSList *v = guide->views; v != NULL; v = v->next) {
- if (show) {
- sp_canvas_item_show(SP_CANVAS_ITEM(v->data));
- sp_canvas_item_show(SP_CANVAS_ITEM(SP_GUIDELINE(v->data)->origin));
- } else {
- sp_canvas_item_hide(SP_CANVAS_ITEM(v->data));
- sp_canvas_item_hide(SP_CANVAS_ITEM(SP_GUIDELINE(v->data)->origin));
- }
- }
+ for (GSList *v = guide->views; v != NULL; v = v->next) {
+ if (show) {
+ sp_canvas_item_show(SP_CANVAS_ITEM(v->data));
+ sp_canvas_item_show(SP_CANVAS_ITEM(SP_GUIDELINE(v->data)->origin));
+ } else {
+ sp_canvas_item_hide(SP_CANVAS_ITEM(v->data));
+ sp_canvas_item_hide(SP_CANVAS_ITEM(SP_GUIDELINE(v->data)->origin));
+ }
+ }
}
void sp_namedview_toggle_guides(SPDocument *doc, Inkscape::XML::Node *repr)
@@ -914,10 +931,10 @@ void sp_namedview_toggle_guides(SPDocument *doc, Inkscape::XML::Node *repr)
v = !v;
}
- bool saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, false);
+ bool saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false);
sp_repr_set_boolean(repr, "showguides", v);
- sp_document_set_undo_sensitive(doc, saved);
+ DocumentUndo::setUndoSensitive(doc, saved);
doc->setModifiedSinceSave();
}
@@ -929,10 +946,10 @@ void sp_namedview_show_grids(SPNamedView * namedview, bool show, bool dirty_docu
SPDocument *doc = SP_OBJECT_DOCUMENT (namedview);
Inkscape::XML::Node *repr = SP_OBJECT_REPR(namedview);
- bool saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, false);
+ bool saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false);
sp_repr_set_boolean(repr, "showgrid", namedview->grids_visible);
- sp_document_set_undo_sensitive(doc, saved);
+ DocumentUndo::setUndoSensitive(doc, saved);
/* we don't want the document to get dirty on startup; that's when
we call this function with dirty_document = false */
@@ -945,7 +962,7 @@ gchar const *SPNamedView::getName() const
{
SPException ex;
SP_EXCEPTION_INIT(&ex);
- return sp_object_getAttribute(SP_OBJECT(this), "id", &ex);
+ return SP_OBJECT(this)->getAttribute("id", &ex);
}
guint SPNamedView::getViewCount()
@@ -1010,6 +1027,47 @@ SPNamedView *sp_document_namedview(SPDocument *document, const gchar *id)
return (SPNamedView *) nv;
}
+void SPNamedView::setGuides(bool v)
+{
+ g_assert(this->getRepr() != NULL);
+ sp_repr_set_boolean(this->getRepr(), "showguides", v);
+ sp_repr_set_boolean(this->getRepr(), "inkscape:guide-bbox", v);
+}
+
+/**
+ * Gets page fitting margin information from the namedview node in the XML.
+ * \param nv_repr reference to this document's namedview
+ * \param key the same key used by the RegisteredScalarUnit in
+ * ui/widget/page-sizer.cpp
+ * \param margin_units units for the margin
+ * \param return_units units to return the result in
+ * \param width width in px (for percentage margins)
+ * \param height height in px (for percentage margins)
+ * \param use_width true if the this key is left or right margins, false
+ * otherwise. Used for percentage margins.
+ * \return the margin size in px, else 0.0 if anything is invalid.
+ */
+double SPNamedView::getMarginLength(gchar const * const key,
+ SPUnit const * const margin_units,
+ SPUnit const * const return_units,
+ double const width,
+ double const height,
+ bool const use_width)
+{
+ double value;
+ if(!this->storeAsDouble(key,&value)) {
+ return 0.0;
+ }
+ if (margin_units == &sp_unit_get_by_id (SP_UNIT_PERCENT)) {
+ return (use_width)? width * value : height * value;
+ }
+ if (!sp_convert_distance (&value, margin_units, return_units)) {
+ return 0.0;
+ }
+ return value;
+}
+
+
/**
* Returns namedview's default metric.
*/
diff --git a/src/sp-namedview.h b/src/sp-namedview.h
index 7a54b2dc5..86b16a557 100644
--- a/src/sp-namedview.h
+++ b/src/sp-namedview.h
@@ -6,6 +6,7 @@
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
* Copyright (C) Lauris Kaplinski 2000-2002
@@ -23,6 +24,8 @@
#include "sp-object-group.h"
#include "sp-metric.h"
#include "snap.h"
+#include "display/canvas-grid.h"
+#include "document.h"
namespace Inkscape {
class CanvasGrid;
@@ -81,6 +84,14 @@ struct SPNamedView : public SPObjectGroup {
void translateGuides(Geom::Translate const &translation);
void scrollAllDesktops(double dx, double dy, bool is_scrolling);
+ void writeNewGrid(SPDocument *document,int gridtype);
+ bool getSnapGlobal() const;
+ void setSnapGlobal(bool v);
+ void setGuides(bool v);
+
+private:
+ double getMarginLength(gchar const * const key,SPUnit const * const margin_units,SPUnit const * const return_units,double const width,double const height,bool const use_width);
+ friend class SPDocument;
};
struct SPNamedViewClass {
diff --git a/src/sp-object-group.cpp b/src/sp-object-group.cpp
index 1d5c04339..001d7898f 100644
--- a/src/sp-object-group.cpp
+++ b/src/sp-object-group.cpp
@@ -1,10 +1,10 @@
-#define __SP_OBJECTGROUP_C__
-
/*
* Abstract base class for non-item groups
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2003 Authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -16,120 +16,113 @@
#include "xml/repr.h"
#include "document.h"
-static void sp_objectgroup_class_init (SPObjectGroupClass *klass);
-static void sp_objectgroup_init (SPObjectGroup *objectgroup);
-
-static void sp_objectgroup_child_added (SPObject * object, Inkscape::XML::Node * child, Inkscape::XML::Node * ref);
-static void sp_objectgroup_remove_child (SPObject * object, Inkscape::XML::Node * child);
-static void sp_objectgroup_order_changed (SPObject * object, Inkscape::XML::Node * child, Inkscape::XML::Node * old_ref, Inkscape::XML::Node * new_ref);
-static Inkscape::XML::Node *sp_objectgroup_write (SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static SPObjectClass *parent_class;
+SPObjectClass * SPObjectGroupClass::static_parent_class = 0;
-GType
-sp_objectgroup_get_type (void)
+GType SPObjectGroup::sp_objectgroup_get_type(void)
{
- static GType objectgroup_type = 0;
- if (!objectgroup_type) {
- GTypeInfo objectgroup_info = {
- sizeof (SPObjectGroupClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) sp_objectgroup_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (SPObjectGroup),
- 16, /* n_preallocs */
- (GInstanceInitFunc) sp_objectgroup_init,
- NULL, /* value_table */
- };
- objectgroup_type = g_type_register_static (SP_TYPE_OBJECT, "SPObjectGroup", &objectgroup_info, (GTypeFlags)0);
- }
- return objectgroup_type;
+ static GType objectgroup_type = 0;
+ if (!objectgroup_type) {
+ GTypeInfo objectgroup_info = {
+ sizeof(SPObjectGroupClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) SPObjectGroupClass::sp_objectgroup_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof(SPObjectGroup),
+ 16, /* n_preallocs */
+ (GInstanceInitFunc) init,
+ NULL, /* value_table */
+ };
+ objectgroup_type = g_type_register_static(SP_TYPE_OBJECT, "SPObjectGroup", &objectgroup_info, (GTypeFlags)0);
+ }
+ return objectgroup_type;
}
-static void
-sp_objectgroup_class_init (SPObjectGroupClass *klass)
+void SPObjectGroupClass::sp_objectgroup_class_init(SPObjectGroupClass *klass)
{
- GObjectClass * object_class;
- SPObjectClass * sp_object_class;
+ GObjectClass * object_class = (GObjectClass *) klass;
+ SPObjectClass * sp_object_class = (SPObjectClass *) klass;
- object_class = (GObjectClass *) klass;
- sp_object_class = (SPObjectClass *) klass;
+ static_parent_class = (SPObjectClass *)g_type_class_ref(SP_TYPE_OBJECT);
- parent_class = (SPObjectClass *)g_type_class_ref (SP_TYPE_OBJECT);
-
- sp_object_class->child_added = sp_objectgroup_child_added;
- sp_object_class->remove_child = sp_objectgroup_remove_child;
- sp_object_class->order_changed = sp_objectgroup_order_changed;
- sp_object_class->write = sp_objectgroup_write;
+ sp_object_class->child_added = SPObjectGroup::childAdded;
+ sp_object_class->remove_child = SPObjectGroup::removeChild;
+ sp_object_class->order_changed = SPObjectGroup::orderChanged;
+ sp_object_class->write = SPObjectGroup::write;
}
-static void
-sp_objectgroup_init (SPObjectGroup */*objectgroup*/)
+void SPObjectGroup::init(SPObjectGroup * /*objectgroup*/)
{
}
-static void
-sp_objectgroup_child_added (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
+void SPObjectGroup::childAdded(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
{
- if (((SPObjectClass *) (parent_class))->child_added)
- (* ((SPObjectClass *) (parent_class))->child_added) (object, child, ref);
+ if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->child_added) {
+ (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->child_added)(object, child, ref);
+ }
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
-static void
-sp_objectgroup_remove_child (SPObject *object, Inkscape::XML::Node *child)
+void SPObjectGroup::removeChild(SPObject *object, Inkscape::XML::Node *child)
{
- if (((SPObjectClass *) (parent_class))->remove_child)
- (* ((SPObjectClass *) (parent_class))->remove_child) (object, child);
+ if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->remove_child) {
+ (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->remove_child)(object, child);
+ }
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
-static void
-sp_objectgroup_order_changed (SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref)
+void SPObjectGroup::orderChanged(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref)
{
- if (((SPObjectClass *) (parent_class))->order_changed)
- (* ((SPObjectClass *) (parent_class))->order_changed) (object, child, old_ref, new_ref);
+ if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->order_changed) {
+ (* ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->order_changed)(object, child, old_ref, new_ref);
+ }
- object->requestModified(SP_OBJECT_MODIFIED_FLAG);
+ object->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
-static Inkscape::XML::Node *
-sp_objectgroup_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+Inkscape::XML::Node *SPObjectGroup::write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
- SPObjectGroup *group;
- SPObject *child;
- Inkscape::XML::Node *crepr;
-
- group = SP_OBJECTGROUP (object);
-
- if (flags & SP_OBJECT_WRITE_BUILD) {
- GSList *l;
- if (!repr) {
- repr = xml_doc->createElement("svg:g");
- }
- l = NULL;
- for ( child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- crepr = child->updateRepr(xml_doc, NULL, flags);
- if (crepr) l = g_slist_prepend (l, crepr);
- }
- while (l) {
- repr->addChild((Inkscape::XML::Node *) l->data, NULL);
- Inkscape::GC::release((Inkscape::XML::Node *) l->data);
- l = g_slist_remove (l, l->data);
- }
- } else {
- for ( child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- child->updateRepr(flags);
- }
- }
-
- if (((SPObjectClass *) (parent_class))->write)
- ((SPObjectClass *) (parent_class))->write (object, xml_doc, repr, flags);
-
- return repr;
+ SP_OBJECTGROUP(object); // Ensure we have the right type of SPObject
+
+ if (flags & SP_OBJECT_WRITE_BUILD) {
+ if (!repr) {
+ repr = xml_doc->createElement("svg:g");
+ }
+ GSList *l = 0;
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
+ if (crepr) {
+ l = g_slist_prepend(l, crepr);
+ }
+ }
+ while (l) {
+ repr->addChild((Inkscape::XML::Node *) l->data, NULL);
+ Inkscape::GC::release((Inkscape::XML::Node *) l->data);
+ l = g_slist_remove(l, l->data);
+ }
+ } else {
+ for ( SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ child->updateRepr(flags);
+ }
+ }
+
+ if (((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->write) {
+ ((SPObjectClass *) (SPObjectGroupClass::static_parent_class))->write(object, xml_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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/sp-object-group.h b/src/sp-object-group.h
index 5d67df6fe..a666a316a 100644
--- a/src/sp-object-group.h
+++ b/src/sp-object-group.h
@@ -1,11 +1,12 @@
-#ifndef __SP_OBJECTGROUP_H__
-#define __SP_OBJECTGROUP_H__
+#ifndef SEEN_SP_OBJECTGROUP_H
+#define SEEN_SP_OBJECTGROUP_H
/*
* Abstract base class for non-item groups
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2003 Authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -15,19 +16,46 @@
#include "sp-object.h"
-#define SP_TYPE_OBJECTGROUP (sp_objectgroup_get_type ())
+#define SP_TYPE_OBJECTGROUP (SPObjectGroup::sp_objectgroup_get_type ())
#define SP_OBJECTGROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_OBJECTGROUP, SPObjectGroup))
#define SP_OBJECTGROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_OBJECTGROUP, SPObjectGroupClass))
#define SP_IS_OBJECTGROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_OBJECTGROUP))
#define SP_IS_OBJECTGROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_OBJECTGROUP))
-struct SPObjectGroup : public SPObject {
-};
+class SPObjectGroup : public SPObject {
+public:
+ static GType sp_objectgroup_get_type(void);
+
+private:
+ static void init(SPObjectGroup *objectgroup);
-struct SPObjectGroupClass {
- SPObjectClass parent_class;
+ static void childAdded(SPObject * object, Inkscape::XML::Node * child, Inkscape::XML::Node * ref);
+ static void removeChild(SPObject * object, Inkscape::XML::Node * child);
+ static void orderChanged(SPObject * object, Inkscape::XML::Node * child, Inkscape::XML::Node * old_ref, Inkscape::XML::Node * new_ref);
+ static Inkscape::XML::Node *write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+
+ friend class SPObjectGroupClass;
};
-GType sp_objectgroup_get_type (void);
+class SPObjectGroupClass {
+public:
+ SPObjectClass parent_class;
+
+private:
+ static void sp_objectgroup_class_init(SPObjectGroupClass *klass);
+ static SPObjectClass *static_parent_class;
-#endif
+ friend class SPObjectGroup;
+};
+
+#endif // SEEN_SP_OBJECTGROUP_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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/sp-object-repr.cpp b/src/sp-object-repr.cpp
index 6f3398918..18f71ee53 100644
--- a/src/sp-object-repr.cpp
+++ b/src/sp-object-repr.cpp
@@ -1,10 +1,9 @@
-#define __SP_OBJECT_REPR_C__
-
/*
* Object type dictionary and build frontend
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2003 Lauris Kaplinski
*
@@ -107,7 +106,7 @@ sp_object_repr_build_tree(SPDocument *document, Inkscape::XML::Node *repr)
g_assert(newobj != NULL);
SPObject *const object = SP_OBJECT(newobj);
g_assert(object != NULL);
- sp_object_invoke_build(object, document, repr, FALSE);
+ object->invoke_build(document, repr, FALSE);
return object;
}
diff --git a/src/sp-object-repr.h b/src/sp-object-repr.h
index 4e85acf53..02ad3ea93 100644
--- a/src/sp-object-repr.h
+++ b/src/sp-object-repr.h
@@ -1,5 +1,5 @@
-#ifndef __SP_OBJECT_REPR_H__
-#define __SP_OBJECT_REPR_H__
+#ifndef SEEN_SP_OBJECT_REPR_H
+#define SEEN_SP_OBJECT_REPR_H
/*
* Object type dictionary and build frontend
@@ -13,7 +13,7 @@
*/
#include "forward.h"
-
+#include "sp-object.h"
namespace Inkscape {
namespace XML {
class Node;
@@ -21,13 +21,13 @@ class Node;
}
-SPObject *sp_object_repr_build_tree (SPDocument *document, Inkscape::XML::Node *repr);
+SPObject * sp_object_repr_build_tree (SPDocument *document, Inkscape::XML::Node *repr);
GType sp_repr_type_lookup (Inkscape::XML::Node *repr);
void sp_object_type_register(gchar const *name, GType type);
-#endif
+#endif // SEEN_SP_OBJECT_REPR_H
/*
Local Variables:
diff --git a/src/sp-object.cpp b/src/sp-object.cpp
index 7fe099699..17def7f15 100644
--- a/src/sp-object.cpp
+++ b/src/sp-object.cpp
@@ -1,4 +1,3 @@
-#define __SP_OBJECT_C__
/** \file
* SPObject implementation.
*
@@ -6,6 +5,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Stephen Silver <sasilver@users.sourceforge.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2008 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -76,41 +77,14 @@ using std::strstr;
# define debug(f, a...) /**/
#endif
-static void sp_object_class_init(SPObjectClass *klass);
-static void sp_object_init(SPObject *object);
-static void sp_object_finalize(GObject *object);
-
-static void sp_object_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref);
-static void sp_object_remove_child(SPObject *object, Inkscape::XML::Node *child);
-static void sp_object_order_changed(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref);
-
-static void sp_object_release(SPObject *object);
-static void sp_object_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-
-static void sp_object_private_set(SPObject *object, unsigned int key, gchar const *value);
-static Inkscape::XML::Node *sp_object_private_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-/* Real handlers of repr signals */
-
-static void sp_object_repr_attr_changed(Inkscape::XML::Node *repr, gchar const *key, gchar const *oldval, gchar const *newval, bool is_interactive, gpointer data);
-
-static void sp_object_repr_content_changed(Inkscape::XML::Node *repr, gchar const *oldcontent, gchar const *newcontent, gpointer data);
-
-static void sp_object_repr_child_added(Inkscape::XML::Node *repr, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, gpointer data);
-static void sp_object_repr_child_removed(Inkscape::XML::Node *repr, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, void *data);
-
-static void sp_object_repr_order_changed(Inkscape::XML::Node *repr, Inkscape::XML::Node *child, Inkscape::XML::Node *old, Inkscape::XML::Node *newer, gpointer data);
-
-static gchar *sp_object_get_unique_id(SPObject *object, gchar const *defid);
-
guint update_in_progress = 0; // guard against update-during-update
Inkscape::XML::NodeEventVector object_event_vector = {
- sp_object_repr_child_added,
- sp_object_repr_child_removed,
- sp_object_repr_attr_changed,
- sp_object_repr_content_changed,
- sp_object_repr_order_changed
+ SPObject::sp_object_repr_child_added,
+ SPObject::sp_object_repr_child_removed,
+ SPObject::sp_object_repr_attr_changed,
+ SPObject::sp_object_repr_content_changed,
+ SPObject::sp_object_repr_order_changed
};
// A friend class used to set internal members on SPObject so as to not expose settors in SPObject's public API
@@ -144,20 +118,19 @@ public:
};
-static GObjectClass *parent_class;
+GObjectClass * SPObjectClass::static_parent_class = 0;
/**
* Registers the SPObject class with Gdk and returns its type number.
*/
-GType
-sp_object_get_type(void)
+GType SPObject::sp_object_get_type()
{
static GType type = 0;
if (!type) {
GTypeInfo info = {
sizeof(SPObjectClass),
NULL, NULL,
- (GClassInitFunc) sp_object_class_init,
+ (GClassInitFunc) SPObjectClass::sp_object_class_init,
NULL, NULL,
sizeof(SPObject),
16,
@@ -172,34 +145,32 @@ sp_object_get_type(void)
/**
* Initializes the SPObject vtable.
*/
-static void
-sp_object_class_init(SPObjectClass *klass)
+void SPObjectClass::sp_object_class_init(SPObjectClass *klass)
{
GObjectClass *object_class;
object_class = (GObjectClass *) klass;
- parent_class = (GObjectClass *) g_type_class_ref(G_TYPE_OBJECT);
+ static_parent_class = (GObjectClass *) g_type_class_ref(G_TYPE_OBJECT);
- object_class->finalize = sp_object_finalize;
+ object_class->finalize = SPObject::sp_object_finalize;
- klass->child_added = sp_object_child_added;
- klass->remove_child = sp_object_remove_child;
- klass->order_changed = sp_object_order_changed;
+ klass->child_added = SPObject::sp_object_child_added;
+ klass->remove_child = SPObject::sp_object_remove_child;
+ klass->order_changed = SPObject::sp_object_order_changed;
- klass->release = sp_object_release;
+ klass->release = SPObject::sp_object_release;
- klass->build = sp_object_build;
+ klass->build = SPObject::sp_object_build;
- klass->set = sp_object_private_set;
- klass->write = sp_object_private_write;
+ klass->set = SPObject::sp_object_private_set;
+ klass->write = SPObject::sp_object_private_write;
}
/**
* Callback to initialize the SPObject object.
*/
-static void
-sp_object_init(SPObject *object)
+void SPObject::sp_object_init(SPObject *object)
{
debug("id=%x, typename=%s",object, g_type_name_from_instance((GTypeInstance*)object));
@@ -208,7 +179,10 @@ sp_object_init(SPObject *object)
object->document = NULL;
object->children = object->_last_child = NULL;
object->parent = object->next = NULL;
- object->repr = NULL;
+
+ //used XML Tree here.
+ Inkscape::XML::Node *repr = object->getRepr();
+ repr = NULL;
SPObjectImpl::setIdNull(object);
object->_collection_policy = SPObject::COLLECT_WITH_PARENT;
@@ -232,8 +206,7 @@ sp_object_init(SPObject *object)
/**
* Callback to destroy all members and connections of object and itself.
*/
-static void
-sp_object_finalize(GObject *object)
+void SPObject::sp_object_finalize(GObject *object)
{
SPObject *spobject = (SPObject *)object;
@@ -247,8 +220,8 @@ sp_object_finalize(GObject *object)
spobject->_successor = NULL;
}
- if (((GObjectClass *) (parent_class))->finalize) {
- (* ((GObjectClass *) (parent_class))->finalize)(object);
+ if (((GObjectClass *) (SPObjectClass::static_parent_class))->finalize) {
+ (* ((GObjectClass *) (SPObjectClass::static_parent_class))->finalize)(object);
}
spobject->_release_signal.~signal();
@@ -295,6 +268,15 @@ gchar const* SPObject::getId() const {
return id;
}
+Inkscape::XML::Node * SPObject::getRepr() {
+ return repr;
+}
+
+Inkscape::XML::Node const* SPObject::getRepr() const{
+ return repr;
+}
+
+
/**
* Increase reference count of object, with possible debugging.
*
@@ -302,8 +284,7 @@ gchar const* SPObject::getId() const {
* \return object, NULL is error.
* \pre object points to real object
*/
-SPObject *
-sp_object_ref(SPObject *object, SPObject *owner)
+SPObject *sp_object_ref(SPObject *object, SPObject *owner)
{
g_return_val_if_fail(object != NULL, NULL);
g_return_val_if_fail(SP_IS_OBJECT(object), NULL);
@@ -322,8 +303,7 @@ sp_object_ref(SPObject *object, SPObject *owner)
* \return always NULL
* \pre object points to real object
*/
-SPObject *
-sp_object_unref(SPObject *object, SPObject *owner)
+SPObject *sp_object_unref(SPObject *object, SPObject *owner)
{
g_return_val_if_fail(object != NULL, NULL);
g_return_val_if_fail(SP_IS_OBJECT(object), NULL);
@@ -344,8 +324,7 @@ sp_object_unref(SPObject *object, SPObject *owner)
* \return object, NULL is error
* \pre object points to real object
*/
-SPObject *
-sp_object_href(SPObject *object, gpointer /*owner*/)
+SPObject *sp_object_href(SPObject *object, gpointer /*owner*/)
{
g_return_val_if_fail(object != NULL, NULL);
g_return_val_if_fail(SP_IS_OBJECT(object), NULL);
@@ -365,8 +344,7 @@ sp_object_href(SPObject *object, gpointer /*owner*/)
* \return always NULL
* \pre object points to real object and hrefcount>0
*/
-SPObject *
-sp_object_hunref(SPObject *object, gpointer /*owner*/)
+SPObject *sp_object_hunref(SPObject *object, gpointer /*owner*/)
{
g_return_val_if_fail(object != NULL, NULL);
g_return_val_if_fail(SP_IS_OBJECT(object), NULL);
@@ -381,10 +359,9 @@ sp_object_hunref(SPObject *object, gpointer /*owner*/)
/**
* Adds increment to _total_hrefcount of object and its parents.
*/
-void
-SPObject::_updateTotalHRefCount(int increment) {
+void SPObject::_updateTotalHRefCount(int increment) {
SPObject *topmost_collectable = NULL;
- for ( SPObject *iter = this ; iter ; iter = SP_OBJECT_PARENT(iter) ) {
+ for ( SPObject *iter = this ; iter ; iter = iter->parent ) {
iter->_total_hrefcount += increment;
if ( iter->_total_hrefcount < iter->hrefcount ) {
g_critical("HRefs overcounted");
@@ -403,15 +380,14 @@ SPObject::_updateTotalHRefCount(int increment) {
/**
* True if object is non-NULL and this is some in/direct parent of object.
*/
-bool
-SPObject::isAncestorOf(SPObject const *object) const {
+bool SPObject::isAncestorOf(SPObject const *object) const {
g_return_val_if_fail(object != NULL, false);
- object = SP_OBJECT_PARENT(object);
+ object = object->parent;
while (object) {
if ( object == this ) {
return true;
}
- object = SP_OBJECT_PARENT(object);
+ object = object->parent;
}
return false;
}
@@ -427,8 +403,7 @@ bool same_objects(SPObject const &a, SPObject const &b) {
/**
* Returns youngest object being parent to this and object.
*/
-SPObject const *
-SPObject::nearestCommonAncestor(SPObject const *object) const {
+SPObject const *SPObject::nearestCommonAncestor(SPObject const *object) const {
g_return_val_if_fail(object != NULL, NULL);
using Inkscape::Algorithms::longest_common_suffix;
@@ -436,11 +411,15 @@ SPObject::nearestCommonAncestor(SPObject const *object) const {
}
SPObject const *AncestorSon(SPObject const *obj, SPObject const *ancestor) {
- if (obj == NULL || ancestor == NULL)
- return NULL;
- if (SP_OBJECT_PARENT(obj) == ancestor)
- return obj;
- return AncestorSon(SP_OBJECT_PARENT(obj), ancestor);
+ SPObject const *result = 0;
+ if ( obj && ancestor ) {
+ if (obj->parent == ancestor) {
+ result = obj;
+ } else {
+ result = AncestorSon(obj->parent, ancestor);
+ }
+ }
+ return result;
}
/**
@@ -452,26 +431,29 @@ SPObject const *AncestorSon(SPObject const *obj, SPObject const *ancestor) {
* 1 first object's position is greater than the second
* -1 first object's position is less than the second \endverbatim
*/
-int
-sp_object_compare_position(SPObject const *first, SPObject const *second)
+int sp_object_compare_position(SPObject const *first, SPObject const *second)
{
- if (first == second) return 0;
-
- SPObject const *ancestor = first->nearestCommonAncestor(second);
- if (ancestor == NULL) return 0; // cannot compare, no common ancestor!
-
- // we have an object and its ancestor (should not happen when sorting selection)
- if (ancestor == first)
- return 1;
- if (ancestor == second)
- return -1;
-
- SPObject const *to_first = AncestorSon(first, ancestor);
- SPObject const *to_second = AncestorSon(second, ancestor);
+ int result = 0;
+ if (first != second) {
+ SPObject const *ancestor = first->nearestCommonAncestor(second);
+ // Need a common ancestor to be able to compare
+ if ( ancestor ) {
+ // we have an object and its ancestor (should not happen when sorting selection)
+ if (ancestor == first) {
+ result = 1;
+ } else if (ancestor == second) {
+ result = -1;
+ } else {
+ SPObject const *to_first = AncestorSon(first, ancestor);
+ SPObject const *to_second = AncestorSon(second, ancestor);
- g_assert(SP_OBJECT_PARENT(to_second) == SP_OBJECT_PARENT(to_first));
+ g_assert(to_second->parent == to_first->parent);
- return sp_repr_compare_position(SP_OBJECT_REPR(to_first), SP_OBJECT_REPR(to_second));
+ result = sp_repr_compare_position(to_first->getRepr(), to_second->getRepr());
+ }
+ }
+ }
+ return result;
}
@@ -479,26 +461,34 @@ sp_object_compare_position(SPObject const *first, SPObject const *second)
* Append repr as child of this object.
* \pre this is not a cloned object
*/
-SPObject *
-SPObject::appendChildRepr(Inkscape::XML::Node *repr) {
- if (!SP_OBJECT_IS_CLONED(this)) {
- SP_OBJECT_REPR(this)->appendChild(repr);
- return SP_OBJECT_DOCUMENT(this)->getObjectByRepr(repr);
+SPObject *SPObject::appendChildRepr(Inkscape::XML::Node *repr) {
+ if ( !cloned ) {
+ getRepr()->appendChild(repr);
+ return document->getObjectByRepr(repr);
} else {
g_critical("Attempt to append repr as child of cloned object");
return NULL;
}
}
-/**
- * Retrieves the children as a GSList object, optionally ref'ing the children
- * in the process, if add_ref is specified.
- */
+void SPObject::setCSS(SPCSSAttr *css, gchar const *attr)
+{
+ g_assert(this->getRepr() != NULL);
+ sp_repr_css_set(this->getRepr(), css, attr);
+}
+
+void SPObject::changeCSS(SPCSSAttr *css, gchar const *attr)
+{
+ g_assert(this->getRepr() != NULL);
+ sp_repr_css_change(this->getRepr(), css, attr);
+}
+
GSList *SPObject::childList(bool add_ref, Action) {
GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(this) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
- if (add_ref)
+ for ( SPObject *child = firstChild() ; child; child = child->getNext() ) {
+ if (add_ref) {
g_object_ref (G_OBJECT (child));
+ }
l = g_slist_prepend (l, child);
}
@@ -509,23 +499,20 @@ GSList *SPObject::childList(bool add_ref, Action) {
/** Gets the label property for the object or a default if no label
* is defined.
*/
-gchar const *
-SPObject::label() const {
+gchar const *SPObject::label() const {
return _label;
}
/** Returns a default label property for the object. */
-gchar const *
-SPObject::defaultLabel() const {
+gchar const *SPObject::defaultLabel() const {
if (_label) {
return _label;
} else {
if (!_default_label) {
- gchar const *id=SP_OBJECT_ID(this);
- if (id) {
- _default_label = g_strdup_printf("#%s", id);
+ if (getId()) {
+ _default_label = g_strdup_printf("#%s", getId());
} else {
- _default_label = g_strdup_printf("<%s>", SP_OBJECT_REPR(this)->name());
+ _default_label = g_strdup_printf("<%s>", getRepr()->name());
}
}
return _default_label;
@@ -533,9 +520,8 @@ SPObject::defaultLabel() const {
}
/** Sets the label property for the object */
-void
-SPObject::setLabel(gchar const *label) {
- SP_OBJECT_REPR(this)->setAttribute("inkscape:label", label, false);
+void SPObject::setLabel(gchar const *label) {
+ getRepr()->setAttribute("inkscape:label", label, false);
}
@@ -569,10 +555,8 @@ void SPObject::requestOrphanCollection() {
}
}
-/** Sends the delete signal to all children of this object recursively */
-void
-SPObject::_sendDeleteSignalRecursive() {
- for (SPObject *child = sp_object_first_child(this); child; child = SP_OBJECT_NEXT(child)) {
+void SPObject::_sendDeleteSignalRecursive() {
+ for (SPObject *child = firstChild(); child; child = child->getNext()) {
child->_delete_signal.emit(child);
child->_sendDeleteSignalRecursive();
}
@@ -585,8 +569,7 @@ SPObject::_sendDeleteSignalRecursive() {
* signal. If the \a propagate_descendants parameter is true, it
* recursively sends the delete signal to children.
*/
-void
-SPObject::deleteObject(bool propagate, bool propagate_descendants)
+void SPObject::deleteObject(bool propagate, bool propagate_descendants)
{
sp_object_ref(this, NULL);
if (propagate) {
@@ -596,7 +579,7 @@ SPObject::deleteObject(bool propagate, bool propagate_descendants)
this->_sendDeleteSignalRecursive();
}
- Inkscape::XML::Node *repr=SP_OBJECT_REPR(this);
+ Inkscape::XML::Node *repr = getRepr();
if (repr && sp_repr_parent(repr)) {
sp_repr_unparent(repr);
}
@@ -611,59 +594,57 @@ SPObject::deleteObject(bool propagate, bool propagate_descendants)
* Put object into object tree, under parent, and behind prev;
* also update object's XML space.
*/
-void
-sp_object_attach(SPObject *parent, SPObject *object, SPObject *prev)
+void SPObject::attach(SPObject *object, SPObject *prev)
{
- g_return_if_fail(parent != NULL);
- g_return_if_fail(SP_IS_OBJECT(parent));
+ //g_return_if_fail(parent != NULL);
+ //g_return_if_fail(SP_IS_OBJECT(parent));
g_return_if_fail(object != NULL);
g_return_if_fail(SP_IS_OBJECT(object));
g_return_if_fail(!prev || SP_IS_OBJECT(prev));
- g_return_if_fail(!prev || prev->parent == parent);
+ g_return_if_fail(!prev || prev->parent == this);
g_return_if_fail(!object->parent);
- sp_object_ref(object, parent);
- object->parent = parent;
- parent->_updateTotalHRefCount(object->_total_hrefcount);
+ sp_object_ref(object, this);
+ object->parent = this;
+ this->_updateTotalHRefCount(object->_total_hrefcount);
SPObject *next;
if (prev) {
next = prev->next;
prev->next = object;
} else {
- next = parent->children;
- parent->children = object;
+ next = this->children;
+ this->children = object;
}
object->next = next;
if (!next) {
- parent->_last_child = object;
+ this->_last_child = object;
}
if (!object->xml_space.set)
- object->xml_space.value = parent->xml_space.value;
+ object->xml_space.value = this->xml_space.value;
}
/**
* In list of object's siblings, move object behind prev.
*/
-void
-sp_object_reorder(SPObject *object, SPObject *prev) {
- g_return_if_fail(object != NULL);
- g_return_if_fail(SP_IS_OBJECT(object));
- g_return_if_fail(object->parent != NULL);
- g_return_if_fail(object != prev);
+void SPObject::reorder(SPObject *prev) {
+ //g_return_if_fail(object != NULL);
+ //g_return_if_fail(SP_IS_OBJECT(object));
+ g_return_if_fail(this->parent != NULL);
+ g_return_if_fail(this != prev);
g_return_if_fail(!prev || SP_IS_OBJECT(prev));
- g_return_if_fail(!prev || prev->parent == object->parent);
+ g_return_if_fail(!prev || prev->parent == this->parent);
- SPObject *const parent=object->parent;
+ SPObject *const parent=this->parent;
SPObject *old_prev=NULL;
- for ( SPObject *child = parent->children ; child && child != object ;
+ for ( SPObject *child = parent->children ; child && child != this ;
child = child->next )
{
old_prev = child;
}
- SPObject *next=object->next;
+ SPObject *next=this->next;
if (old_prev) {
old_prev->next = next;
} else {
@@ -674,32 +655,31 @@ sp_object_reorder(SPObject *object, SPObject *prev) {
}
if (prev) {
next = prev->next;
- prev->next = object;
+ prev->next = this;
} else {
next = parent->children;
- parent->children = object;
+ parent->children = this;
}
- object->next = next;
+ this->next = next;
if (!next) {
- parent->_last_child = object;
+ parent->_last_child = this;
}
}
/**
* Remove object from parent's children, release and unref it.
*/
-void
-sp_object_detach(SPObject *parent, SPObject *object) {
- g_return_if_fail(parent != NULL);
- g_return_if_fail(SP_IS_OBJECT(parent));
+void SPObject::detach(SPObject *object) {
+ //g_return_if_fail(parent != NULL);
+ //g_return_if_fail(SP_IS_OBJECT(parent));
g_return_if_fail(object != NULL);
g_return_if_fail(SP_IS_OBJECT(object));
- g_return_if_fail(object->parent == parent);
+ g_return_if_fail(object->parent == this);
object->releaseReferences();
SPObject *prev=NULL;
- for ( SPObject *child = parent->children ; child && child != object ;
+ for ( SPObject *child = this->children ; child && child != object ;
child = child->next )
{
prev = child;
@@ -709,57 +689,56 @@ sp_object_detach(SPObject *parent, SPObject *object) {
if (prev) {
prev->next = next;
} else {
- parent->children = next;
+ this->children = next;
}
if (!next) {
- parent->_last_child = prev;
+ this->_last_child = prev;
}
object->next = NULL;
object->parent = NULL;
- parent->_updateTotalHRefCount(-object->_total_hrefcount);
- sp_object_unref(object, parent);
+ this->_updateTotalHRefCount(-object->_total_hrefcount);
+ sp_object_unref(object, this);
}
/**
* Return object's child whose node pointer equals repr.
*/
-SPObject *
-sp_object_get_child_by_repr(SPObject *object, Inkscape::XML::Node *repr)
+SPObject *SPObject::get_child_by_repr(Inkscape::XML::Node *repr)
{
- g_return_val_if_fail(object != NULL, NULL);
- g_return_val_if_fail(SP_IS_OBJECT(object), NULL);
g_return_val_if_fail(repr != NULL, NULL);
+ SPObject *result = 0;
- if (object->_last_child && SP_OBJECT_REPR(object->_last_child) == repr)
- return object->_last_child; // optimization for common scenario
- for ( SPObject *child = object->children ; child ; child = child->next ) {
- if ( SP_OBJECT_REPR(child) == repr ) {
- return child;
+ if ( _last_child && (_last_child->getRepr() == repr) ) {
+ result = _last_child; // optimization for common scenario
+ } else {
+ for ( SPObject *child = children ; child ; child = child->next ) {
+ if ( child->getRepr() == repr ) {
+ result = child;
+ break;
+ }
}
}
-
- return NULL;
+ return result;
}
/**
* Callback for child_added event.
* Invoked whenever the given mutation event happens in the XML tree.
*/
-static void
-sp_object_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
+void SPObject::sp_object_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
{
GType type = sp_repr_type_lookup(child);
if (!type) {
return;
}
SPObject *ochild = SP_OBJECT(g_object_new(type, 0));
- SPObject *prev = ref ? sp_object_get_child_by_repr(object, ref) : NULL;
- sp_object_attach(object, ochild, prev);
+ SPObject *prev = ref ? object->get_child_by_repr(ref) : NULL;
+ object->attach(ochild, prev);
sp_object_unref(ochild, NULL);
- sp_object_invoke_build(ochild, object->document, child, SP_OBJECT_IS_CLONED(object));
+ ochild->invoke_build(object->document, child, object->cloned);
}
/**
@@ -773,11 +752,11 @@ sp_object_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XM
* SPRoot destroys the whole document tree.
* \see sp_object_build()
*/
-static void sp_object_release(SPObject *object)
+void SPObject::sp_object_release(SPObject *object)
{
debug("id=%x, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object));
while (object->children) {
- sp_object_detach(object, object->children);
+ object->detach(object->children);
}
}
@@ -789,14 +768,14 @@ static void sp_object_release(SPObject *object)
* tree, BEFORE removal from the XML tree happens, so grouping
* objects can safely release the child data.
*/
-static void
-sp_object_remove_child(SPObject *object, Inkscape::XML::Node *child)
+void SPObject::sp_object_remove_child(SPObject *object, Inkscape::XML::Node *child)
{
debug("id=%x, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object));
- SPObject *ochild = sp_object_get_child_by_repr(object, child);
+ SPObject *ochild = object->get_child_by_repr(child);
g_return_if_fail (ochild != NULL || !strcmp("comment", child->name())); // comments have no objects
- if (ochild)
- sp_object_detach(object, ochild);
+ if (ochild) {
+ object->detach(ochild);
+ }
}
/**
@@ -805,13 +784,13 @@ sp_object_remove_child(SPObject *object, Inkscape::XML::Node *child)
* Invoked whenever the given mutation event happens in the XML tree.
* \param old_ref Ignored
*/
-static void sp_object_order_changed(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node */*old_ref*/,
+void SPObject::sp_object_order_changed(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node */*old_ref*/,
Inkscape::XML::Node *new_ref)
{
- SPObject *ochild = sp_object_get_child_by_repr(object, child);
+ SPObject *ochild = object->get_child_by_repr(child);
g_return_if_fail(ochild != NULL);
- SPObject *prev = new_ref ? sp_object_get_child_by_repr(object, new_ref) : NULL;
- sp_object_reorder(ochild, prev);
+ SPObject *prev = new_ref ? object->get_child_by_repr(new_ref) : NULL;
+ ochild->reorder(prev);
ochild->_position_changed_signal.emit(ochild);
}
@@ -826,15 +805,14 @@ static void sp_object_order_changed(SPObject *object, Inkscape::XML::Node *child
* SPDocument does after the creation of the XML tree).
* \see sp_object_release()
*/
-static void
-sp_object_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+void SPObject::sp_object_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
/* Nothing specific here */
debug("id=%x, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object));
- sp_object_read_attr(object, "xml:space");
- sp_object_read_attr(object, "inkscape:label");
- sp_object_read_attr(object, "inkscape:collect");
+ object->readAttr("xml:space");
+ object->readAttr("inkscape:label");
+ object->readAttr("inkscape:collect");
for (Inkscape::XML::Node *rchild = repr->firstChild() ; rchild != NULL; rchild = rchild->next()) {
GType type = sp_repr_type_lookup(rchild);
@@ -842,73 +820,98 @@ sp_object_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
continue;
}
SPObject *child = SP_OBJECT(g_object_new(type, 0));
- sp_object_attach(object, child, object->lastChild());
+ object->attach(child, object->lastChild());
sp_object_unref(child, NULL);
- sp_object_invoke_build(child, document, rchild, SP_OBJECT_IS_CLONED(object));
+ child->invoke_build(document, rchild, object->cloned);
}
}
-void sp_object_invoke_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr, unsigned int cloned)
+void SPObject::invoke_build(SPDocument *document, Inkscape::XML::Node *repr, unsigned int cloned)
{
- debug("id=%x, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object));
+ debug("id=%x, typename=%s", this, g_type_name_from_instance((GTypeInstance*)this));
- g_assert(object != NULL);
- g_assert(SP_IS_OBJECT(object));
+ //g_assert(object != NULL);
+ //g_assert(SP_IS_OBJECT(object));
g_assert(document != NULL);
g_assert(repr != NULL);
- g_assert(object->document == NULL);
- g_assert(object->repr == NULL);
- g_assert(object->getId() == NULL);
+ g_assert(this->document == NULL);
+ g_assert(this->repr == NULL);
+ g_assert(this->getId() == NULL);
/* Bookkeeping */
- object->document = document;
- object->repr = repr;
- if (!cloned)
+ this->document = document;
+ this->repr = repr;
+ if (!cloned) {
Inkscape::GC::anchor(repr);
- object->cloned = cloned;
+ }
+ this->cloned = cloned;
- if (!SP_OBJECT_IS_CLONED(object)) {
- object->document->bindObjectToRepr(object->repr, object);
+ if ( !cloned ) {
+ this->document->bindObjectToRepr(this->repr, this);
- if (Inkscape::XML::id_permitted(object->repr)) {
+ if (Inkscape::XML::id_permitted(this->repr)) {
/* If we are not cloned, and not seeking, force unique id */
- gchar const *id = object->repr->attribute("id");
+ gchar const *id = this->repr->attribute("id");
if (!document->isSeeking()) {
{
- gchar *realid = sp_object_get_unique_id(object, id);
+ gchar *realid = sp_object_get_unique_id(this, id);
g_assert(realid != NULL);
- object->document->bindObjectToId(realid, object);
- SPObjectImpl::setId(object, realid);
+ this->document->bindObjectToId(realid, this);
+ SPObjectImpl::setId(this, realid);
g_free(realid);
}
/* Redefine ID, if required */
- if ((id == NULL) || (strcmp(id, object->getId()) != 0)) {
- object->repr->setAttribute("id", object->getId());
+ if ((id == NULL) || (strcmp(id, this->getId()) != 0)) {
+ this->repr->setAttribute("id", this->getId());
}
} else if (id) {
// bind if id, but no conflict -- otherwise, we can expect
// a subsequent setting of the id attribute
- if (!object->document->getObjectById(id)) {
- object->document->bindObjectToId(id, object);
- SPObjectImpl::setId(object, id);
+ if (!this->document->getObjectById(id)) {
+ this->document->bindObjectToId(id, this);
+ SPObjectImpl::setId(this, id);
}
}
}
} else {
- g_assert(object->getId() == NULL);
+ g_assert(this->getId() == NULL);
}
/* Invoke derived methods, if any */
- if (((SPObjectClass *) G_OBJECT_GET_CLASS(object))->build) {
- (*((SPObjectClass *) G_OBJECT_GET_CLASS(object))->build)(object, document, repr);
+ if (((SPObjectClass *) G_OBJECT_GET_CLASS(this))->build) {
+ (*((SPObjectClass *) G_OBJECT_GET_CLASS(this))->build)(this, document, repr);
}
/* Signalling (should be connected AFTER processing derived methods */
- sp_repr_add_listener(repr, &object_event_vector, object);
+ sp_repr_add_listener(repr, &object_event_vector, this);
+}
+
+long long int SPObject::getIntAttribute(char const *key, long long int def)
+{
+ return sp_repr_get_int_attribute(getRepr(),key,def);
+}
+
+unsigned SPObject::getPosition(){
+ g_assert(this->repr);
+
+ return repr->position();
+}
+
+void SPObject::appendChild(Inkscape::XML::Node *child) {
+ g_assert(this->repr);
+
+ repr->appendChild(child);
+}
+
+void SPObject::addChild(Inkscape::XML::Node *child, Inkscape::XML::Node * prev)
+{
+ g_assert(this->repr);
+
+ repr->addChild(child,prev);
}
void SPObject::releaseReferences() {
@@ -926,7 +929,7 @@ void SPObject::releaseReferences() {
/* all hrefs should be released by the "release" handlers */
g_assert(this->hrefcount == 0);
- if (!SP_OBJECT_IS_CLONED(this)) {
+ if (!cloned) {
if (this->id) {
this->document->bindObjectToId(this->id, NULL);
}
@@ -952,33 +955,33 @@ void SPObject::releaseReferences() {
}
-SPObject *SPObject::getNext()
-{
- return next;
-}
-
SPObject *SPObject::getPrev()
{
- return sp_object_prev(this);
+ SPObject *prev = 0;
+ for ( SPObject *obj = parent->firstChild(); obj && !prev; obj = obj->getNext() ) {
+ if (obj->getNext() == this) {
+ prev = obj;
+ }
+ }
+ return prev;
}
/**
* Callback for child_added node event.
*/
-static void
-sp_object_repr_child_added(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, gpointer data)
+void SPObject::sp_object_repr_child_added(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, gpointer data)
{
SPObject *object = SP_OBJECT(data);
- if (((SPObjectClass *) G_OBJECT_GET_CLASS(object))->child_added)
+ if (((SPObjectClass *) G_OBJECT_GET_CLASS(object))->child_added) {
(*((SPObjectClass *)G_OBJECT_GET_CLASS(object))->child_added)(object, child, ref);
+ }
}
/**
* Callback for remove_child node event.
*/
-static void
-sp_object_repr_child_removed(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node *child, Inkscape::XML::Node */*ref*/, gpointer data)
+void SPObject::sp_object_repr_child_removed(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node *child, Inkscape::XML::Node */*ref*/, gpointer data)
{
SPObject *object = SP_OBJECT(data);
@@ -992,8 +995,7 @@ sp_object_repr_child_removed(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node
*
* \todo fixme:
*/
-static void
-sp_object_repr_order_changed(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node *child, Inkscape::XML::Node *old, Inkscape::XML::Node *newer, gpointer data)
+void SPObject::sp_object_repr_order_changed(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node *child, Inkscape::XML::Node *old, Inkscape::XML::Node *newer, gpointer data)
{
SPObject *object = SP_OBJECT(data);
@@ -1005,14 +1007,15 @@ sp_object_repr_order_changed(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node
/**
* Callback for set event.
*/
-static void
-sp_object_private_set(SPObject *object, unsigned int key, gchar const *value)
+void SPObject::sp_object_private_set(SPObject *object, unsigned int key, gchar const *value)
{
g_assert(key != SP_ATTR_INVALID);
switch (key) {
case SP_ATTR_ID:
- if ( !SP_OBJECT_IS_CLONED(object) && object->repr->type() == Inkscape::XML::ELEMENT_NODE ) {
+
+ //XML Tree being used here.
+ if ( !object->cloned && object->getRepr()->type() == Inkscape::XML::ELEMENT_NODE ) {
SPDocument *document=object->document;
SPObject *conflict=NULL;
@@ -1027,7 +1030,7 @@ sp_object_private_set(SPObject *object, unsigned int key, gchar const *value)
sp_object_ref(conflict, NULL);
// give the conflicting object a new ID
gchar *new_conflict_id = sp_object_get_unique_id(conflict, NULL);
- SP_OBJECT_REPR(conflict)->setAttribute("id", new_conflict_id);
+ conflict->getRepr()->setAttribute("id", new_conflict_id);
g_free(new_conflict_id);
sp_object_unref(conflict, NULL);
} else {
@@ -1092,47 +1095,45 @@ sp_object_private_set(SPObject *object, unsigned int key, gchar const *value)
/**
* Call virtual set() function of object.
*/
-void
-sp_object_set(SPObject *object, unsigned int key, gchar const *value)
+void SPObject::setKeyValue(unsigned int key, gchar const *value)
{
- g_assert(object != NULL);
- g_assert(SP_IS_OBJECT(object));
+ //g_assert(object != NULL);
+ //g_assert(SP_IS_OBJECT(object));
- if (((SPObjectClass *) G_OBJECT_GET_CLASS(object))->set) {
- ((SPObjectClass *) G_OBJECT_GET_CLASS(object))->set(object, key, value);
+ if (((SPObjectClass *) G_OBJECT_GET_CLASS(this))->set) {
+ ((SPObjectClass *) G_OBJECT_GET_CLASS(this))->set(this, key, value);
}
}
/**
* Read value of key attribute from XML node into object.
*/
-void
-sp_object_read_attr(SPObject *object, gchar const *key)
+void SPObject::readAttr(gchar const *key)
{
- g_assert(object != NULL);
- g_assert(SP_IS_OBJECT(object));
+ //g_assert(object != NULL);
+ //g_assert(SP_IS_OBJECT(object));
g_assert(key != NULL);
- g_assert(object->repr != NULL);
+ //XML Tree being used here.
+ g_assert(this->getRepr() != NULL);
unsigned int keyid = sp_attribute_lookup(key);
if (keyid != SP_ATTR_INVALID) {
/* Retrieve the 'key' attribute from the object's XML representation */
- gchar const *value = object->repr->attribute(key);
+ gchar const *value = getRepr()->attribute(key);
- sp_object_set(object, keyid, value);
+ setKeyValue(keyid, value);
}
}
/**
* Callback for attr_changed node event.
*/
-static void
-sp_object_repr_attr_changed(Inkscape::XML::Node */*repr*/, gchar const *key, gchar const */*oldval*/, gchar const */*newval*/, bool is_interactive, gpointer data)
+void SPObject::sp_object_repr_attr_changed(Inkscape::XML::Node */*repr*/, gchar const *key, gchar const */*oldval*/, gchar const */*newval*/, bool is_interactive, gpointer data)
{
SPObject *object = SP_OBJECT(data);
- sp_object_read_attr(object, key);
+ object->readAttr(key);
// manual changes to extension attributes require the normal
// attributes, which depend on them, to be updated immediately
@@ -1144,13 +1145,13 @@ sp_object_repr_attr_changed(Inkscape::XML::Node */*repr*/, gchar const *key, gch
/**
* Callback for content_changed node event.
*/
-static void
-sp_object_repr_content_changed(Inkscape::XML::Node */*repr*/, gchar const */*oldcontent*/, gchar const */*newcontent*/, gpointer data)
+void SPObject::sp_object_repr_content_changed(Inkscape::XML::Node */*repr*/, gchar const */*oldcontent*/, gchar const */*newcontent*/, gpointer data)
{
SPObject *object = SP_OBJECT(data);
- if (((SPObjectClass *) G_OBJECT_GET_CLASS(object))->read_content)
+ if (((SPObjectClass *) G_OBJECT_GET_CLASS(object))->read_content) {
(*((SPObjectClass *) G_OBJECT_GET_CLASS(object))->read_content)(object);
+ }
}
/**
@@ -1172,11 +1173,10 @@ sp_xml_get_space_string(unsigned int space)
/**
* Callback for write event.
*/
-static Inkscape::XML::Node *
-sp_object_private_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+Inkscape::XML::Node * SPObject::sp_object_private_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
{
if (!repr && (flags & SP_OBJECT_WRITE_BUILD)) {
- repr = SP_OBJECT_REPR(object)->duplicate(doc);
+ repr = object->getRepr()->duplicate(doc);
if (!( flags & SP_OBJECT_WRITE_EXT )) {
repr->setAttribute("inkscape:collect", NULL);
}
@@ -1197,7 +1197,7 @@ sp_object_private_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape
repr->setAttribute("inkscape:collect", NULL);
}
- SPStyle const *const obj_style = SP_OBJECT_STYLE(object);
+ SPStyle const *const obj_style = object->style;
if (obj_style) {
gchar *s = sp_style_write_string(obj_style, SP_STYLE_FLAG_IFSET);
repr->setAttribute("style", ( *s ? s : NULL ));
@@ -1236,10 +1236,9 @@ sp_object_private_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape
/**
* Update this object's XML node with flags value.
*/
-Inkscape::XML::Node *
-SPObject::updateRepr(unsigned int flags) {
- if (!SP_OBJECT_IS_CLONED(this)) {
- Inkscape::XML::Node *repr=SP_OBJECT_REPR(this);
+Inkscape::XML::Node * SPObject::updateRepr(unsigned int flags) {
+ if ( !cloned ) {
+ Inkscape::XML::Node *repr = getRepr();
if (repr) {
return updateRepr(repr->document(), repr, flags);
} else {
@@ -1256,28 +1255,27 @@ SPObject::updateRepr(unsigned int flags) {
* reprs in another document (e.g. a temporary document used when
* saving as "Plain SVG"
*/
-Inkscape::XML::Node *
-SPObject::updateRepr(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, unsigned int flags) {
+Inkscape::XML::Node * SPObject::updateRepr(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, unsigned int flags) {
g_assert(doc != NULL);
- if (SP_OBJECT_IS_CLONED(this)) {
+ if (cloned) {
/* cloned objects have no repr */
return NULL;
}
if (((SPObjectClass *) G_OBJECT_GET_CLASS(this))->write) {
if (!(flags & SP_OBJECT_WRITE_BUILD) && !repr) {
- repr = SP_OBJECT_REPR(this);
+ repr = getRepr();
}
return ((SPObjectClass *) G_OBJECT_GET_CLASS(this))->write(this, doc, repr, flags);
} else {
g_warning("Class %s does not implement ::write", G_OBJECT_TYPE_NAME(this));
if (!repr) {
if (flags & SP_OBJECT_WRITE_BUILD) {
- repr = SP_OBJECT_REPR(this)->duplicate(doc);
+ repr = getRepr()->duplicate(doc);
}
/// \todo FIXME: else probably error (Lauris) */
} else {
- repr->mergeFrom(SP_OBJECT_REPR(this), "id");
+ repr->mergeFrom(getRepr(), "id");
}
return repr;
}
@@ -1290,8 +1288,7 @@ SPObject::updateRepr(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, un
* recursively add CHILD_MODIFIED flag to
* parent and ancestors (as far up as necessary).
*/
-void
-SPObject::requestDisplayUpdate(unsigned int flags)
+void SPObject::requestDisplayUpdate(unsigned int flags)
{
g_return_if_fail( this->document != NULL );
@@ -1313,11 +1310,10 @@ SPObject::requestDisplayUpdate(unsigned int flags)
* don't need to set CHILD_MODIFIED on our ancestors because it's already been done.
*/
if (already_propagated) {
- SPObject *parent = SP_OBJECT_PARENT(this);
if (parent) {
parent->requestDisplayUpdate(SP_OBJECT_CHILD_MODIFIED_FLAG);
} else {
- sp_document_request_modified(SP_OBJECT_DOCUMENT(this));
+ document->requestModified();
}
}
}
@@ -1325,15 +1321,14 @@ SPObject::requestDisplayUpdate(unsigned int flags)
/**
* Update views
*/
-void
-SPObject::updateDisplay(SPCtx *ctx, unsigned int flags)
+void SPObject::updateDisplay(SPCtx *ctx, unsigned int flags)
{
g_return_if_fail(!(flags & ~SP_OBJECT_MODIFIED_CASCADE));
update_in_progress ++;
#ifdef SP_OBJECT_DEBUG_CASCADE
- g_print("Update %s:%s %x %x %x\n", g_type_name_from_instance((GTypeInstance *) this), SP_OBJECT_ID(this), flags, this->uflags, this->mflags);
+ g_print("Update %s:%s %x %x %x\n", g_type_name_from_instance((GTypeInstance *) this), getId(), flags, this->uflags, this->mflags);
#endif
/* Get this flags */
@@ -1357,8 +1352,9 @@ SPObject::updateDisplay(SPCtx *ctx, unsigned int flags)
try
{
- if (((SPObjectClass *) G_OBJECT_GET_CLASS(this))->update)
+ if (((SPObjectClass *) G_OBJECT_GET_CLASS(this))->update) {
((SPObjectClass *) G_OBJECT_GET_CLASS(this))->update(this, ctx, flags);
+ }
}
catch(...)
{
@@ -1378,8 +1374,7 @@ SPObject::updateDisplay(SPCtx *ctx, unsigned int flags)
* request display update, which trickles down and relies on the
* flags set during this pass...
*/
-void
-SPObject::requestModified(unsigned int flags)
+void SPObject::requestModified(unsigned int flags)
{
g_return_if_fail( this->document != NULL );
@@ -1397,11 +1392,10 @@ SPObject::requestModified(unsigned int flags)
* don't need to set CHILD_MODIFIED on our ancestors because it's already been done.
*/
if (already_propagated) {
- SPObject *parent=SP_OBJECT_PARENT(this);
if (parent) {
parent->requestModified(SP_OBJECT_CHILD_MODIFIED_FLAG);
} else {
- sp_document_request_modified(SP_OBJECT_DOCUMENT(this));
+ document->requestModified();
}
}
}
@@ -1412,14 +1406,13 @@ SPObject::requestModified(unsigned int flags)
* later delivery here. Once emitModified() is called, those flags don't
* need to be stored any longer.
*/
-void
-SPObject::emitModified(unsigned int flags)
+void SPObject::emitModified(unsigned int flags)
{
/* only the MODIFIED_CASCADE flag is legal here */
g_return_if_fail(!(flags & ~SP_OBJECT_MODIFIED_CASCADE));
#ifdef SP_OBJECT_DEBUG_CASCADE
- g_print("Modified %s:%s %x %x %x\n", g_type_name_from_instance((GTypeInstance *) this), SP_OBJECT_ID(this), flags, this->uflags, this->mflags);
+ g_print("Modified %s:%s %x %x %x\n", g_type_name_from_instance((GTypeInstance *) this), getId(), flags, this->uflags, this->mflags);
#endif
flags |= this->mflags;
@@ -1437,54 +1430,62 @@ SPObject::emitModified(unsigned int flags)
g_object_unref(G_OBJECT(this));
}
-gchar const *
-sp_object_tagName_get(SPObject const *object, SPException *ex)
+gchar const *SPObject::getTagName(SPException *ex) const
{
+ g_assert(repr != NULL);
/* If exception is not clear, return */
if (!SP_EXCEPTION_IS_OK(ex)) {
return NULL;
}
/// \todo fixme: Exception if object is NULL? */
- return object->repr->name();
+ //XML Tree being used here.
+ return getRepr()->name();
}
-gchar const *
-sp_object_getAttribute(SPObject const *object, gchar const *key, SPException *ex)
+gchar const *SPObject::getAttribute(gchar const *key, SPException *ex) const
{
+ g_assert(this->repr != NULL);
/* If exception is not clear, return */
if (!SP_EXCEPTION_IS_OK(ex)) {
return NULL;
}
/// \todo fixme: Exception if object is NULL? */
- return (gchar const *) object->repr->attribute(key);
+ //XML Tree being used here.
+ return (gchar const *) getRepr()->attribute(key);
}
-void
-sp_object_setAttribute(SPObject *object, gchar const *key, gchar const *value, SPException *ex)
+void SPObject::setAttribute(gchar const *key, gchar const *value, SPException *ex)
{
+ g_assert(this->repr != NULL);
/* If exception is not clear, return */
g_return_if_fail(SP_EXCEPTION_IS_OK(ex));
/// \todo fixme: Exception if object is NULL? */
- object->repr->setAttribute(key, value, false);
+ //XML Tree being used here.
+ getRepr()->setAttribute(key, value, false);
}
-void
-sp_object_removeAttribute(SPObject *object, gchar const *key, SPException *ex)
+void SPObject::removeAttribute(gchar const *key, SPException *ex)
{
/* If exception is not clear, return */
g_return_if_fail(SP_EXCEPTION_IS_OK(ex));
/// \todo fixme: Exception if object is NULL? */
- object->repr->setAttribute(key, NULL, false);
+ //XML Tree being used here.
+ getRepr()->setAttribute(key, NULL, false);
+}
+
+bool SPObject::storeAsDouble( gchar const *key, double *val ) const
+{
+ g_assert(this->getRepr()!= NULL);
+ return sp_repr_get_double(((Inkscape::XML::Node *)(this->getRepr())),key,val);
}
/* Helper */
-static gchar *
-sp_object_get_unique_id(SPObject *object, gchar const *id)
+gchar * SPObject::sp_object_get_unique_id(SPObject *object, gchar const *id)
{
static unsigned long count = 0;
@@ -1492,7 +1493,8 @@ sp_object_get_unique_id(SPObject *object, gchar const *id)
count++;
- gchar const *name = object->repr->name();
+ //XML Tree being used here.
+ gchar const *name = object->getRepr()->name();
g_assert(name != NULL);
gchar const *local = strchr(name, ':');
@@ -1549,14 +1551,14 @@ sp_object_get_unique_id(SPObject *object, gchar const *id)
* <use> element instead), we should probably make the caller
* responsible for ascending the repr tree as necessary.
*/
-gchar const *
-sp_object_get_style_property(SPObject const *object, gchar const *key, gchar const *def)
+gchar const * SPObject::getStyleProperty(gchar const *key, gchar const *def) const
{
- g_return_val_if_fail(object != NULL, NULL);
- g_return_val_if_fail(SP_IS_OBJECT(object), NULL);
+ //g_return_val_if_fail(object != NULL, NULL);
+ //g_return_val_if_fail(SP_IS_OBJECT(object), NULL);
g_return_val_if_fail(key != NULL, NULL);
- gchar const *style = object->repr->attribute("style");
+ //XML Tree being used here.
+ gchar const *style = getRepr()->attribute("style");
if (style) {
size_t const len = strlen(key);
char const *p;
@@ -1564,9 +1566,15 @@ sp_object_get_style_property(SPObject const *object, gchar const *key, gchar con
!= NULL )
{
p += len;
- while ((*p <= ' ') && *p) p++;
- if (*p++ != ':') break;
- while ((*p <= ' ') && *p) p++;
+ while ((*p <= ' ') && *p) {
+ p++;
+ }
+ if (*p++ != ':') {
+ break;
+ }
+ while ((*p <= ' ') && *p) {
+ p++;
+ }
size_t const inherit_len = sizeof("inherit") - 1;
if (*p
&& !(strneq(p, "inherit", inherit_len)
@@ -1577,12 +1585,14 @@ sp_object_get_style_property(SPObject const *object, gchar const *key, gchar con
}
}
}
- gchar const *val = object->repr->attribute(key);
+
+ //XML Tree being used here.
+ gchar const *val = getRepr()->attribute(key);
if (val && !streq(val, "inherit")) {
return val;
}
- if (object->parent) {
- return sp_object_get_style_property(object->parent, key, def);
+ if (this->parent) {
+ return (this->parent)->getStyleProperty(key, def);
}
return def;
@@ -1591,8 +1601,7 @@ sp_object_get_style_property(SPObject const *object, gchar const *key, gchar con
/**
* Lifts SVG version of all root objects to version.
*/
-void
-SPObject::_requireSVGVersion(Inkscape::Version version) {
+void SPObject::_requireSVGVersion(Inkscape::Version version) {
for ( SPObject::ParentIterator iter=this ; iter ; ++iter ) {
SPObject *object=iter;
if (SP_IS_ROOT(object)) {
@@ -1604,20 +1613,6 @@ SPObject::_requireSVGVersion(Inkscape::Version version) {
}
}
-/**
- * Returns previous object in sibling list or NULL.
- */
-SPObject *
-sp_object_prev(SPObject *child)
-{
- SPObject *parent = SP_OBJECT_PARENT(child);
- for ( SPObject *i = sp_object_first_child(parent); i; i = SP_OBJECT_NEXT(i) ) {
- if (SP_OBJECT_NEXT(i) == child)
- return i;
- }
- return NULL;
-}
-
/* Titles and descriptions */
/* Note:
@@ -1635,8 +1630,7 @@ sp_object_prev(SPObject *child)
* The caller must free the returned string using g_free() - see comment
* for getTitleOrDesc() below.
*/
-gchar *
-SPObject::title() const
+gchar * SPObject::title() const
{
return getTitleOrDesc("svg:title");
}
@@ -1647,8 +1641,7 @@ SPObject::title() const
* (if any) should be deleted.
* The second argument is optional - see setTitleOrDesc() below for details.
*/
-bool
-SPObject::setTitle(gchar const *title, bool verbatim)
+bool SPObject::setTitle(gchar const *title, bool verbatim)
{
return setTitleOrDesc(title, "svg:title", verbatim);
}
@@ -1658,8 +1651,7 @@ SPObject::setTitle(gchar const *title, bool verbatim)
* The caller must free the returned string using g_free() - see comment
* for getTitleOrDesc() below.
*/
-gchar *
-SPObject::desc() const
+gchar * SPObject::desc() const
{
return getTitleOrDesc("svg:desc");
}
@@ -1670,8 +1662,7 @@ SPObject::desc() const
* description (if any) should be deleted.
* The second argument is optional - see setTitleOrDesc() below for details.
*/
-bool
-SPObject::setDesc(gchar const *desc, bool verbatim)
+bool SPObject::setDesc(gchar const *desc, bool verbatim)
{
return setTitleOrDesc(desc, "svg:desc", verbatim);
}
@@ -1686,12 +1677,14 @@ SPObject::setDesc(gchar const *desc, bool verbatim)
* Consequently, the return value is a newly allocated string (or NULL), and
* must be freed (using g_free()) by the caller.
*/
-gchar *
-SPObject::getTitleOrDesc(gchar const *svg_tagname) const
+gchar * SPObject::getTitleOrDesc(gchar const *svg_tagname) const
{
+ gchar *result = 0;
SPObject *elem = findFirstChild(svg_tagname);
- if (elem == NULL) return NULL;
- return g_string_free(elem->textualContent(), FALSE);
+ if ( elem ) {
+ result = g_string_free(elem->textualContent(), FALSE);
+ }
+ return result;
}
/**
@@ -1711,8 +1704,7 @@ SPObject::getTitleOrDesc(gchar const *svg_tagname) const
* The return value is true if a change was made to the title/description,
* and usually false otherwise.
*/
-bool
-SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool verbatim)
+bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool verbatim)
{
if (!verbatim) {
// If the new title/description is just whitespace,
@@ -1725,7 +1717,9 @@ SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool verb
break;
}
}
- if (just_whitespace) value = NULL;
+ if (just_whitespace) {
+ value = NULL;
+ }
}
// Don't stomp on mark-up if there is no real change.
if (value) {
@@ -1733,7 +1727,9 @@ SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool verb
if (current_value) {
bool different = std::strcmp(current_value, value);
g_free(current_value);
- if (!different) return false;
+ if (!different) {
+ return false;
+ }
}
}
}
@@ -1741,7 +1737,9 @@ SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool verb
SPObject *elem = findFirstChild(svg_tagname);
if (value == NULL) {
- if (elem == NULL) return false;
+ if (elem == NULL) {
+ return false;
+ }
// delete the title/description(s)
while (elem) {
elem->deleteObject();
@@ -1750,7 +1748,7 @@ SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool verb
return true;
}
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
if (elem == NULL) {
// create a new 'title' or 'desc' element, putting it at the
@@ -1775,13 +1773,14 @@ SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool verb
* Find the first child of this object with a given tag name,
* and return it. Returns NULL if there is no matching child.
*/
-SPObject *
-SPObject::findFirstChild(gchar const *tagname) const
+SPObject * SPObject::findFirstChild(gchar const *tagname) const
{
for (SPObject *child = children; child; child = child->next)
{
if (child->repr->type() == Inkscape::XML::ELEMENT_NODE &&
- !strcmp(child->repr->name(), tagname)) return child;
+ !strcmp(child->repr->name(), tagname)) {
+ return child;
+ }
}
return NULL;
}
@@ -1791,8 +1790,7 @@ SPObject::findFirstChild(gchar const *tagname) const
* content except the tags).
* Must not be used on anything except elements.
*/
-GString*
-SPObject::textualContent() const
+GString * SPObject::textualContent() const
{
GString* text = g_string_new("");
diff --git a/src/sp-object.h b/src/sp-object.h
index 59cab2328..8581fd35a 100644
--- a/src/sp-object.h
+++ b/src/sp-object.h
@@ -6,6 +6,8 @@
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -15,6 +17,14 @@
/* SPObject flags */
+class SPObject;
+class SPObjectClass;
+
+#define SP_TYPE_OBJECT (SPObject::sp_object_get_type ())
+#define SP_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_OBJECT, SPObject))
+#define SP_OBJECT_CLASS(clazz) (G_TYPE_CHECK_CLASS_CAST((clazz), SP_TYPE_OBJECT, SPObjectClass))
+#define SP_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_OBJECT))
+
/* Async modification flags */
#define SP_OBJECT_MODIFIED_FLAG (1 << 0)
#define SP_OBJECT_CHILD_MODIFIED_FLAG (1 << 1)
@@ -45,16 +55,11 @@
#define SP_OBJECT_WRITE_ALL (1 << 2)
/* Convenience stuff */
-#define SP_OBJECT_ID(o) (((SPObject *) (o))->getId())
-#define SP_OBJECT_REPR(o) (((SPObject *) (o))->repr)
+#define SP_OBJECT_REPR(o) (((SPObject *) (o))->getRepr())
#define SP_OBJECT_DOCUMENT(o) (((SPObject *) (o))->document)
#define SP_OBJECT_PARENT(o) (((SPObject *) (o))->parent)
-#define SP_OBJECT_NEXT(o) (((SPObject *) (o))->next)
-#define SP_OBJECT_PREV(o) (sp_object_prev((SPObject *) (o)))
-#define SP_OBJECT_HREFCOUNT(o) (((SPObject *) (o))->hrefcount)
#define SP_OBJECT_STYLE(o) (((SPObject *) (o))->style)
-
#include <glib-object.h>
#include <sigc++/connection.h>
#include <sigc++/functors/slot.h>
@@ -63,6 +68,7 @@
#include "forward.h"
#include "version.h"
#include "util/forward-pointer-iterator.h"
+#include "desktop-style.h"
namespace Inkscape {
namespace XML {
@@ -137,7 +143,8 @@ SPObject *sp_object_href(SPObject *object, gpointer owner);
SPObject *sp_object_hunref(SPObject *object, gpointer owner);
/// A refcounting tree node object.
-struct SPObject : public GObject {
+class SPObject : public GObject {
+public:
enum CollectionPolicy {
COLLECT_WITH_PARENT,
ALWAYS_COLLECT
@@ -154,10 +161,10 @@ struct SPObject : public GObject {
SPObject *children; /* Our children */
SPObject *_last_child; /* Remembered last child */
SPObject *next; /* Next object in linked list */
- Inkscape::XML::Node *repr; /* Our xml representation */
private:
gchar *id; /* Our very own unique id */
+ Inkscape::XML::Node *repr; /* Our xml representation */
public:
/**
@@ -165,6 +172,20 @@ public:
*/
gchar const* getId() const;
+ /**
+ * Returns the XML representation of tree
+ */
+ //Inkscape::XML::Node const* getRepr() const;
+//protected:
+ Inkscape::XML::Node * getRepr();
+
+ /**
+ * Returns the XML representation of tree
+ */
+ Inkscape::XML::Node const* getRepr() const;
+
+public:
+
/** @brief cleans up an SPObject, releasing its references and
* requesting that references to it be released
*/
@@ -221,18 +242,28 @@ public:
/* A non-const version can be similarly constructed if you want one.
* (Don't just cast away the constness, which would be ill-formed.) */
- SPObject *getNext();
+ SPObject *getNext() {return next;}
+ SPObject const *getNext() const {return next;}
+
+ /**
+ * Returns previous object in sibling list or NULL.
+ */
SPObject *getPrev();
bool hasChildren() const { return ( children != NULL ); }
SPObject *firstChild() { return children; }
SPObject const *firstChild() const { return children; }
+
SPObject *lastChild() { return _last_child; }
SPObject const *lastChild() const { return _last_child; }
enum Action { ActionGeneral, ActionBBox, ActionUpdate, ActionShow };
- /** @brief Retrieves children as a GSList */
+
+ /**
+ * Retrieves the children as a GSList object, optionally ref'ing the children
+ * in the process, if add_ref is specified.
+ */
GSList *childList(bool add_ref, Action action = ActionGeneral);
SPObject *appendChildRepr(Inkscape::XML::Node *repr);
@@ -482,7 +513,9 @@ public:
return _modified_signal.connect(slot);
}
+ /** Sends the delete signal to all children of this object recursively */
void _sendDeleteSignalRecursive();
+
void _updateTotalHRefCount(int increment);
void _requireSVGVersion(unsigned major, unsigned minor) {
@@ -499,6 +532,30 @@ public:
gchar *_label;
mutable gchar *_default_label;
+ // WARNING:
+ // Methods below should not be used outside of the SP tree,
+ // as they operate directly on the XML representation.
+ // In future, they will be made protected.
+ void attach(SPObject *object, SPObject *prev);
+ void reorder(SPObject *prev);
+ void detach(SPObject *object);
+ SPObject *get_child_by_repr(Inkscape::XML::Node *repr);
+ void invoke_build(SPDocument *document, Inkscape::XML::Node *repr, unsigned int cloned);
+ long long int getIntAttribute(char const *key, long long int def);
+ unsigned getPosition();
+ gchar const * getAttribute(gchar const *name,SPException *ex=0) const;
+ void appendChild(Inkscape::XML::Node *child);
+ void addChild(Inkscape::XML::Node *child,Inkscape::XML::Node *prev=0);
+ void setKeyValue(unsigned int key, gchar const *value);
+ void setAttribute(gchar const *key, gchar const *value, SPException *ex=0);
+ void readAttr(gchar const *key);
+ gchar const *getTagName(SPException *ex) const;
+ void removeAttribute(gchar const *key, SPException *ex=0);
+ gchar const *getStyleProperty(gchar const *key, gchar const *def) const;
+ void setCSS(SPCSSAttr *css, gchar const *attr);
+ void changeCSS(SPCSSAttr *css, gchar const *attr);
+ bool storeAsDouble( gchar const *key, double *val ) const;
+
private:
// Private member functions used in the definitions of setTitle(),
// setDesc(), title() and desc().
@@ -507,11 +564,41 @@ private:
SPObject * findFirstChild(gchar const *tagname) const;
GString * textualContent() const;
+ static void sp_object_init(SPObject *object);
+ static void sp_object_finalize(GObject *object);
+
+ static void sp_object_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref);
+ static void sp_object_remove_child(SPObject *object, Inkscape::XML::Node *child);
+ static void sp_object_order_changed(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref);
+
+ static void sp_object_release(SPObject *object);
+ static void sp_object_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+
+ static void sp_object_private_set(SPObject *object, unsigned int key, gchar const *value);
+ static Inkscape::XML::Node *sp_object_private_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
+ static gchar *sp_object_get_unique_id(SPObject *object, gchar const *defid);
+
+ /* Real handlers of repr signals */
+
+public:
+ static GType sp_object_get_type();
+ static void sp_object_repr_attr_changed(Inkscape::XML::Node *repr, gchar const *key, gchar const *oldval, gchar const *newval, bool is_interactive, gpointer data);
+
+ static void sp_object_repr_content_changed(Inkscape::XML::Node *repr, gchar const *oldcontent, gchar const *newcontent, gpointer data);
+
+ static void sp_object_repr_child_added(Inkscape::XML::Node *repr, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, gpointer data);
+ static void sp_object_repr_child_removed(Inkscape::XML::Node *repr, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, void *data);
+
+ static void sp_object_repr_order_changed(Inkscape::XML::Node *repr, Inkscape::XML::Node *child, Inkscape::XML::Node *old, Inkscape::XML::Node *newer, gpointer data);
+
+
+ friend class SPObjectClass;
friend class SPObjectImpl;
};
/// The SPObject vtable.
-struct SPObjectClass {
+class SPObjectClass {
+public:
GObjectClass parent_class;
void (* build) (SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr);
@@ -533,44 +620,17 @@ struct SPObjectClass {
void (* modified) (SPObject *object, unsigned int flags);
Inkscape::XML::Node * (* write) (SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, unsigned int flags);
-};
-
-/*
- * Attaching/detaching
- */
-
-void sp_object_attach(SPObject *parent, SPObject *object, SPObject *prev);
-void sp_object_reorder(SPObject *object, SPObject *prev);
-void sp_object_detach(SPObject *parent, SPObject *object);
-
-inline SPObject *sp_object_first_child(SPObject *parent) {
- return parent->firstChild();
-}
-SPObject *sp_object_get_child_by_repr(SPObject *object, Inkscape::XML::Node *repr);
-
-void sp_object_invoke_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr, unsigned int cloned);
-
-void sp_object_set(SPObject *object, unsigned int key, gchar const *value);
-
-void sp_object_read_attr(SPObject *object, gchar const *key);
-
-/* Public */
-
-gchar const *sp_object_tagName_get(SPObject const *object, SPException *ex);
-gchar const *sp_object_getAttribute(SPObject const *object, gchar const *key, SPException *ex);
-void sp_object_setAttribute(SPObject *object, gchar const *key, gchar const *value, SPException *ex);
-void sp_object_removeAttribute(SPObject *object, gchar const *key, SPException *ex);
+private:
+ static GObjectClass *static_parent_class;
+ static void sp_object_class_init(SPObjectClass *klass);
-/* Style */
+ friend class SPObject;
+};
-gchar const *sp_object_get_style_property(SPObject const *object,
- gchar const *key, gchar const *def);
int sp_object_compare_position(SPObject const *first, SPObject const *second);
-SPObject *sp_object_prev(SPObject *child);
-
#endif // SP_OBJECT_H_SEEN
diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp
index 28f0d1d5b..019942892 100644
--- a/src/sp-offset.cpp
+++ b/src/sp-offset.cpp
@@ -1,5 +1,3 @@
-#define __SP_OFFSET_C__
-
/** \file
* Implementation of <path sodipodi:type="inkscape:offset">.
*/
@@ -8,6 +6,7 @@
* Authors: (of the sp-spiral.c upon which this file was constructed):
* Mitsuru Oka <oka326@parkcity.ne.jp>
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -217,39 +216,42 @@ sp_offset_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
if (((SPObjectClass *) parent_class)->build)
((SPObjectClass *) parent_class)->build (object, document, repr);
- if (object->repr->attribute("inkscape:radius")) {
- sp_object_read_attr (object, "inkscape:radius");
+ //XML Tree being used directly here while it shouldn't be.
+ if (object->getRepr()->attribute("inkscape:radius")) {
+ object->readAttr( "inkscape:radius" );
} else {
- gchar const *oldA = object->repr->attribute("sodipodi:radius");
- object->repr->setAttribute("inkscape:radius",oldA);
- object->repr->setAttribute("sodipodi:radius",NULL);
+ //XML Tree being used directly here (as object->getRepr)
+ //in all the below lines in the block while it shouldn't be.
+ gchar const *oldA = object->getRepr()->attribute("sodipodi:radius");
+ object->getRepr()->setAttribute("inkscape:radius",oldA);
+ object->getRepr()->setAttribute("sodipodi:radius",NULL);
- sp_object_read_attr (object, "inkscape:radius");
+ object->readAttr( "inkscape:radius" );
}
- if (object->repr->attribute("inkscape:original")) {
- sp_object_read_attr (object, "inkscape:original");
+ if (object->getRepr()->attribute("inkscape:original")) {
+ object->readAttr( "inkscape:original" );
} else {
- gchar const *oldA = object->repr->attribute("sodipodi:original");
- object->repr->setAttribute("inkscape:original",oldA);
- object->repr->setAttribute("sodipodi:original",NULL);
+ gchar const *oldA = object->getRepr()->attribute("sodipodi:original");
+ object->getRepr()->setAttribute("inkscape:original",oldA);
+ object->getRepr()->setAttribute("sodipodi:original",NULL);
- sp_object_read_attr (object, "inkscape:original");
+ object->readAttr( "inkscape:original" );
}
- if (object->repr->attribute("xlink:href")) {
- sp_object_read_attr(object, "xlink:href");
+ if (object->getRepr()->attribute("xlink:href")) {
+ object->readAttr( "xlink:href" );
} else {
- gchar const *oldA = object->repr->attribute("inkscape:href");
+ gchar const *oldA = object->getRepr()->attribute("inkscape:href");
if (oldA) {
size_t lA = strlen(oldA);
char *nA=(char*)malloc((1+lA+1)*sizeof(char));
memcpy(nA+1,oldA,lA*sizeof(char));
nA[0]='#';
nA[lA+1]=0;
- object->repr->setAttribute("xlink:href",nA);
+ object->getRepr()->setAttribute("xlink:href",nA);
free(nA);
- object->repr->setAttribute("inkscape:href",NULL);
+ object->getRepr()->setAttribute("inkscape:href",NULL);
}
- sp_object_read_attr (object, "xlink:href");
+ object->readAttr( "xlink:href" );
}
}
@@ -278,7 +280,7 @@ sp_offset_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XM
// Make sure the object has curve
- SPCurve *curve = sp_shape_get_curve (SP_SHAPE (offset));
+ SPCurve *curve = SP_SHAPE (offset)->getCurve();
if (curve == NULL) {
sp_offset_set_shape (SP_SHAPE (offset));
}
@@ -405,7 +407,7 @@ sp_offset_update(SPObject *object, SPCtx *ctx, guint flags)
if (flags &
(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
- sp_shape_set_shape ((SPShape *) object);
+ ((SPShape *) object)->setShape ();
}
offset->isUpdating=false;
@@ -454,12 +456,13 @@ sp_offset_set_shape(SPShape *shape)
// just put the source shape as the offseted one, no one will notice
// it's also useless to compute the offset with a 0 radius
- const char *res_d = SP_OBJECT(shape)->repr->attribute("inkscape:original");
+ //XML Tree being used directly here while it shouldn't be.
+ const char *res_d = SP_OBJECT(shape)->getRepr()->attribute("inkscape:original");
if ( res_d ) {
Geom::PathVector pv = sp_svg_read_pathv(res_d);
SPCurve *c = new SPCurve(pv);
g_assert(c != NULL);
- sp_shape_set_curve_insync ((SPShape *) offset, c, TRUE);
+ ((SPShape *) offset)->setCurveInsync (c, TRUE);
c->unref();
}
return;
@@ -510,7 +513,7 @@ sp_offset_set_shape(SPShape *shape)
theRes->ConvertToForme (orig, 1, originaux);
SPItem *item = shape;
- Geom::OptRect bbox = sp_item_bbox_desktop (item);
+ Geom::OptRect bbox = item->getBboxDesktop ();
if ( bbox ) {
gdouble size = L2(bbox->dimensions());
gdouble const exp = item->transform.descrim();
@@ -708,7 +711,7 @@ sp_offset_set_shape(SPShape *shape)
Geom::PathVector pv = sp_svg_read_pathv(res_d);
SPCurve *c = new SPCurve(pv);
g_assert(c != NULL);
- sp_shape_set_curve_insync ((SPShape *) offset, c, TRUE);
+ ((SPShape *) offset)->setCurveInsync (c, TRUE);
c->unref();
free (res_d);
@@ -948,11 +951,11 @@ sp_offset_top_point (SPOffset * offset, Geom::Point *px)
return;
}
- SPCurve *curve = sp_shape_get_curve (SP_SHAPE (offset));
+ SPCurve *curve = SP_SHAPE (offset)->getCurve();
if (curve == NULL)
{
sp_offset_set_shape (SP_SHAPE (offset));
- curve = sp_shape_get_curve (SP_SHAPE (offset));
+ curve = SP_SHAPE (offset)->getCurve();
if (curve == NULL)
return;
}
@@ -1049,7 +1052,7 @@ sp_offset_move_compensate(Geom::Matrix const *mp, SPItem */*original*/, SPOffset
item->transform *= compensate;
// commit the compensation
- sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform, &advertized_move);
+ item->doWriteTransform(SP_OBJECT_REPR(item), item->transform, &advertized_move);
SP_OBJECT(item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
@@ -1076,7 +1079,7 @@ sp_offset_source_modified (SPObject */*iSource*/, guint /*flags*/, SPItem *item)
SPOffset *offset = SP_OFFSET(item);
offset->sourceDirty=true;
refresh_offset_source(offset);
- sp_shape_set_shape ((SPShape *) offset);
+ ((SPShape *) offset)->setShape ();
}
static void
@@ -1094,7 +1097,7 @@ refresh_offset_source(SPOffset* offset)
SPCurve *curve=NULL;
if (!SP_IS_SHAPE (item) && !SP_IS_TEXT (item)) return;
if (SP_IS_SHAPE (item)) {
- curve = sp_shape_get_curve (SP_SHAPE (item));
+ curve = SP_SHAPE (item)->getCurve ();
if (curve == NULL)
return;
}
@@ -1145,7 +1148,8 @@ refresh_offset_source(SPOffset* offset)
delete res;
delete orig;
- SP_OBJECT (offset)->repr->setAttribute("inkscape:original", res_d);
+ //XML Tree being used diectly here while it shouldn't be.
+ SP_OBJECT (offset)->getRepr()->setAttribute("inkscape:original", res_d);
free (res_d);
}
diff --git a/src/sp-path.cpp b/src/sp-path.cpp
index dd6f60eb7..dbba440da 100644
--- a/src/sp-path.cpp
+++ b/src/sp-path.cpp
@@ -1,11 +1,10 @@
-#define __SP_PATH_C__
-
/*
* SVG <path> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* David Turner <novalis@gnu.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004 David Turner
* Copyright (C) 1999-2002 Lauris Kaplinski
@@ -170,7 +169,7 @@ sp_path_convert_to_guides(SPItem *item)
std::list<std::pair<Geom::Point, Geom::Point> > pts;
- Geom::Matrix const i2d (sp_item_i2d_affine(SP_ITEM(path)));
+ Geom::Matrix const i2d (SP_ITEM(path)->i2d_affine());
Geom::PathVector const & pv = curve->get_pathvector();
for(Geom::PathVector::const_iterator pit = pv.begin(); pit != pv.end(); ++pit) {
@@ -213,10 +212,10 @@ static void
sp_path_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
/* Are these calls actually necessary? */
- sp_object_read_attr(object, "marker");
- sp_object_read_attr(object, "marker-start");
- sp_object_read_attr(object, "marker-mid");
- sp_object_read_attr(object, "marker-end");
+ object->readAttr( "marker" );
+ object->readAttr( "marker-start" );
+ object->readAttr( "marker-mid" );
+ object->readAttr( "marker-end" );
sp_conn_end_pair_build(object);
@@ -224,13 +223,13 @@ sp_path_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
((SPObjectClass *) parent_class)->build(object, document, repr);
}
- sp_object_read_attr(object, "inkscape:original-d");
- sp_object_read_attr(object, "d");
+ object->readAttr( "inkscape:original-d" );
+ object->readAttr( "d" );
/* d is a required attribute */
- gchar const *d = sp_object_getAttribute(object, "d", NULL);
+ gchar const *d = object->getAttribute("d", NULL);
if (d == NULL) {
- sp_object_set(object, sp_attribute_lookup("d"), "");
+ object->setKeyValue( sp_attribute_lookup("d"), "");
}
}
@@ -278,11 +277,11 @@ sp_path_set(SPObject *object, unsigned int key, gchar const *value)
Geom::PathVector pv = sp_svg_read_pathv(value);
SPCurve *curve = new SPCurve(pv);
if (curve) {
- sp_shape_set_curve((SPShape *) path, curve, TRUE);
+ ((SPShape *) path)->setCurve(curve, TRUE);
curve->unref();
}
} else {
- sp_shape_set_curve((SPShape *) path, NULL, TRUE);
+ ((SPShape *) path)->setCurve(NULL, TRUE);
}
object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
break;
@@ -391,16 +390,16 @@ sp_path_set_transform(SPItem *item, Geom::Matrix const &xform)
}
// Adjust stroke
- sp_item_adjust_stroke(item, xform.descrim());
+ item->adjust_stroke(xform.descrim());
// Adjust pattern fill
- sp_item_adjust_pattern(item, xform);
+ item->adjust_pattern(xform);
// Adjust gradient fill
- sp_item_adjust_gradient(item, xform);
+ item->adjust_gradient(xform);
// Adjust LPE
- sp_item_adjust_livepatheffect(item, xform);
+ item->adjust_livepatheffect(xform);
item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
@@ -424,7 +423,7 @@ g_message("sp_path_update_patheffect");
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);
+ shape->setCurveInsync(curve, TRUE);
bool success = sp_lpe_item_perform_path_effect(SP_LPE_ITEM(shape), curve);
if (success && write) {
@@ -445,7 +444,7 @@ g_message("sp_path_update_patheffect writes 'd' attribute");
Geom::PathVector pv = sp_svg_read_pathv(value);
SPCurve *oldcurve = new SPCurve(pv);
if (oldcurve) {
- sp_shape_set_curve(shape, oldcurve, TRUE);
+ shape->setCurve(oldcurve, TRUE);
oldcurve->unref();
}
}
@@ -504,7 +503,7 @@ sp_path_get_curve_for_edit (SPPath *path)
sp_lpe_item_has_path_effect_recursive(SP_LPE_ITEM(path))) {
return sp_path_get_original_curve(path);
} else {
- return sp_shape_get_curve( (SPShape *) path );
+ return ((SPShape *) path)->getCurve();
}
}
diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp
index 7fc4cb3f5..7a17f0a2a 100644
--- a/src/sp-pattern.cpp
+++ b/src/sp-pattern.cpp
@@ -1,11 +1,11 @@
-#define __SP_PATTERN_C__
-
/*
* SVG <pattern> implementation
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2002 Lauris Kaplinski
*
@@ -128,18 +128,18 @@ sp_pattern_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *r
if (((SPObjectClass *) pattern_parent_class)->build)
(* ((SPObjectClass *) pattern_parent_class)->build) (object, document, repr);
- sp_object_read_attr (object, "patternUnits");
- sp_object_read_attr (object, "patternContentUnits");
- sp_object_read_attr (object, "patternTransform");
- 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, "viewBox");
- sp_object_read_attr (object, "xlink:href");
+ object->readAttr( "patternUnits" );
+ object->readAttr( "patternContentUnits" );
+ object->readAttr( "patternTransform" );
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "width" );
+ object->readAttr( "height" );
+ object->readAttr( "viewBox" );
+ object->readAttr( "xlink:href" );
/* Register ourselves */
- sp_document_add_resource (document, "pattern", object);
+ document->addResource("pattern", object);
}
static void
@@ -151,7 +151,7 @@ sp_pattern_release (SPObject *object)
if (SP_OBJECT_DOCUMENT (object)) {
/* Unregister ourselves */
- sp_document_remove_resource (SP_OBJECT_DOCUMENT (object), "pattern", SP_OBJECT (object));
+ SP_OBJECT_DOCUMENT (object)->removeResource("pattern", SP_OBJECT (object));
}
if (pat->ref) {
@@ -291,21 +291,20 @@ sp_pattern_set (SPObject *object, unsigned int key, const gchar *value)
/* fixme: We need ::order_changed handler too (Lauris) */
-GSList *
-pattern_getchildren (SPPattern *pat)
+GSList *pattern_getchildren(SPPattern *pat)
{
- GSList *l = NULL;
+ GSList *l = NULL;
- for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) {
- if (sp_object_first_child(SP_OBJECT(pat_i))) { // find the first one with children
- for (SPObject *child = sp_object_first_child(SP_OBJECT (pat)) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- l = g_slist_prepend (l, child);
- }
- break; // do not go further up the chain if children are found
- }
+ for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) {
+ if (pat_i->firstChild()) { // find the first one with children
+ for (SPObject *child = pat->firstChild() ; child ; child = child->getNext() ) {
+ l = g_slist_prepend (l, child);
+ }
+ break; // do not go further up the chain if children are found
}
+ }
- return l;
+ return l;
}
static void
@@ -379,17 +378,45 @@ pattern_ref_modified (SPObject */*ref*/, guint /*flags*/, SPPattern *pattern)
/* Conditional to avoid causing infinite loop if there's a cycle in the href chain. */
}
+
+/**
+Count how many times pat is used by the styles of o and its descendants
+*/
guint
-pattern_users (SPPattern *pattern)
+count_pattern_hrefs(SPObject *o, SPPattern *pat)
{
- return SP_OBJECT (pattern)->hrefcount;
+ if (!o)
+ return 1;
+
+ guint i = 0;
+
+ SPStyle *style = SP_OBJECT_STYLE(o);
+ if (style
+ && style->fill.isPaintserver()
+ && SP_IS_PATTERN(SP_STYLE_FILL_SERVER(style))
+ && SP_PATTERN(SP_STYLE_FILL_SERVER(style)) == pat)
+ {
+ i ++;
+ }
+ if (style
+ && style->stroke.isPaintserver()
+ && SP_IS_PATTERN(SP_STYLE_STROKE_SERVER(style))
+ && SP_PATTERN(SP_STYLE_STROKE_SERVER(style)) == pat)
+ {
+ i ++;
+ }
+
+ for ( SPObject *child = o->firstChild(); child != NULL; child = child->next ) {
+ i += count_pattern_hrefs(child, pat);
+ }
+
+ return i;
}
-SPPattern *
-pattern_chain (SPPattern *pattern)
+SPPattern *pattern_chain(SPPattern *pattern)
{
SPDocument *document = SP_OBJECT_DOCUMENT (pattern);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *defsrepr = SP_OBJECT_REPR (SP_DOCUMENT_DEFS (document));
Inkscape::XML::Node *repr = xml_doc->createElement("svg:pattern");
@@ -409,7 +436,7 @@ pattern_chain (SPPattern *pattern)
SPPattern *
sp_pattern_clone_if_necessary (SPItem *item, SPPattern *pattern, const gchar *property)
{
- if (pattern_users(pattern) > 1) {
+ if (!pattern->href || pattern->hrefcount > count_pattern_hrefs(item, pattern)) {
pattern = pattern_chain (pattern);
gchar *href = g_strconcat ("url(#", SP_OBJECT_REPR (pattern)->attribute("id"), ")", NULL);
@@ -440,10 +467,9 @@ sp_pattern_transform_multiply (SPPattern *pattern, Geom::Matrix postmul, bool se
g_free(c);
}
-const gchar *
-pattern_tile (GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Matrix transform, Geom::Matrix move)
+const gchar *pattern_tile(GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Matrix transform, Geom::Matrix move)
{
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *defsrepr = SP_OBJECT_REPR (SP_DOCUMENT_DEFS (document));
Inkscape::XML::Node *repr = xml_doc->createElement("svg:pattern");
@@ -468,22 +494,21 @@ pattern_tile (GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Matr
dup_transform = Geom::identity();
dup_transform *= move;
- sp_item_write_transform(copy, SP_OBJECT_REPR(copy), dup_transform, NULL, false);
+ copy->doWriteTransform(SP_OBJECT_REPR(copy), dup_transform, NULL, false);
}
Inkscape::GC::release(repr);
return pat_id;
}
-SPPattern *
-pattern_getroot (SPPattern *pat)
+SPPattern *pattern_getroot(SPPattern *pat)
{
- for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) {
- if (sp_object_first_child(SP_OBJECT(pat_i))) { // find the first one with children
- return pat_i;
- }
- }
- return pat; // document is broken, we can't get to root; but at least we can return pat which is supposedly a valid pattern
+ for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) {
+ if ( pat_i->firstChild() ) { // find the first one with children
+ return pat_i;
+ }
+ }
+ return pat; // document is broken, we can't get to root; but at least we can return pat which is supposedly a valid pattern
}
@@ -565,12 +590,13 @@ NRRect *pattern_viewBox (SPPattern *pat)
bool pattern_hasItemChildren (SPPattern *pat)
{
- for (SPObject *child = sp_object_first_child(SP_OBJECT(pat)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
- if (SP_IS_ITEM (child)) {
- return true;
- }
- }
- return false;
+ bool hasChildren = false;
+ for (SPObject *child = pat->firstChild() ; child && !hasChildren ; child = child->getNext() ) {
+ if (SP_IS_ITEM(child)) {
+ hasChildren = true;
+ }
+ }
+ return hasChildren;
}
static cairo_pattern_t *
@@ -604,15 +630,15 @@ sp_pattern_create_pattern(SPPaintServer *ps,
/* Create arena */
NRArena *arena = NRArena::create();
- unsigned int dkey = sp_item_display_key_new (1);
+ unsigned int dkey = SPItem::display_key_new (1);
NRArenaGroup *root = NRArenaGroup::create(arena);
- for (SPObject *child = sp_object_first_child(SP_OBJECT(shown)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = shown->firstChild(); child != NULL; child = child->getNext() ) {
if (SP_IS_ITEM (child)) {
// for each item in pattern, show it on our arena, add to the group,
// and connect to the release signal in case the item gets deleted
NRArenaItem *cai;
- cai = sp_item_invoke_show (SP_ITEM (child), arena, dkey, SP_ITEM_SHOW_DISPLAY);
+ cai = SP_ITEM(child)->invoke_show (arena, dkey, SP_ITEM_SHOW_DISPLAY);
nr_arena_item_append_child (root, cai);
}
}
@@ -677,9 +703,9 @@ sp_pattern_create_pattern(SPPaintServer *ps,
gc.transform = vb2ps;
nr_arena_item_invoke_update (root, NULL, &gc, NR_ARENA_ITEM_STATE_ALL, NR_ARENA_ITEM_STATE_ALL);
nr_arena_item_invoke_render (ct, root, &one_tile, NULL, 0);
- for (SPObject *child = sp_object_first_child(SP_OBJECT(shown)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = shown->firstChild() ; child != NULL; child = child->getNext() ) {
if (SP_IS_ITEM (child)) {
- sp_item_invoke_hide(SP_ITEM (child), dkey);
+ SP_ITEM(child)->invoke_hide(dkey);
}
}
nr_object_unref(root);
diff --git a/src/sp-pattern.h b/src/sp-pattern.h
index 8ff878657..6ed7a1482 100644
--- a/src/sp-pattern.h
+++ b/src/sp-pattern.h
@@ -1,11 +1,12 @@
-#ifndef __SP_PATTERN_H__
-#define __SP_PATTERN_H__
+#ifndef SEEN_SP_PATTERN_H
+#define SEEN_SP_PATTERN_H
/*
* SVG <pattern> implementation
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 2002 Lauris Kaplinski
*
@@ -15,7 +16,7 @@
#include <gtk/gtktypeutils.h>
#include "forward.h"
-
+#include "sp-item.h"
#define SP_TYPE_PATTERN (sp_pattern_get_type ())
#define SP_PATTERN(o) (GTK_CHECK_CAST ((o), SP_TYPE_PATTERN, SPPattern))
#define SP_PATTERN_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_PATTERN, SPPatternClass))
@@ -98,7 +99,7 @@ gdouble pattern_width (SPPattern *pat);
gdouble pattern_height (SPPattern *pat);
NRRect *pattern_viewBox (SPPattern *pat);
-#endif //__SP_PATTERN_H__
+#endif // SEEN_SP_PATTERN_H
/*
Local Variables:
diff --git a/src/sp-polygon.cpp b/src/sp-polygon.cpp
index 014c68c9b..1067da72e 100644
--- a/src/sp-polygon.cpp
+++ b/src/sp-polygon.cpp
@@ -1,10 +1,9 @@
-#define __SP_POLYGON_C__
-
/*
* SVG <polygon> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -84,7 +83,7 @@ static void sp_polygon_build(SPObject *object, SPDocument *document, Inkscape::X
((SPObjectClass *) parent_class)->build(object, document, repr);
}
- sp_object_read_attr(object, "points");
+ object->readAttr( "points" );
}
@@ -116,7 +115,7 @@ static Inkscape::XML::Node *sp_polygon_write(SPObject *object, Inkscape::XML::Do
SPShape *shape = SP_SHAPE(object);
// Tolerable workaround: we need to update the object's curve before we set points=
// because it's out of sync when e.g. some extension attrs of the polygon or star are changed in XML editor
- sp_shape_set_shape(shape);
+ shape->setShape();
if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
repr = xml_doc->createElement("svg:polygon");
@@ -209,7 +208,7 @@ void sp_polygon_set(SPObject *object, unsigned int key, const gchar *value)
* a single-point polygon in SPCurve. TODO: add a testcase with only one coordinate pair */
curve->closepath();
}
- sp_shape_set_curve(SP_SHAPE(polygon), curve, TRUE);
+ (SP_SHAPE(polygon))->setCurve(curve, TRUE);
curve->unref();
break;
}
diff --git a/src/sp-polyline.cpp b/src/sp-polyline.cpp
index 08f446d61..d0954f239 100644
--- a/src/sp-polyline.cpp
+++ b/src/sp-polyline.cpp
@@ -1,10 +1,10 @@
-#define __SP_POLYLINE_C__
-
/*
* SVG <polyline> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 1999-2002 Lauris Kaplinski
*
@@ -20,159 +20,150 @@
#include "xml/repr.h"
#include "document.h"
-static void sp_polyline_class_init (SPPolyLineClass *klass);
-static void sp_polyline_init (SPPolyLine *polyline);
-
-static void sp_polyline_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * repr);
-static void sp_polyline_set (SPObject *object, unsigned int key, const gchar *value);
-static Inkscape::XML::Node *sp_polyline_write (SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static gchar * sp_polyline_description (SPItem * item);
-
-static SPShapeClass *parent_class;
+SPShapeClass * SPPolyLineClass::static_parent_class=0;
-GType
-sp_polyline_get_type (void)
+GType SPPolyLine::sp_polyline_get_type(void)
{
- static GType polyline_type = 0;
-
- if (!polyline_type) {
- GTypeInfo polyline_info = {
- sizeof (SPPolyLineClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) sp_polyline_class_init,
- NULL, /* klass_finalize */
- NULL, /* klass_data */
- sizeof (SPPolyLine),
- 16, /* n_preallocs */
- (GInstanceInitFunc) sp_polyline_init,
- NULL, /* value_table */
- };
- polyline_type = g_type_register_static (SP_TYPE_SHAPE, "SPPolyLine", &polyline_info, (GTypeFlags)0);
- }
- return polyline_type;
+ static GType polyline_type = 0;
+
+ if (!polyline_type) {
+ GTypeInfo polyline_info = {
+ sizeof (SPPolyLineClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) SPPolyLineClass::sp_polyline_class_init,
+ NULL, /* klass_finalize */
+ NULL, /* klass_data */
+ sizeof (SPPolyLine),
+ 16, /* n_preallocs */
+ (GInstanceInitFunc) SPPolyLine::init,
+ NULL, /* value_table */
+ };
+ polyline_type = g_type_register_static (SP_TYPE_SHAPE, "SPPolyLine", &polyline_info, (GTypeFlags)0);
+ }
+ return polyline_type;
}
-static void
-sp_polyline_class_init (SPPolyLineClass *klass)
+void SPPolyLineClass::sp_polyline_class_init(SPPolyLineClass *klass)
{
- GObjectClass * gobject_class;
- SPObjectClass * sp_object_class;
- SPItemClass * item_class;
-
- gobject_class = (GObjectClass *) klass;
- sp_object_class = (SPObjectClass *) klass;
- item_class = (SPItemClass *) klass;
+ GObjectClass * gobject_class = (GObjectClass *) klass;
+ SPObjectClass * sp_object_class = (SPObjectClass *) klass;
+ SPItemClass * item_class = (SPItemClass *) klass;
- parent_class = (SPShapeClass *)g_type_class_ref (SP_TYPE_SHAPE);
+ static_parent_class = (SPShapeClass *)g_type_class_ref(SP_TYPE_SHAPE);
- sp_object_class->build = sp_polyline_build;
- sp_object_class->set = sp_polyline_set;
- sp_object_class->write = sp_polyline_write;
+ sp_object_class->build = SPPolyLine::build;
+ sp_object_class->set = SPPolyLine::set;
+ sp_object_class->write = SPPolyLine::write;
- item_class->description = sp_polyline_description;
+ item_class->description = SPPolyLine::getDescription;
}
-static void
-sp_polyline_init (SPPolyLine * /*polyline*/)
+void SPPolyLine::init(SPPolyLine * /*polyline*/)
{
/* Nothing here */
}
-static void
-sp_polyline_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * repr)
+void SPPolyLine::build(SPObject * object, SPDocument * document, Inkscape::XML::Node * repr)
{
- if (((SPObjectClass *) parent_class)->build)
- ((SPObjectClass *) parent_class)->build (object, document, repr);
+ if (((SPObjectClass *) SPPolyLineClass::static_parent_class)->build) {
+ ((SPObjectClass *) SPPolyLineClass::static_parent_class)->build (object, document, repr);
+ }
- sp_object_read_attr (object, "points");
+ object->readAttr( "points" );
}
-static void
-sp_polyline_set (SPObject *object, unsigned int key, const gchar *value)
+void SPPolyLine::set(SPObject *object, unsigned int key, const gchar *value)
{
- SPPolyLine *polyline;
-
- polyline = SP_POLYLINE (object);
+ SPPolyLine *polyline = SP_POLYLINE(object);
- switch (key) {
+ switch (key) {
case SP_ATTR_POINTS: {
- SPCurve * curve;
- const gchar * cptr;
- char * eptr;
- gboolean hascpt;
-
- if (!value) break;
- curve = new SPCurve ();
- hascpt = FALSE;
-
- cptr = value;
- eptr = NULL;
-
- while (TRUE) {
- gdouble x, y;
-
- while (*cptr != '\0' && (*cptr == ',' || *cptr == '\x20' || *cptr == '\x9' || *cptr == '\xD' || *cptr == '\xA')) {
- cptr++;
- }
- if (!*cptr) break;
-
- x = g_ascii_strtod (cptr, &eptr);
- if (eptr == cptr) break;
- cptr = eptr;
-
- while (*cptr != '\0' && (*cptr == ',' || *cptr == '\x20' || *cptr == '\x9' || *cptr == '\xD' || *cptr == '\xA')) {
- cptr++;
- }
- if (!*cptr) break;
-
- y = g_ascii_strtod (cptr, &eptr);
- if (eptr == cptr) break;
- cptr = eptr;
- if (hascpt) {
- curve->lineto(x, y);
- } else {
- curve->moveto(x, y);
- hascpt = TRUE;
- }
- }
+ SPCurve * curve;
+ const gchar * cptr;
+ char * eptr;
+ gboolean hascpt;
+
+ if (!value) break;
+ curve = new SPCurve ();
+ hascpt = FALSE;
+
+ cptr = value;
+ eptr = NULL;
+
+ while (TRUE) {
+ gdouble x, y;
+
+ while (*cptr != '\0' && (*cptr == ',' || *cptr == '\x20' || *cptr == '\x9' || *cptr == '\xD' || *cptr == '\xA')) {
+ cptr++;
+ }
+ if (!*cptr) break;
+
+ x = g_ascii_strtod (cptr, &eptr);
+ if (eptr == cptr) break;
+ cptr = eptr;
+
+ while (*cptr != '\0' && (*cptr == ',' || *cptr == '\x20' || *cptr == '\x9' || *cptr == '\xD' || *cptr == '\xA')) {
+ cptr++;
+ }
+ if (!*cptr) break;
+
+ y = g_ascii_strtod (cptr, &eptr);
+ if (eptr == cptr) break;
+ cptr = eptr;
+ if (hascpt) {
+ curve->lineto(x, y);
+ } else {
+ curve->moveto(x, y);
+ hascpt = TRUE;
+ }
+ }
- sp_shape_set_curve (SP_SHAPE (polyline), curve, TRUE);
- curve->unref();
- break;
+ (SP_SHAPE (polyline))->setCurve (curve, TRUE);
+ curve->unref();
+ break;
}
default:
- if (((SPObjectClass *) parent_class)->set)
- ((SPObjectClass *) parent_class)->set (object, key, value);
- break;
- }
+ if (((SPObjectClass *) SPPolyLineClass::static_parent_class)->set) {
+ ((SPObjectClass *) SPPolyLineClass::static_parent_class)->set (object, key, value);
+ }
+ break;
+ }
}
-static Inkscape::XML::Node *
-sp_polyline_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+Inkscape::XML::Node *SPPolyLine::write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
- SPPolyLine *polyline;
-
- polyline = SP_POLYLINE (object);
+ SPPolyLine *polyline = SP_POLYLINE (object);
- if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
- repr = xml_doc->createElement("svg:polyline");
- }
+ if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
+ repr = xml_doc->createElement("svg:polyline");
+ }
- if (repr != SP_OBJECT_REPR (object)) {
- repr->mergeFrom(SP_OBJECT_REPR (object), "id");
- }
+ if (repr != SP_OBJECT_REPR (object)) {
+ repr->mergeFrom(SP_OBJECT_REPR (object), "id");
+ }
- if (((SPObjectClass *) (parent_class))->write)
- ((SPObjectClass *) (parent_class))->write (object, xml_doc, repr, flags);
+ if (((SPObjectClass *) (SPPolyLineClass::static_parent_class))->write) {
+ ((SPObjectClass *) (SPPolyLineClass::static_parent_class))->write (object, xml_doc, repr, flags);
+ }
- return repr;
+ return repr;
}
-static gchar *
-sp_polyline_description(SPItem */*item*/)
+gchar *SPPolyLine::getDescription(SPItem * /*item*/)
{
return g_strdup(_("<b>Polyline</b>"));
}
+
+
+/*
+ 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/sp-polyline.h b/src/sp-polyline.h
index 3ee18d6a5..277529b49 100644
--- a/src/sp-polyline.h
+++ b/src/sp-polyline.h
@@ -1,11 +1,11 @@
-#ifndef SP_POLYLINE_H
-#define SP_POLYLINE_H
+#ifndef SEEN_SP_POLYLINE_H
+#define SEEN_SP_POLYLINE_H
#include "sp-shape.h"
-#define SP_TYPE_POLYLINE (sp_polyline_get_type ())
+#define SP_TYPE_POLYLINE (SPPolyLine::sp_polyline_get_type ())
#define SP_POLYLINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_POLYLINE, SPPolyLine))
#define SP_POLYLINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_POLYLINE, SPPolyLineClass))
#define SP_IS_POLYLINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_POLYLINE))
@@ -14,15 +14,42 @@
class SPPolyLine;
class SPPolyLineClass;
-struct SPPolyLine : public SPShape {
-};
+class SPPolyLine : public SPShape {
+public:
+ static GType sp_polyline_get_type (void);
+
+private:
+ static void init(SPPolyLine *polyline);
+
+ static void build(SPObject * object, SPDocument * document, Inkscape::XML::Node * repr);
+ static void set(SPObject *object, unsigned int key, const gchar *value);
+ static Inkscape::XML::Node *write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-struct SPPolyLineClass {
- SPShapeClass parent_class;
+ static gchar * getDescription(SPItem * item);
+
+ friend class SPPolyLineClass;
};
-GType sp_polyline_get_type (void);
+class SPPolyLineClass {
+public:
+ SPShapeClass parent_class;
+private:
+ static SPShapeClass *static_parent_class;
+ static void sp_polyline_class_init (SPPolyLineClass *klass);
+ friend class SPPolyLine;
+};
-#endif
+#endif // SEEN_SP_POLYLINE_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 :
diff --git a/src/sp-rect.cpp b/src/sp-rect.cpp
index 54f4ceea5..377a4f0b7 100644
--- a/src/sp-rect.cpp
+++ b/src/sp-rect.cpp
@@ -111,12 +111,12 @@ sp_rect_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
if (((SPObjectClass *) parent_class)->build)
((SPObjectClass *) parent_class)->build(object, document, repr);
- 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, "rx");
- sp_object_read_attr(object, "ry");
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "width" );
+ object->readAttr( "height" );
+ object->readAttr( "rx" );
+ object->readAttr( "ry" );
}
static void
@@ -183,7 +183,7 @@ sp_rect_update(SPObject *object, SPCtx *ctx, guint flags)
rect->height.update(em, ex, h);
rect->rx.update(em, ex, w);
rect->ry.update(em, ex, h);
- sp_shape_set_shape((SPShape *) object);
+ ((SPShape *) object)->setShape();
flags &= ~SP_OBJECT_USER_MODIFIED_FLAG_B; // since we change the description, it's not a "just translation" anymore
}
@@ -229,7 +229,7 @@ sp_rect_set_shape(SPShape *shape)
SPRect *rect = (SPRect *) shape;
if ((rect->height.computed < 1e-18) || (rect->width.computed < 1e-18)) {
- sp_shape_set_curve_insync(SP_SHAPE(rect), NULL, TRUE);
+ SP_SHAPE(rect)->setCurveInsync( NULL, TRUE);
return;
}
@@ -279,7 +279,7 @@ sp_rect_set_shape(SPShape *shape)
}
c->closepath();
- sp_shape_set_curve_insync(SP_SHAPE(rect), c, TRUE);
+ SP_SHAPE(rect)->setCurveInsync( c, TRUE);
c->unref();
}
@@ -377,13 +377,13 @@ sp_rect_set_transform(SPItem *item, Geom::Matrix const &xform)
sp_rect_set_shape(rect);
// Adjust stroke width
- sp_item_adjust_stroke(item, sqrt(fabs(sw * sh)));
+ item->adjust_stroke(sqrt(fabs(sw * sh)));
// Adjust pattern fill
- sp_item_adjust_pattern(item, xform * ret.inverse());
+ item->adjust_pattern(xform * ret.inverse());
// Adjust gradient fill
- sp_item_adjust_gradient(item, xform * ret.inverse());
+ item->adjust_gradient(xform * ret.inverse());
item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG);
@@ -568,7 +568,7 @@ static void sp_rect_snappoints(SPItem const *item, std::vector<Inkscape::SnapCan
SPRect *rect = SP_RECT(item);
- Geom::Matrix const i2d (sp_item_i2d_affine (item));
+ Geom::Matrix const i2d (item->i2d_affine ());
Geom::Point p0 = Geom::Point(rect->x.computed, rect->y.computed) * i2d;
Geom::Point p1 = Geom::Point(rect->x.computed, rect->y.computed + rect->height.computed) * i2d;
@@ -601,13 +601,13 @@ sp_rect_convert_to_guides(SPItem *item) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (!prefs->getBool("/tools/shapes/rect/convertguides", true)) {
- sp_item_convert_to_guides(SP_ITEM(rect));
+ SP_ITEM(rect)->convert_to_guides();
return;
}
std::list<std::pair<Geom::Point, Geom::Point> > pts;
- Geom::Matrix const i2d (sp_item_i2d_affine(SP_ITEM(rect)));
+ Geom::Matrix const i2d (SP_ITEM(rect)->i2d_affine());
Geom::Point A1(Geom::Point(rect->x.computed, rect->y.computed) * i2d);
Geom::Point A2(Geom::Point(rect->x.computed, rect->y.computed + rect->height.computed) * i2d);
diff --git a/src/sp-rect.h b/src/sp-rect.h
index 9a97bc217..09d96739b 100644
--- a/src/sp-rect.h
+++ b/src/sp-rect.h
@@ -1,11 +1,12 @@
-#ifndef __SP_RECT_H__
-#define __SP_RECT_H__
+#ifndef SEEN_SP_RECT_H
+#define SEEN_SP_RECT_H
/*
* SVG <rect> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -64,4 +65,15 @@ gdouble sp_rect_get_visible_height (SPRect *rect);
void sp_rect_compensate_rxry (SPRect *rect, Geom::Matrix xform);
-#endif
+#endif // SEEN_SP_RECT_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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/sp-root.cpp b/src/sp-root.cpp
index 9cde3a656..40287f3d8 100644
--- a/src/sp-root.cpp
+++ b/src/sp-root.cpp
@@ -1,11 +1,11 @@
-#define __SP_ROOT_C__
-
/** \file
* SVG \<svg\> implementation.
*/
/*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -141,26 +141,27 @@ sp_root_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
SPGroup *group = (SPGroup *) object;
SPRoot *root = (SPRoot *) object;
- if ( !object->repr->attribute("version") ) {
+ //XML Tree being used directly here while it shouldn't be.
+ if ( !object->getRepr()->attribute("version") ) {
repr->setAttribute("version", SVG_VERSION);
}
- sp_object_read_attr(object, "version");
- sp_object_read_attr(object, "inkscape:version");
+ object->readAttr( "version" );
+ object->readAttr( "inkscape:version" );
/* It is important to parse these here, so objects will have viewport build-time */
- 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, "viewBox");
- sp_object_read_attr(object, "preserveAspectRatio");
- sp_object_read_attr(object, "onload");
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "width" );
+ object->readAttr( "height" );
+ object->readAttr( "viewBox" );
+ object->readAttr( "preserveAspectRatio" );
+ object->readAttr( "onload" );
if (((SPObjectClass *) parent_class)->build)
(* ((SPObjectClass *) parent_class)->build) (object, document, repr);
- /* Search for first <defs> node */
- for (SPObject *o = sp_object_first_child(SP_OBJECT(group)) ; o != NULL; o = SP_OBJECT_NEXT(o) ) {
+ // Search for first <defs> node
+ for (SPObject *o = group->firstChild() ; o ; o = o->getNext() ) {
if (SP_IS_DEFS(o)) {
root->defs = SP_DEFS(o);
break;
@@ -340,22 +341,21 @@ sp_root_set(SPObject *object, unsigned int key, gchar const *value)
* This routine is for adding a child SVG object to an SPRoot object.
* The SPRoot object is taken to be an SPGroup.
*/
-static void
-sp_root_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
+static void sp_root_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
{
SPRoot *root = (SPRoot *) object;
SPGroup *group = (SPGroup *) object;
- if (((SPObjectClass *) (parent_class))->child_added)
+ if (((SPObjectClass *) (parent_class))->child_added) {
(* ((SPObjectClass *) (parent_class))->child_added)(object, child, ref);
+ }
SPObject *co = object->document->getObjectByRepr(child);
g_assert (co != NULL || !strcmp("comment", child->name())); // comment repr node has no object
if (co && SP_IS_DEFS(co)) {
- SPObject *c;
- /* We search for first <defs> node - it is not beautiful, but works */
- for (c = sp_object_first_child(SP_OBJECT(group)) ; c != NULL; c = SP_OBJECT_NEXT(c) ) {
+ // We search for first <defs> node - it is not beautiful, but works
+ for (SPObject *c = group->firstChild() ; c ; c = c->getNext() ) {
if (SP_IS_DEFS(c)) {
root->defs = SP_DEFS(c);
break;
@@ -372,9 +372,9 @@ static void sp_root_remove_child(SPObject *object, Inkscape::XML::Node *child)
SPRoot *root = (SPRoot *) object;
if ( root->defs && SP_OBJECT_REPR(root->defs) == child ) {
- SPObject *iter;
- /* We search for first remaining <defs> node - it is not beautiful, but works */
- for ( iter = sp_object_first_child(object) ; iter ; iter = SP_OBJECT_NEXT(iter) ) {
+ SPObject *iter = 0;
+ // We search for first remaining <defs> node - it is not beautiful, but works
+ for ( iter = object->firstChild() ; iter ; iter = iter->getNext() ) {
if ( SP_IS_DEFS(iter) && (SPDefs *)iter != root->defs ) {
root->defs = (SPDefs *)iter;
break;
@@ -386,8 +386,9 @@ static void sp_root_remove_child(SPObject *object, Inkscape::XML::Node *child)
}
}
- if (((SPObjectClass *) (parent_class))->remove_child)
+ if (((SPObjectClass *) (parent_class))->remove_child) {
(* ((SPObjectClass *) (parent_class))->remove_child)(object, child);
+ }
}
/**
@@ -561,7 +562,7 @@ sp_root_modified(SPObject *object, guint flags)
/* fixme: (Lauris) */
if (!object->parent && (flags & SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
- sp_document_resized_signal_emit (SP_OBJECT_DOCUMENT(root), root->width.computed, root->height.computed);
+ SP_OBJECT_DOCUMENT(root)->emitResizedSignal(root->width.computed, root->height.computed);
}
}
diff --git a/src/sp-script.cpp b/src/sp-script.cpp
index ad41b8021..3b6a8796d 100644
--- a/src/sp-script.cpp
+++ b/src/sp-script.cpp
@@ -1,10 +1,10 @@
-#define __SP_SCRIPT_C__
-
/*
* SVG <script> implementation
*
* Authors:
* Felipe Corrêa da Silva Sanches <juca@members.fsf.org>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008 authors
*
@@ -83,16 +83,16 @@ sp_script_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
}
//Read values of key attributes from XML nodes into object.
- sp_object_read_attr(object, "xlink:href");
+ object->readAttr( "xlink:href" );
- sp_document_add_resource(document, "script", object);
+ document->addResource("script", object);
}
static void sp_script_release(SPObject *object)
{
if (SP_OBJECT_DOCUMENT(object)) {
/* Unregister ourselves */
- sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "script", SP_OBJECT(object));
+ SP_OBJECT_DOCUMENT(object)->removeResource("script", SP_OBJECT(object));
}
if (((SPObjectClass *) parent_class)->release)
@@ -139,9 +139,11 @@ TODO:
}
GSList *l = NULL;
- for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
- if (crepr) l = g_slist_prepend(l, crepr);
+ if (crepr) {
+ l = g_slist_prepend(l, crepr);
+ }
}
while (l) {
@@ -151,7 +153,7 @@ TODO:
}
} else {
- for ( SPObject *child = sp_object_first_child(object) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) {
child->updateRepr(flags);
}
}
diff --git a/src/sp-shape.cpp b/src/sp-shape.cpp
index 43e80a8ee..a2e8b52f4 100644
--- a/src/sp-shape.cpp
+++ b/src/sp-shape.cpp
@@ -3,11 +3,13 @@
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
* Copyright (C) 2004 John Cliff
* Copyright (C) 2007-2008 Johan Engelen
+ * Copyright (C) 2010 Jon A. Cruz <jon@joncruz.org>
*
* Released under GNU GPL, read the file 'COPYING' for more information
*/
@@ -51,40 +53,21 @@
#define noSHAPE_VERBOSE
-static void sp_shape_class_init (SPShapeClass *klass);
-static void sp_shape_init (SPShape *shape);
-static void sp_shape_finalize (GObject *object);
-
-static void sp_shape_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * repr);
-static void sp_shape_release (SPObject *object);
-
-static void sp_shape_set(SPObject *object, unsigned key, gchar const *value);
-static void sp_shape_update (SPObject *object, SPCtx *ctx, unsigned int flags);
-static void sp_shape_modified (SPObject *object, unsigned int flags);
-static Inkscape::XML::Node *sp_shape_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-
-static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, unsigned const flags);
void sp_shape_print (SPItem * item, SPPrintContext * ctx);
-static NRArenaItem *sp_shape_show (SPItem *item, NRArena *arena, unsigned int key, unsigned int flags);
-static void sp_shape_hide (SPItem *item, unsigned int key);
-static void sp_shape_snappoints (SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs);
-
-static void sp_shape_update_marker_view (SPShape *shape, NRArenaItem *ai);
-static SPLPEItemClass *parent_class;
+SPLPEItemClass * SPShapeClass::parent_class = 0;
/**
* Registers the SPShape class with Gdk and returns its type number.
*/
-GType
-sp_shape_get_type (void)
+GType SPShape::getType(void)
{
static GType type = 0;
if (!type) {
GTypeInfo info = {
sizeof (SPShapeClass),
NULL, NULL,
- (GClassInitFunc) sp_shape_class_init,
+ (GClassInitFunc) SPShapeClass::sp_shape_class_init,
NULL, NULL,
sizeof (SPShape),
16,
@@ -100,8 +83,7 @@ sp_shape_get_type (void)
* Initializes a SPShapeClass object. Establishes the function pointers to the class'
* member routines in the class vtable, and sets pointers to parent classes.
*/
-static void
-sp_shape_class_init (SPShapeClass *klass)
+void SPShapeClass::sp_shape_class_init(SPShapeClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
SPObjectClass *sp_object_class = SP_OBJECT_CLASS(klass);
@@ -110,20 +92,20 @@ sp_shape_class_init (SPShapeClass *klass)
parent_class = (SPLPEItemClass *)g_type_class_peek_parent (klass);
- gobject_class->finalize = sp_shape_finalize;
+ gobject_class->finalize = SPShape::sp_shape_finalize;
- sp_object_class->build = sp_shape_build;
- sp_object_class->release = sp_shape_release;
- sp_object_class->set = sp_shape_set;
- sp_object_class->update = sp_shape_update;
- sp_object_class->modified = sp_shape_modified;
- sp_object_class->write = sp_shape_write;
+ sp_object_class->build = SPShape::sp_shape_build;
+ sp_object_class->release = SPShape::sp_shape_release;
+ sp_object_class->set = SPShape::sp_shape_set;
+ sp_object_class->update = SPShape::sp_shape_update;
+ sp_object_class->modified = SPShape::sp_shape_modified;
+ sp_object_class->write = SPShape::sp_shape_write;
- item_class->bbox = sp_shape_bbox;
+ item_class->bbox = SPShape::sp_shape_bbox;
item_class->print = sp_shape_print;
- item_class->show = sp_shape_show;
- item_class->hide = sp_shape_hide;
- item_class->snappoints = sp_shape_snappoints;
+ item_class->show = SPShape::sp_shape_show;
+ item_class->hide = SPShape::sp_shape_hide;
+ item_class->snappoints = SPShape::sp_shape_snappoints;
lpe_item_class->update_patheffect = NULL;
klass->set_shape = NULL;
@@ -132,8 +114,7 @@ sp_shape_class_init (SPShapeClass *klass)
/**
* Initializes an SPShape object.
*/
-static void
-sp_shape_init (SPShape *shape)
+void SPShape::sp_shape_init(SPShape *shape)
{
for ( int i = 0 ; i < SP_MARKER_LOC_QTY ; i++ ) {
new (&shape->release_connect[i]) sigc::connection();
@@ -143,8 +124,7 @@ sp_shape_init (SPShape *shape)
shape->curve = NULL;
}
-static void
-sp_shape_finalize (GObject *object)
+void SPShape::sp_shape_finalize(GObject *object)
{
SPShape *shape=(SPShape *)object;
@@ -155,8 +135,8 @@ sp_shape_finalize (GObject *object)
shape->modified_connect[i].~connection();
}
- if (((GObjectClass *) (parent_class))->finalize) {
- (* ((GObjectClass *) (parent_class))->finalize)(object);
+ if (((GObjectClass *) (SPShapeClass::parent_class))->finalize) {
+ (* ((GObjectClass *) (SPShapeClass::parent_class))->finalize)(object);
}
}
@@ -167,11 +147,10 @@ sp_shape_finalize (GObject *object)
*
* \see sp_object_build()
*/
-static void
-sp_shape_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+void SPShape::sp_shape_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
{
- if (((SPObjectClass *) (parent_class))->build) {
- (*((SPObjectClass *) (parent_class))->build) (object, document, repr);
+ if (((SPObjectClass *) (SPShapeClass::parent_class))->build) {
+ (*((SPObjectClass *) (SPShapeClass::parent_class))->build) (object, document, repr);
}
for (int i = 0 ; i < SP_MARKER_LOC_QTY ; i++) {
@@ -189,8 +168,7 @@ sp_shape_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
*
* \see sp_object_release()
*/
-static void
-sp_shape_release (SPObject *object)
+void SPShape::sp_shape_release(SPObject *object)
{
SPItem *item;
SPShape *shape;
@@ -214,26 +192,24 @@ sp_shape_release (SPObject *object)
shape->curve = shape->curve->unref();
}
- if (((SPObjectClass *) parent_class)->release) {
- ((SPObjectClass *) parent_class)->release (object);
+ if (((SPObjectClass *) SPShapeClass::parent_class)->release) {
+ ((SPObjectClass *) SPShapeClass::parent_class)->release (object);
}
}
-static void
-sp_shape_set(SPObject *object, unsigned int key, gchar const *value)
+void SPShape::sp_shape_set(SPObject *object, unsigned int key, gchar const *value)
{
- if (((SPObjectClass *) parent_class)->set) {
- ((SPObjectClass *) parent_class)->set(object, key, value);
+ if (((SPObjectClass *) SPShapeClass::parent_class)->set) {
+ ((SPObjectClass *) SPShapeClass::parent_class)->set(object, key, value);
}
}
-static Inkscape::XML::Node *
-sp_shape_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
+Inkscape::XML::Node * SPShape::sp_shape_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
{
- if (((SPObjectClass *)(parent_class))->write) {
- ((SPObjectClass *)(parent_class))->write(object, doc, repr, flags);
+ if (((SPObjectClass *)(SPShapeClass::parent_class))->write) {
+ ((SPObjectClass *)(SPShapeClass::parent_class))->write(object, doc, repr, flags);
}
return repr;
@@ -243,14 +219,13 @@ sp_shape_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::No
* Updates the shape when its attributes have changed. Also establishes
* marker objects to match the style settings.
*/
-static void
-sp_shape_update (SPObject *object, SPCtx *ctx, unsigned int flags)
+void SPShape::sp_shape_update(SPObject *object, SPCtx *ctx, unsigned int flags)
{
SPItem *item = (SPItem *) object;
SPShape *shape = (SPShape *) object;
- if (((SPObjectClass *) (parent_class))->update) {
- (* ((SPObjectClass *) (parent_class))->update) (object, ctx, flags);
+ if (((SPObjectClass *) (SPShapeClass::parent_class))->update) {
+ (* ((SPObjectClass *) (SPShapeClass::parent_class))->update) (object, ctx, flags);
}
/* This stanza checks that an object's marker style agrees with
@@ -290,17 +265,17 @@ sp_shape_update (SPObject *object, SPCtx *ctx, unsigned int flags)
}
}
- if (sp_shape_has_markers (shape)) {
+ if (shape->hasMarkers ()) {
/* Dimension marker views */
for (SPItemView *v = item->display; v != NULL; v = v->next) {
if (!v->arenaitem->key) {
- NR_ARENA_ITEM_SET_KEY (v->arenaitem, sp_item_display_key_new (SP_MARKER_LOC_QTY));
+ NR_ARENA_ITEM_SET_KEY (v->arenaitem, SPItem::display_key_new (SP_MARKER_LOC_QTY));
}
for (int i = 0 ; i < SP_MARKER_LOC_QTY ; i++) {
if (shape->marker[i]) {
sp_marker_show_dimension ((SPMarker *) shape->marker[i],
NR_ARENA_ITEM_GET_KEY (v->arenaitem) + i,
- sp_shape_number_of_markers (shape, i));
+ shape->numberOfMarkers (i));
}
}
}
@@ -328,8 +303,7 @@ sp_shape_update (SPObject *object, SPCtx *ctx, unsigned int flags)
* Reference for behaviour of zero-length segments:
* http://www.w3.org/TR/SVG11/implnote.html#PathElementImplementationNotes
*/
-Geom::Matrix
-sp_shape_marker_get_transform(Geom::Curve const & c1, Geom::Curve const & c2)
+Geom::Matrix sp_shape_marker_get_transform(Geom::Curve const & c1, Geom::Curve const & c2)
{
Geom::Point p = c1.pointAt(1);
Geom::Curve * c1_reverse = c1.reverse();
@@ -355,8 +329,8 @@ sp_shape_marker_get_transform(Geom::Curve const & c1, Geom::Curve const & c2)
return Geom::Rotate(ret_angle) * Geom::Translate(p);
}
-Geom::Matrix
-sp_shape_marker_get_transform_at_start(Geom::Curve const & c)
+
+Geom::Matrix sp_shape_marker_get_transform_at_start(Geom::Curve const & c)
{
Geom::Point p = c.pointAt(0);
Geom::Matrix ret = Geom::Translate(p);
@@ -372,8 +346,8 @@ sp_shape_marker_get_transform_at_start(Geom::Curve const & c)
return ret;
}
-Geom::Matrix
-sp_shape_marker_get_transform_at_end(Geom::Curve const & c)
+
+Geom::Matrix sp_shape_marker_get_transform_at_end(Geom::Curve const & c)
{
Geom::Point p = c.pointAt(1);
Geom::Matrix ret = Geom::Translate(p);
@@ -399,8 +373,7 @@ sp_shape_marker_get_transform_at_end(Geom::Curve const & c)
*
* @todo figure out what to do when both 'marker' and for instance 'marker-end' are set.
*/
-static void
-sp_shape_update_marker_view (SPShape *shape, NRArenaItem *ai)
+void SPShape::sp_shape_update_marker_view(SPShape *shape, NRArenaItem *ai)
{
SPStyle *style = ((SPObject *) shape)->style;
@@ -510,13 +483,12 @@ sp_shape_update_marker_view (SPShape *shape, NRArenaItem *ai)
/**
* Sets modified flag for all sub-item views.
*/
-static void
-sp_shape_modified (SPObject *object, unsigned int flags)
+void SPShape::sp_shape_modified(SPObject *object, unsigned int flags)
{
SPShape *shape = SP_SHAPE (object);
- if (((SPObjectClass *) (parent_class))->modified) {
- (* ((SPObjectClass *) (parent_class))->modified) (object, flags);
+ if (((SPObjectClass *) (SPShapeClass::parent_class))->modified) {
+ (* ((SPObjectClass *) (SPShapeClass::parent_class))->modified) (object, flags);
}
if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) {
@@ -530,7 +502,7 @@ sp_shape_modified (SPObject *object, unsigned int flags)
* Calculates the bounding box for item, storing it into bbox.
* This also includes the bounding boxes of any markers included in the shape.
*/
-static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, unsigned const flags)
+void SPShape::sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, unsigned const flags)
{
SPShape const *shape = SP_SHAPE (item);
if (shape->curve) {
@@ -584,7 +556,7 @@ static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &
}
// Union with bboxes of the markers, if any
- if (sp_shape_has_markers (shape) && !shape->curve->get_pathvector().empty()) {
+ if ( shape->hasMarkers() && !shape->curve->get_pathvector().empty() ) {
/** \todo make code prettier! */
Geom::PathVector const & pathv = shape->curve->get_pathvector();
// START marker
@@ -608,7 +580,7 @@ static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &
// get bbox of the marker with that transform
NRRect marker_bbox;
- sp_item_invoke_bbox (marker_item, &marker_bbox, tr, true);
+ marker_item->invoke_bbox ( &marker_bbox, tr, true);
// union it with the shape bbox
nr_rect_d_union (&cbbox, &cbbox, &marker_bbox);
}
@@ -636,7 +608,7 @@ static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &
}
tr = marker_item->transform * marker->c2p * tr * transform;
NRRect marker_bbox;
- sp_item_invoke_bbox (marker_item, &marker_bbox, tr, true);
+ marker_item->invoke_bbox ( &marker_bbox, tr, true);
nr_rect_d_union (&cbbox, &cbbox, &marker_bbox);
}
// MID position
@@ -663,7 +635,7 @@ static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &
}
tr = marker_item->transform * marker->c2p * tr * transform;
NRRect marker_bbox;
- sp_item_invoke_bbox (marker_item, &marker_bbox, tr, true);
+ marker_item->invoke_bbox ( &marker_bbox, tr, true);
nr_rect_d_union (&cbbox, &cbbox, &marker_bbox);
}
@@ -684,7 +656,7 @@ static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &
}
tr = marker_item->transform * marker->c2p * tr * transform;
NRRect marker_bbox;
- sp_item_invoke_bbox (marker_item, &marker_bbox, tr, true);
+ marker_item->invoke_bbox ( &marker_bbox, tr, true);
nr_rect_d_union (&cbbox, &cbbox, &marker_bbox);
}
}
@@ -719,7 +691,7 @@ static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &
// get bbox of the marker with that transform
NRRect marker_bbox;
- sp_item_invoke_bbox (marker_item, &marker_bbox, tr, true);
+ marker_item->invoke_bbox ( &marker_bbox, tr, true);
// union it with the shape bbox
nr_rect_d_union (&cbbox, &cbbox, &marker_bbox);
}
@@ -748,7 +720,7 @@ sp_shape_print_invoke_marker_printing(SPObject* obj, Geom::Matrix tr, SPStyle* s
Geom::Matrix old_tr = marker_item->transform;
marker_item->transform = tr;
- sp_item_invoke_print (marker_item, ctx);
+ marker_item->invoke_print (ctx);
marker_item->transform = old_tr;
}
/**
@@ -779,13 +751,13 @@ sp_shape_print (SPItem *item, SPPrintContext *ctx)
}
/* fixme: Think (Lauris) */
- sp_item_invoke_bbox(item, &pbox, Geom::identity(), TRUE);
+ item->invoke_bbox( &pbox, Geom::identity(), TRUE);
dbox.x0 = 0.0;
dbox.y0 = 0.0;
- dbox.x1 = sp_document_width (SP_OBJECT_DOCUMENT (item));
- dbox.y1 = sp_document_height (SP_OBJECT_DOCUMENT (item));
- sp_item_bbox_desktop (item, &bbox);
- Geom::Matrix const i2d(sp_item_i2d_affine(item));
+ dbox.x1 = SP_OBJECT_DOCUMENT (item)->getWidth ();
+ dbox.y1 = SP_OBJECT_DOCUMENT (item)->getHeight ();
+ item->getBboxDesktop (&bbox);
+ Geom::Matrix const i2d(item->i2d_affine());
SPStyle* style = SP_OBJECT_STYLE (item);
@@ -872,8 +844,7 @@ sp_shape_print (SPItem *item, SPPrintContext *ctx)
/**
* Sets style, path, and paintbox. Updates marker views, including dimensions.
*/
-static NRArenaItem *
-sp_shape_show (SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int /*flags*/)
+NRArenaItem * SPShape::sp_shape_show(SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int /*flags*/)
{
SPObject *object = SP_OBJECT(item);
SPShape *shape = SP_SHAPE(item);
@@ -896,18 +867,18 @@ sp_shape_show (SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int
sp_shape_set_marker (object, i, object->style->marker[i].value);
}
- if (sp_shape_has_markers (shape)) {
+ if (shape->hasMarkers ()) {
/* provide key and dimension the marker views */
if (!arenaitem->key) {
- NR_ARENA_ITEM_SET_KEY (arenaitem, sp_item_display_key_new (SP_MARKER_LOC_QTY));
+ NR_ARENA_ITEM_SET_KEY (arenaitem, SPItem::display_key_new (SP_MARKER_LOC_QTY));
}
for (int i = 0; i < SP_MARKER_LOC_QTY; i++) {
if (shape->marker[i]) {
sp_marker_show_dimension ((SPMarker *) shape->marker[i],
NR_ARENA_ITEM_GET_KEY (arenaitem) + i,
- sp_shape_number_of_markers (shape, i));
+ shape->numberOfMarkers (i));
}
}
@@ -921,8 +892,7 @@ sp_shape_show (SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int
/**
* Hides/removes marker views from the shape.
*/
-static void
-sp_shape_hide (SPItem *item, unsigned int key)
+void SPShape::sp_shape_hide(SPItem *item, unsigned int key)
{
SPShape *shape;
SPItemView *v;
@@ -941,8 +911,8 @@ sp_shape_hide (SPItem *item, unsigned int key)
}
}
- if (((SPItemClass *) parent_class)->hide) {
- ((SPItemClass *) parent_class)->hide (item, key);
+ if (((SPItemClass *) SPShapeClass::parent_class)->hide) {
+ ((SPItemClass *) SPShapeClass::parent_class)->hide (item, key);
}
}
@@ -950,19 +920,18 @@ sp_shape_hide (SPItem *item, unsigned int key)
* \param shape Shape.
* \return TRUE if the shape has any markers, or FALSE if not.
*/
-int
-sp_shape_has_markers (SPShape const *shape)
+int SPShape::hasMarkers() const
{
/* Note, we're ignoring 'marker' settings, which technically should apply for
all three settings. This should be fixed later such that if 'marker' is
specified, then all three should appear. */
return (
- shape->curve &&
- (shape->marker[SP_MARKER_LOC] ||
- shape->marker[SP_MARKER_LOC_START] ||
- shape->marker[SP_MARKER_LOC_MID] ||
- shape->marker[SP_MARKER_LOC_END])
+ this->curve &&
+ (this->marker[SP_MARKER_LOC] ||
+ this->marker[SP_MARKER_LOC_START] ||
+ this->marker[SP_MARKER_LOC_MID] ||
+ this->marker[SP_MARKER_LOC_END])
);
}
@@ -972,10 +941,9 @@ sp_shape_has_markers (SPShape const *shape)
* \param type Marker type (e.g. SP_MARKER_LOC_START)
* \return Number of markers that the shape has of this type.
*/
-int
-sp_shape_number_of_markers (SPShape *shape, int type)
+int SPShape::numberOfMarkers(int type)
{
- Geom::PathVector const & pathv = shape->curve->get_pathvector();
+ Geom::PathVector const & pathv = this->curve->get_pathvector();
if (pathv.size() == 0) {
return 0;
}
@@ -983,7 +951,7 @@ sp_shape_number_of_markers (SPShape *shape, int type)
switch(type) {
case SP_MARKER_LOC:
{
- if ( shape->marker[SP_MARKER_LOC] ) {
+ if ( this->marker[SP_MARKER_LOC] ) {
guint n = 0;
for(Geom::PathVector::const_iterator path_it = pathv.begin(); path_it != pathv.end(); ++path_it) {
n += path_it->size_default() + 1;
@@ -995,11 +963,11 @@ sp_shape_number_of_markers (SPShape *shape, int type)
}
case SP_MARKER_LOC_START:
// there is only a start marker on the first path of a pathvector
- return shape->marker[SP_MARKER_LOC_START] ? 1 : 0;
+ return this->marker[SP_MARKER_LOC_START] ? 1 : 0;
case SP_MARKER_LOC_MID:
{
- if ( shape->marker[SP_MARKER_LOC_MID] ) {
+ if ( this->marker[SP_MARKER_LOC_MID] ) {
guint n = 0;
for(Geom::PathVector::const_iterator path_it = pathv.begin(); path_it != pathv.end(); ++path_it) {
n += path_it->size_default() + 1;
@@ -1013,7 +981,7 @@ sp_shape_number_of_markers (SPShape *shape, int type)
case SP_MARKER_LOC_END:
{
// there is only an end marker on the last path of a pathvector
- return shape->marker[SP_MARKER_LOC_END] ? 1 : 0;
+ return this->marker[SP_MARKER_LOC_END] ? 1 : 0;
}
default:
@@ -1058,7 +1026,7 @@ static void
sp_shape_marker_modified (SPObject */*marker*/, guint /*flags*/, SPItem */*item*/)
{
/* I think mask does update automagically */
- /* g_warning ("Item %s mask %s modified", SP_OBJECT_ID (item), SP_OBJECT_ID (mask)); */
+ /* g_warning ("Item %s mask %s modified", item->getId(), mask->getId()); */
}
/**
@@ -1113,14 +1081,10 @@ sp_shape_set_marker (SPObject *object, unsigned int key, const gchar *value)
/**
* Calls any registered handlers for the set_shape action
*/
-void
-sp_shape_set_shape (SPShape *shape)
+void SPShape::setShape()
{
- g_return_if_fail (shape != NULL);
- g_return_if_fail (SP_IS_SHAPE (shape));
-
- if (SP_SHAPE_CLASS (G_OBJECT_GET_CLASS (shape))->set_shape) {
- SP_SHAPE_CLASS (G_OBJECT_GET_CLASS (shape))->set_shape (shape);
+ if (SP_SHAPE_CLASS (G_OBJECT_GET_CLASS (this))->set_shape) {
+ SP_SHAPE_CLASS (G_OBJECT_GET_CLASS (this))->set_shape (this);
}
}
@@ -1130,30 +1094,28 @@ sp_shape_set_shape (SPShape *shape)
* Any existing curve in the shape will be unreferenced first.
* This routine also triggers a request to update the display.
*/
-void
-sp_shape_set_curve (SPShape *shape, SPCurve *curve, unsigned int owner)
+void SPShape::setCurve(SPCurve *curve, unsigned int owner)
{
- if (shape->curve) {
- shape->curve = shape->curve->unref();
+ if (this->curve) {
+ this->curve = this->curve->unref();
}
if (curve) {
if (owner) {
- shape->curve = curve->ref();
+ this->curve = curve->ref();
} else {
- shape->curve = curve->copy();
+ this->curve = curve->copy();
}
}
- SP_OBJECT(shape)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ SP_OBJECT(this)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
/**
* Return duplicate of curve (if any exists) or NULL if there is no curve
*/
-SPCurve *
-sp_shape_get_curve (SPShape *shape)
+SPCurve * SPShape::getCurve()
{
- if (shape->curve) {
- return shape->curve->copy();
+ if (this->curve) {
+ return this->curve->copy();
}
return NULL;
}
@@ -1161,17 +1123,16 @@ sp_shape_get_curve (SPShape *shape)
/**
* Same as sp_shape_set_curve but without updating the display
*/
-void
-sp_shape_set_curve_insync (SPShape *shape, SPCurve *curve, unsigned int owner)
+void SPShape::setCurveInsync(SPCurve *curve, unsigned int owner)
{
- if (shape->curve) {
- shape->curve = shape->curve->unref();
+ if (this->curve) {
+ this->curve = this->curve->unref();
}
if (curve) {
if (owner) {
- shape->curve = curve->ref();
+ this->curve = curve->ref();
} else {
- shape->curve = curve->copy();
+ this->curve = curve->copy();
}
}
}
@@ -1179,7 +1140,7 @@ sp_shape_set_curve_insync (SPShape *shape, SPCurve *curve, unsigned int owner)
/**
* Return all nodes in a path that are to be considered for snapping
*/
-static void sp_shape_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs)
+void SPShape::sp_shape_snappoints(SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs)
{
g_assert(item != NULL);
g_assert(SP_IS_SHAPE(item));
@@ -1198,10 +1159,10 @@ static void sp_shape_snappoints(SPItem const *item, std::vector<Inkscape::SnapCa
if (pathv.empty())
return;
- Geom::Matrix const i2d (sp_item_i2d_affine (item));
+ Geom::Matrix const i2d (item->i2d_affine ());
if (snapprefs->getSnapObjectMidpoints()) {
- Geom::OptRect bbox = item->getBounds(sp_item_i2d_affine(item));
+ Geom::OptRect bbox = item->getBounds(item->i2d_affine());
if (bbox) {
p.push_back(Inkscape::SnapCandidatePoint(bbox->midpoint(), Inkscape::SNAPSOURCE_OBJECT_MIDPOINT, Inkscape::SNAPTARGET_OBJECT_MIDPOINT));
}
diff --git a/src/sp-shape.h b/src/sp-shape.h
index 4b1ded236..78855c1c7 100644
--- a/src/sp-shape.h
+++ b/src/sp-shape.h
@@ -1,11 +1,13 @@
-#ifndef __SP_SHAPE_H__
-#define __SP_SHAPE_H__
+#ifndef SEEN_SP_SHAPE_H
+#define SEEN_SP_SHAPE_H
/*
* Base class for shapes, including <path> element
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -21,7 +23,7 @@
#include <sigc++/connection.h>
-#define SP_TYPE_SHAPE (sp_shape_get_type ())
+#define SP_TYPE_SHAPE (SPShape::getType ())
#define SP_SHAPE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SHAPE, SPShape))
#define SP_SHAPE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_SHAPE, SPShapeClass))
#define SP_IS_SHAPE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SHAPE))
@@ -31,41 +33,75 @@
struct SPDesktop;
-struct SPShape : public SPLPEItem {
+class SPShape : public SPLPEItem {
+public:
SPCurve *curve;
- SPObject *marker[SP_MARKER_LOC_QTY];
- sigc::connection release_connect [SP_MARKER_LOC_QTY];
- sigc::connection modified_connect [SP_MARKER_LOC_QTY];
-};
+ SPObject *marker[SP_MARKER_LOC_QTY];
+ sigc::connection release_connect [SP_MARKER_LOC_QTY];
+ sigc::connection modified_connect [SP_MARKER_LOC_QTY];
+
+ static GType getType (void);
+ void setShape ();
+ SPCurve * getCurve ();
+ void setCurve (SPCurve *curve, unsigned int owner);
+ void setCurveInsync (SPCurve *curve, unsigned int owner);
+ int hasMarkers () const;
+ int numberOfMarkers (int type);
-struct SPShapeClass {
- SPLPEItemClass item_class;
+private:
+ static void sp_shape_init (SPShape *shape);
+ static void sp_shape_finalize (GObject *object);
- /* Build bpath from extra shape attributes */
- void (* set_shape) (SPShape *shape);
-};
+ static void sp_shape_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * repr);
+ static void sp_shape_release (SPObject *object);
+
+ static void sp_shape_set(SPObject *object, unsigned key, gchar const *value);
+ static void sp_shape_update (SPObject *object, SPCtx *ctx, unsigned int flags);
+ static void sp_shape_modified (SPObject *object, unsigned int flags);
+ static Inkscape::XML::Node *sp_shape_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
-GType sp_shape_get_type (void);
+ static void sp_shape_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, unsigned const flags);
+ static NRArenaItem *sp_shape_show (SPItem *item, NRArena *arena, unsigned int key, unsigned int flags);
+ static void sp_shape_hide (SPItem *item, unsigned int key);
+ static void sp_shape_snappoints (SPItem const *item, std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs);
-void sp_shape_set_shape (SPShape *shape);
+ static void sp_shape_update_marker_view (SPShape *shape, NRArenaItem *ai);
-/* Return duplicate of curve or NULL */
-SPCurve *sp_shape_get_curve (SPShape *shape);
-// sets a curve, updates display
-void sp_shape_set_curve (SPShape *shape, SPCurve *curve, unsigned int owner);
-// same as sp_shape_set_curve, but without updating display
-void sp_shape_set_curve_insync (SPShape *shape, SPCurve *curve, unsigned int owner);
+ friend class SPShapeClass;
+};
+
+class SPShapeClass {
+public:
+ SPLPEItemClass item_class;
+
+ /* Build bpath from extra shape attributes */
+ void (* set_shape) (SPShape *shape);
+
+private:
+ static SPLPEItemClass *parent_class;
+ static void sp_shape_class_init (SPShapeClass *klass);
+
+ friend class SPShape;
+};
-// markers API
void sp_shape_set_marker (SPObject *object, unsigned int key, const gchar *value);
-int sp_shape_has_markers (SPShape const *shape);
-int sp_shape_number_of_markers (SPShape* Shape, int type);
Geom::Matrix sp_shape_marker_get_transform(Geom::Curve const & c1, Geom::Curve const & c2);
Geom::Matrix sp_shape_marker_get_transform_at_start(Geom::Curve const & c);
Geom::Matrix sp_shape_marker_get_transform_at_end(Geom::Curve const & c);
-#endif
+#endif // SEEN_SP_SHAPE_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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/sp-skeleton.cpp b/src/sp-skeleton.cpp
index 329df8eb6..42fc5289f 100644
--- a/src/sp-skeleton.cpp
+++ b/src/sp-skeleton.cpp
@@ -1,5 +1,3 @@
-#define __SP_SKELETON_CPP__
-
/** \file
* SVG <skeleton> implementation, used as an example for a base starting class
* when implementing new sp-objects.
@@ -14,6 +12,7 @@
/*
* Authors:
* Kees Cook <kees@outflux.net>
+ * Abhishek Sharma
*
* Copyright (C) 2004 Kees Cook
*
@@ -110,18 +109,18 @@ sp_skeleton_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *r
/*
Pay attention to certain settings here
- sp_object_read_attr(object, "xlink:href");
- sp_object_read_attr(object, "attributeName");
- sp_object_read_attr(object, "attributeType");
- sp_object_read_attr(object, "begin");
- sp_object_read_attr(object, "dur");
- sp_object_read_attr(object, "end");
- sp_object_read_attr(object, "min");
- sp_object_read_attr(object, "max");
- sp_object_read_attr(object, "restart");
- sp_object_read_attr(object, "repeatCount");
- sp_object_read_attr(object, "repeatDur");
- sp_object_read_attr(object, "fill");
+ object->readAttr( "xlink:href" );
+ object->readAttr( "attributeName" );
+ object->readAttr( "attributeType" );
+ object->readAttr( "begin" );
+ object->readAttr( "dur" );
+ object->readAttr( "end" );
+ object->readAttr( "min" );
+ object->readAttr( "max" );
+ object->readAttr( "restart" );
+ object->readAttr( "repeatCount" );
+ object->readAttr( "repeatDur" );
+ object->readAttr( "fill" );
*/
}
diff --git a/src/sp-spiral.cpp b/src/sp-spiral.cpp
index c309c60cc..cfe02947a 100644
--- a/src/sp-spiral.cpp
+++ b/src/sp-spiral.cpp
@@ -1,5 +1,3 @@
-#define __SP_SPIRAL_C__
-
/** \file
* <sodipodi:spiral> implementation
*/
@@ -7,6 +5,7 @@
* Authors:
* Mitsuru Oka <oka326@parkcity.ne.jp>
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -129,13 +128,13 @@ sp_spiral_build (SPObject * object, SPDocument * document, Inkscape::XML::Node *
if (((SPObjectClass *) parent_class)->build)
((SPObjectClass *) parent_class)->build (object, document, repr);
- sp_object_read_attr (object, "sodipodi:cx");
- sp_object_read_attr (object, "sodipodi:cy");
- sp_object_read_attr (object, "sodipodi:expansion");
- sp_object_read_attr (object, "sodipodi:revolution");
- sp_object_read_attr (object, "sodipodi:radius");
- sp_object_read_attr (object, "sodipodi:argument");
- sp_object_read_attr (object, "sodipodi:t0");
+ object->readAttr( "sodipodi:cx" );
+ object->readAttr( "sodipodi:cy" );
+ object->readAttr( "sodipodi:expansion" );
+ object->readAttr( "sodipodi:revolution" );
+ object->readAttr( "sodipodi:radius" );
+ object->readAttr( "sodipodi:argument" );
+ object->readAttr( "sodipodi:t0" );
}
/**
@@ -287,7 +286,7 @@ static void
sp_spiral_update (SPObject *object, SPCtx *ctx, guint flags)
{
if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
- sp_shape_set_shape ((SPShape *) object);
+ ((SPShape *) object)->setShape ();
}
if (((SPObjectClass *) parent_class)->update)
@@ -427,7 +426,7 @@ sp_spiral_set_shape (SPShape *shape)
// unconditionally read the curve from d, if any, to preserve appearance
Geom::PathVector pv = sp_svg_read_pathv(SP_OBJECT_REPR(shape)->attribute("d"));
SPCurve *cold = new SPCurve(pv);
- sp_shape_set_curve_insync (shape, cold, TRUE);
+ shape->setCurveInsync( cold, TRUE);
cold->unref();
}
return;
@@ -470,12 +469,12 @@ sp_spiral_set_shape (SPShape *shape)
/* 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);
+ shape->setCurveInsync( 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);
+ shape->setCurveInsync( c_lpe, TRUE);
}
c_lpe->unref();
}
@@ -533,7 +532,7 @@ static void sp_spiral_snappoints(SPItem const *item, std::vector<Inkscape::SnapC
}
if (snapprefs->getSnapObjectMidpoints()) {
- Geom::Matrix const i2d (sp_item_i2d_affine (item));
+ Geom::Matrix const i2d (item->i2d_affine ());
SPSpiral *spiral = SP_SPIRAL(item);
p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(spiral->cx, spiral->cy) * i2d, Inkscape::SNAPSOURCE_OBJECT_MIDPOINT, Inkscape::SNAPTARGET_OBJECT_MIDPOINT));
// This point is the start-point of the spiral, which is also returned when _snap_to_itemnode has been set
diff --git a/src/sp-star.cpp b/src/sp-star.cpp
index ed7f7cf03..6b6914500 100644
--- a/src/sp-star.cpp
+++ b/src/sp-star.cpp
@@ -1,5 +1,3 @@
-#define __SP_STAR_C__
-
/*
* <sodipodi:star> implementation
*
@@ -7,6 +5,7 @@
* Mitsuru Oka <oka326@parkcity.ne.jp>
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -119,16 +118,16 @@ sp_star_build (SPObject * object, SPDocument * document, Inkscape::XML::Node * r
if (((SPObjectClass *) parent_class)->build)
((SPObjectClass *) parent_class)->build (object, document, repr);
- sp_object_read_attr (object, "sodipodi:cx");
- sp_object_read_attr (object, "sodipodi:cy");
- sp_object_read_attr (object, "sodipodi:sides");
- sp_object_read_attr (object, "sodipodi:r1");
- sp_object_read_attr (object, "sodipodi:r2");
- sp_object_read_attr (object, "sodipodi:arg1");
- sp_object_read_attr (object, "sodipodi:arg2");
- sp_object_read_attr (object, "inkscape:flatsided");
- sp_object_read_attr (object, "inkscape:rounded");
- sp_object_read_attr (object, "inkscape:randomized");
+ object->readAttr( "sodipodi:cx" );
+ object->readAttr( "sodipodi:cy" );
+ object->readAttr( "sodipodi:sides" );
+ object->readAttr( "sodipodi:r1" );
+ object->readAttr( "sodipodi:r2" );
+ object->readAttr( "sodipodi:arg1" );
+ object->readAttr( "sodipodi:arg2" );
+ object->readAttr( "inkscape:flatsided" );
+ object->readAttr( "inkscape:rounded" );
+ object->readAttr( "inkscape:randomized" );
}
static Inkscape::XML::Node *
@@ -271,7 +270,7 @@ sp_star_update (SPObject *object, SPCtx *ctx, guint flags)
if (flags & (SP_OBJECT_MODIFIED_FLAG |
SP_OBJECT_STYLE_MODIFIED_FLAG |
SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
- sp_shape_set_shape ((SPShape *) object);
+ ((SPShape *) object)->setShape ();
}
if (((SPObjectClass *) parent_class)->update)
@@ -440,7 +439,7 @@ sp_star_set_shape (SPShape *shape)
// unconditionally read the curve from d, if any, to preserve appearance
Geom::PathVector pv = sp_svg_read_pathv(SP_OBJECT_REPR(shape)->attribute("d"));
SPCurve *cold = new SPCurve(pv);
- sp_shape_set_curve_insync (shape, cold, TRUE);
+ shape->setCurveInsync( cold, TRUE);
cold->unref();
}
return;
@@ -510,12 +509,12 @@ sp_star_set_shape (SPShape *shape)
/* 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);
+ shape->setCurveInsync( 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);
+ shape->setCurveInsync( c_lpe, TRUE);
}
c_lpe->unref();
}
@@ -561,7 +560,7 @@ static void sp_star_snappoints(SPItem const *item, std::vector<Inkscape::SnapCan
}
if (snapprefs->getSnapObjectMidpoints()) {
- Geom::Matrix const i2d (sp_item_i2d_affine (item));
+ Geom::Matrix const i2d (item->i2d_affine ());
p.push_back(Inkscape::SnapCandidatePoint(SP_STAR(item)->center * i2d,Inkscape::SNAPSOURCE_OBJECT_MIDPOINT, Inkscape::SNAPTARGET_OBJECT_MIDPOINT));
}
}
diff --git a/src/sp-stop.cpp b/src/sp-stop.cpp
index 15fc93e2f..0c0a3b03a 100644
--- a/src/sp-stop.cpp
+++ b/src/sp-stop.cpp
@@ -69,7 +69,7 @@ SPColor SPStop::getEffectiveColor() const
{
SPColor ret;
if (currentColor) {
- char const *str = sp_object_get_style_property(this, "color", NULL);
+ char const *str = getStyleProperty("color", NULL);
/* Default value: arbitrarily black. (SVG1.1 and CSS2 both say that the initial
* value depends on user agent, and don't give any further restrictions that I can
* see.) */
diff --git a/src/sp-string.cpp b/src/sp-string.cpp
index b424ac3d8..c116e8dd8 100644
--- a/src/sp-string.cpp
+++ b/src/sp-string.cpp
@@ -1,10 +1,10 @@
-#define __SP_STRING_C__
-
/*
* SVG <text> and <tspan> implementation
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -116,12 +116,16 @@ sp_string_read_content(SPObject *object)
SPString *string = SP_STRING(object);
string->string.clear();
- gchar const *xml_string = string->repr->content();
+
+ //XML Tree being used directly here while it shouldn't be.
+ gchar const *xml_string = string->getRepr()->content();
// see algorithms described in svg 1.1 section 10.15
if (object->xml_space.value == SP_XML_SPACE_PRESERVE) {
for ( ; *xml_string ; xml_string = g_utf8_next_char(xml_string) ) {
gunichar c = g_utf8_get_char(xml_string);
- if (c == 0xa || c == 0xd || c == '\t') c = ' ';
+ if ((c == 0xa) || (c == 0xd) || (c == '\t')) {
+ c = ' ';
+ }
string->string += c;
}
}
@@ -129,17 +133,22 @@ sp_string_read_content(SPObject *object)
bool whitespace = false;
for ( ; *xml_string ; xml_string = g_utf8_next_char(xml_string) ) {
gunichar c = g_utf8_get_char(xml_string);
- if (c == 0xa || c == 0xd) continue;
- if (c == ' ' || c == '\t') whitespace = true;
- else {
- if (whitespace && (!string->string.empty() || SP_OBJECT_PREV(object) != NULL))
+ if ((c == 0xa) || (c == 0xd)) {
+ continue;
+ }
+ if ((c == ' ') || (c == '\t')) {
+ whitespace = true;
+ } else {
+ if (whitespace && (!string->string.empty() || (object->getPrev() != NULL))) {
string->string += ' ';
+ }
string->string += c;
whitespace = false;
}
}
- if (whitespace && SP_OBJECT_REPR(object)->next() != NULL) // can't use SP_OBJECT_NEXT() when the SPObject tree is still being built
+ if (whitespace && SP_OBJECT_REPR(object)->next() != NULL) { // can't use SPObject::getNext() when the SPObject tree is still being built
string->string += ' ';
+ }
}
object->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
diff --git a/src/sp-style-elem-test.h b/src/sp-style-elem-test.h
index 0c01136f6..7021be13d 100644
--- a/src/sp-style-elem-test.h
+++ b/src/sp-style-elem-test.h
@@ -1,4 +1,3 @@
-
#ifndef SEEN_SP_STYLE_ELEM_TEST_H
#define SEEN_SP_STYLE_ELEM_TEST_H
@@ -23,7 +22,7 @@ public:
{
if ( _doc )
{
- sp_document_unref( _doc );
+ _doc->doUnref();
}
}
@@ -56,16 +55,16 @@ public:
SPStyleElem *style_elem = static_cast<SPStyleElem *>(g_object_new(SP_TYPE_STYLE_ELEM, NULL));
SP_OBJECT(style_elem)->document = _doc;
- sp_object_set(SP_OBJECT(style_elem), SP_ATTR_TYPE, "something unrecognized");
+ SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "something unrecognized");
TS_ASSERT( !style_elem->is_css );
- sp_object_set(SP_OBJECT(style_elem), SP_ATTR_TYPE, "text/css");
+ SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "text/css");
TS_ASSERT( style_elem->is_css );
- sp_object_set(SP_OBJECT(style_elem), SP_ATTR_TYPE, "atext/css");
+ SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "atext/css");
TS_ASSERT( !style_elem->is_css );
- sp_object_set(SP_OBJECT(style_elem), SP_ATTR_TYPE, "text/cssx");
+ SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "text/cssx");
TS_ASSERT( !style_elem->is_css );
g_object_unref(style_elem);
@@ -74,17 +73,17 @@ public:
void testWrite()
{
TS_ASSERT( _doc );
- TS_ASSERT( sp_document_repr_doc(_doc) );
- if ( !sp_document_repr_doc(_doc) ) {
+ TS_ASSERT( _doc->getReprDoc() );
+ if ( !_doc->getReprDoc() ) {
return; // evil early return
}
SPStyleElem *style_elem = SP_STYLE_ELEM(g_object_new(SP_TYPE_STYLE_ELEM, NULL));
SP_OBJECT(style_elem)->document = _doc;
- sp_object_set(SP_OBJECT(style_elem), SP_ATTR_TYPE, "text/css");
- Inkscape::XML::Node *repr = sp_document_repr_doc(_doc)->createElement("svg:style");
- SP_OBJECT(style_elem)->updateRepr(sp_document_repr_doc(_doc), repr, SP_OBJECT_WRITE_ALL);
+ SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "text/css");
+ Inkscape::XML::Node *repr = _doc->getReprDoc()->createElement("svg:style");
+ SP_OBJECT(style_elem)->updateRepr(_doc->getReprDoc(), repr, SP_OBJECT_WRITE_ALL);
{
gchar const *typ = repr->attribute("type");
TS_ASSERT( typ != NULL );
@@ -100,15 +99,15 @@ public:
void testBuild()
{
TS_ASSERT( _doc );
- TS_ASSERT( sp_document_repr_doc(_doc) );
- if ( !sp_document_repr_doc(_doc) ) {
+ TS_ASSERT( _doc->getReprDoc() );
+ if ( !_doc->getReprDoc() ) {
return; // evil early return
}
SPStyleElem &style_elem = *SP_STYLE_ELEM(g_object_new(SP_TYPE_STYLE_ELEM, NULL));
- Inkscape::XML::Node *const repr = sp_document_repr_doc(_doc)->createElement("svg:style");
+ Inkscape::XML::Node *const repr = _doc->getReprDoc()->createElement("svg:style");
repr->setAttribute("type", "text/css");
- sp_object_invoke_build(&style_elem, _doc, repr, false);
+ (&style_elem)->invoke_build( _doc, repr, false);
TS_ASSERT( style_elem.is_css );
TS_ASSERT( style_elem.media.print );
TS_ASSERT( style_elem.media.screen );
@@ -128,17 +127,17 @@ public:
void testReadContent()
{
TS_ASSERT( _doc );
- TS_ASSERT( sp_document_repr_doc(_doc) );
- if ( !sp_document_repr_doc(_doc) ) {
+ TS_ASSERT( _doc->getReprDoc() );
+ if ( !_doc->getReprDoc() ) {
return; // evil early return
}
SPStyleElem &style_elem = *SP_STYLE_ELEM(g_object_new(SP_TYPE_STYLE_ELEM, NULL));
- Inkscape::XML::Node *const repr = sp_document_repr_doc(_doc)->createElement("svg:style");
+ Inkscape::XML::Node *const repr = _doc->getReprDoc()->createElement("svg:style");
repr->setAttribute("type", "text/css");
- Inkscape::XML::Node *const content_repr = sp_document_repr_doc(_doc)->createTextNode(".myclass { }");
+ Inkscape::XML::Node *const content_repr = _doc->getReprDoc()->createTextNode(".myclass { }");
repr->addChild(content_repr, NULL);
- sp_object_invoke_build(&style_elem, _doc, repr, false);
+ (&style_elem)->invoke_build(_doc, repr, false);
TS_ASSERT( style_elem.is_css );
TS_ASSERT( _doc->style_cascade );
CRStyleSheet const *const stylesheet = cr_cascade_get_sheet(_doc->style_cascade, ORIGIN_AUTHOR);
diff --git a/src/sp-style-elem.cpp b/src/sp-style-elem.cpp
index 5a57d548b..02ed80445 100644
--- a/src/sp-style-elem.cpp
+++ b/src/sp-style-elem.cpp
@@ -317,7 +317,8 @@ sp_style_elem_read_content(SPObject *const object)
* Dodji replies "right, that's *bug*"; just an unexpected oversight.
*/
- GString *const text = concat_children(*style_elem.repr);
+ //XML Tree being used directly here while it shouldn't be.
+ GString *const text = concat_children(*style_elem.getRepr());
CRParser *parser = cr_parser_new_from_buf(reinterpret_cast<guchar *>(text->str), text->len,
CR_UTF_8, FALSE);
@@ -389,8 +390,8 @@ sp_style_elem_build(SPObject *object, SPDocument *document, Inkscape::XML::Node
{
sp_style_elem_read_content(object);
- sp_object_read_attr(object, "type");
- sp_object_read_attr(object, "media");
+ object->readAttr( "type" );
+ object->readAttr( "media" );
static Inkscape::XML::NodeEventVector const nodeEventVector = {
child_add_rm_cb, // child_added
diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp
index 37be6f75e..19c014b9b 100644
--- a/src/sp-switch.cpp
+++ b/src/sp-switch.cpp
@@ -1,11 +1,11 @@
-#define __SP_SWITCH_CPP__
-
/*
* SVG <switch> implementation
*
* Authors:
* Andrius R. <knutux@gmail.com>
* MenTaLguY <mental@rydia.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006 authors
*
@@ -72,11 +72,13 @@ CSwitch::~CSwitch() {
}
SPObject *CSwitch::_evaluateFirst() {
- for (SPObject *child = sp_object_first_child(_group) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- if (SP_IS_ITEM(child) && sp_item_evaluate(SP_ITEM(child)))
- return child;
+ SPObject *first = 0;
+ for (SPObject *child = _group->firstChild() ; child && !first ; child = child->getNext() ) {
+ if (SP_IS_ITEM(child) && sp_item_evaluate(SP_ITEM(child))) {
+ first = child;
+ }
}
- return NULL;
+ return first;
}
GSList *CSwitch::_childList(bool add_ref, SPObject::Action action) {
@@ -168,7 +170,7 @@ void CSwitch::_showChildren (NRArena *arena, NRArenaItem *ai, unsigned int key,
if (SP_IS_ITEM (o)) {
child = SP_ITEM (o);
child->setEvaluated(o == evaluated_child);
- ac = sp_item_invoke_show (child, arena, key, flags);
+ ac = child->invoke_show (arena, key, flags);
if (ac) {
nr_arena_item_add_child (ai, ac, ar);
ar = ac;
@@ -177,3 +179,14 @@ void CSwitch::_showChildren (NRArena *arena, NRArenaItem *ai, unsigned int key,
l = g_slist_remove (l, o);
}
}
+
+/*
+ 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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/sp-symbol.cpp b/src/sp-symbol.cpp
index 5b4f24cb8..9031e87ed 100644
--- a/src/sp-symbol.cpp
+++ b/src/sp-symbol.cpp
@@ -1,10 +1,9 @@
-#define __SP_SYMBOL_C__
-
/*
* SVG <symbol> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2003 Lauris Kaplinski
*
@@ -108,8 +107,8 @@ sp_symbol_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *re
group = (SPGroup *) object;
symbol = (SPSymbol *) object;
- sp_object_read_attr (object, "viewBox");
- sp_object_read_attr (object, "preserveAspectRatio");
+ object->readAttr( "viewBox" );
+ object->readAttr( "preserveAspectRatio" );
if (((SPObjectClass *) parent_class)->build)
((SPObjectClass *) parent_class)->build (object, document, repr);
@@ -391,11 +390,15 @@ sp_symbol_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::X
repr = xml_doc->createElement("svg:symbol");
}
- repr->setAttribute("viewBox", object->repr->attribute("viewBox"));
- repr->setAttribute("preserveAspectRatio", object->repr->attribute("preserveAspectRatio"));
+ //XML Tree being used directly here while it shouldn't be.
+ repr->setAttribute("viewBox", object->getRepr()->attribute("viewBox"));
+
+ //XML Tree being used directly here while it shouldn't be.
+ repr->setAttribute("preserveAspectRatio", object->getRepr()->attribute("preserveAspectRatio"));
- if (((SPObjectClass *) (parent_class))->write)
+ if (((SPObjectClass *) (parent_class))->write) {
((SPObjectClass *) (parent_class))->write (object, xml_doc, repr, flags);
+ }
return repr;
}
diff --git a/src/sp-text.cpp b/src/sp-text.cpp
index d36adc35b..f779903fe 100644
--- a/src/sp-text.cpp
+++ b/src/sp-text.cpp
@@ -4,6 +4,8 @@
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -148,16 +150,16 @@ sp_text_release (SPObject *object)
static void
sp_text_build (SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
{
- sp_object_read_attr(object, "x");
- sp_object_read_attr(object, "y");
- sp_object_read_attr(object, "dx");
- sp_object_read_attr(object, "dy");
- sp_object_read_attr(object, "rotate");
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "dx" );
+ object->readAttr( "dy" );
+ object->readAttr( "rotate" );
if (((SPObjectClass *) text_parent_class)->build)
((SPObjectClass *) text_parent_class)->build(object, doc, repr);
- sp_object_read_attr(object, "sodipodi:linespacing"); // has to happen after the styles are read
+ object->readAttr( "sodipodi:linespacing" ); // has to happen after the styles are read
}
static void
@@ -210,8 +212,7 @@ sp_text_remove_child (SPObject *object, Inkscape::XML::Node *rch)
text->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_CONTENT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG);
}
-static void
-sp_text_update (SPObject *object, SPCtx *ctx, guint flags)
+static void sp_text_update(SPObject *object, SPCtx *ctx, guint flags)
{
SPText *text = SP_TEXT (object);
@@ -222,9 +223,9 @@ sp_text_update (SPObject *object, SPCtx *ctx, guint flags)
if (flags & SP_OBJECT_MODIFIED_FLAG) cflags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- /* Create temporary list of children */
+ // Create temporary list of children
GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
sp_object_ref (SP_OBJECT (child), object);
l = g_slist_prepend (l, child);
}
@@ -248,7 +249,7 @@ sp_text_update (SPObject *object, SPCtx *ctx, guint flags)
text->rebuildLayout();
NRRect paintbox;
- sp_item_invoke_bbox(text, &paintbox, Geom::identity(), TRUE);
+ text->invoke_bbox( &paintbox, Geom::identity(), TRUE);
for (SPItemView* v = text->display; v != NULL; v = v->next) {
text->_clearFlow(NR_ARENA_GROUP(v->arenaitem));
nr_arena_group_set_style(NR_ARENA_GROUP(v->arenaitem), SP_OBJECT_STYLE(object));
@@ -258,14 +259,16 @@ sp_text_update (SPObject *object, SPCtx *ctx, guint flags)
}
}
-static void
-sp_text_modified (SPObject *object, guint flags)
+static void sp_text_modified(SPObject *object, guint flags)
{
- if (((SPObjectClass *) text_parent_class)->modified)
+ if (((SPObjectClass *) text_parent_class)->modified) {
((SPObjectClass *) text_parent_class)->modified (object, flags);
+ }
guint cflags = (flags & SP_OBJECT_MODIFIED_CASCADE);
- if (flags & SP_OBJECT_MODIFIED_FLAG) cflags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ cflags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
// FIXME: all that we need to do here is nr_arena_glyphs_[group_]set_style, to set the changed
// style, but there's no easy way to access the arena glyphs or glyph groups corresponding to a
@@ -274,7 +277,7 @@ sp_text_modified (SPObject *object, guint flags)
if (flags & ( SP_OBJECT_STYLE_MODIFIED_FLAG )) {
SPText *text = SP_TEXT (object);
NRRect paintbox;
- sp_item_invoke_bbox(text, &paintbox, Geom::identity(), TRUE);
+ text->invoke_bbox( &paintbox, Geom::identity(), TRUE);
for (SPItemView* v = text->display; v != NULL; v = v->next) {
text->_clearFlow(NR_ARENA_GROUP(v->arenaitem));
nr_arena_group_set_style(NR_ARENA_GROUP(v->arenaitem), SP_OBJECT_STYLE(object));
@@ -282,16 +285,15 @@ sp_text_modified (SPObject *object, guint flags)
}
}
- /* Create temporary list of children */
+ // Create temporary list of children
GSList *l = NULL;
- SPObject *child;
- for (child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
sp_object_ref (SP_OBJECT (child), object);
l = g_slist_prepend (l, child);
}
l = g_slist_reverse (l);
while (l) {
- child = SP_OBJECT (l->data);
+ SPObject *child = SP_OBJECT (l->data);
l = g_slist_remove (l, child);
if (cflags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
child->emitModified(cflags);
@@ -300,24 +302,28 @@ sp_text_modified (SPObject *object, guint flags)
}
}
-static Inkscape::XML::Node *
-sp_text_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
+static Inkscape::XML::Node *sp_text_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
SPText *text = SP_TEXT (object);
if (flags & SP_OBJECT_WRITE_BUILD) {
- if (!repr)
+ if (!repr) {
repr = xml_doc->createElement("svg:text");
+ }
GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- if (SP_IS_TITLE(child) || SP_IS_DESC(child)) continue;
+ for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ if (SP_IS_TITLE(child) || SP_IS_DESC(child)) {
+ continue;
+ }
Inkscape::XML::Node *crepr = NULL;
if (SP_IS_STRING(child)) {
crepr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
} else {
crepr = child->updateRepr(xml_doc, NULL, flags);
}
- if (crepr) l = g_slist_prepend (l, crepr);
+ if (crepr) {
+ l = g_slist_prepend (l, crepr);
+ }
}
while (l) {
repr->addChild((Inkscape::XML::Node *) l->data, NULL);
@@ -325,8 +331,10 @@ sp_text_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML
l = g_slist_remove (l, l->data);
}
} else {
- for (SPObject *child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- if (SP_IS_TITLE(child) || SP_IS_DESC(child)) continue;
+ for (SPObject *child = object->firstChild() ; child ; child = child->getNext() ) {
+ if (SP_IS_TITLE(child) || SP_IS_DESC(child)) {
+ continue;
+ }
if (SP_IS_STRING(child)) {
SP_OBJECT_REPR(child)->setContent(SP_STRING(child)->string.c_str());
} else {
@@ -342,12 +350,13 @@ sp_text_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML
Inkscape::SVGOStringStream os;
os << (text->style->line_height.value * 100.0) << "%";
SP_OBJECT_REPR(text)->setAttribute("sodipodi:linespacing", os.str().c_str());
- }
- else
+ } else {
SP_OBJECT_REPR(text)->setAttribute("sodipodi:linespacing", NULL);
+ }
- if (((SPObjectClass *) (text_parent_class))->write)
+ if (((SPObjectClass *) (text_parent_class))->write) {
((SPObjectClass *) (text_parent_class))->write (object, xml_doc, repr, flags);
+ }
return repr;
}
@@ -386,7 +395,7 @@ sp_text_show(SPItem *item, NRArena *arena, unsigned /* key*/, unsigned /*flags*/
// pass the bbox of the text object as paintbox (used for paintserver fills)
NRRect paintbox;
- sp_item_invoke_bbox(item, &paintbox, Geom::identity(), TRUE);
+ item->invoke_bbox( &paintbox, Geom::identity(), TRUE);
group->layout.show(flowed, &paintbox);
return flowed;
@@ -441,7 +450,7 @@ static void sp_text_snappoints(SPItem const *item, std::vector<Inkscape::SnapCan
if (layout != NULL && layout->outputExists()) {
boost::optional<Geom::Point> pt = layout->baselineAnchorPoint();
if (pt) {
- p.push_back(Inkscape::SnapCandidatePoint((*pt) * sp_item_i2d_affine(item), Inkscape::SNAPSOURCE_TEXT_BASELINE, Inkscape::SNAPTARGET_TEXT_BASELINE));
+ p.push_back(Inkscape::SnapCandidatePoint((*pt) * item->i2d_affine(), Inkscape::SNAPSOURCE_TEXT_BASELINE, Inkscape::SNAPTARGET_TEXT_BASELINE));
}
}
}
@@ -482,13 +491,13 @@ sp_text_set_transform (SPItem *item, Geom::Matrix const &xform)
text->_adjustFontsizeRecursive (item, ex);
// Adjust stroke width
- sp_item_adjust_stroke_width_recursive (item, ex);
+ item->adjust_stroke_width_recursive (ex);
// Adjust pattern fill
- sp_item_adjust_pattern(item, xform * ret.inverse());
+ item->adjust_pattern(xform * ret.inverse());
// Adjust gradient fill
- sp_item_adjust_gradient(item, xform * ret.inverse());
+ item->adjust_gradient(xform * ret.inverse());
item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG);
@@ -501,13 +510,13 @@ sp_text_print (SPItem *item, SPPrintContext *ctx)
NRRect pbox, dbox, bbox;
SPText *group = SP_TEXT (item);
- sp_item_invoke_bbox(item, &pbox, Geom::identity(), TRUE);
- sp_item_bbox_desktop (item, &bbox);
+ item->invoke_bbox( &pbox, Geom::identity(), TRUE);
+ item->getBboxDesktop (&bbox);
dbox.x0 = 0.0;
dbox.y0 = 0.0;
- dbox.x1 = sp_document_width (SP_OBJECT_DOCUMENT (item));
- dbox.y1 = sp_document_height (SP_OBJECT_DOCUMENT (item));
- Geom::Matrix const ctm (sp_item_i2d_affine(item));
+ dbox.x1 = SP_OBJECT_DOCUMENT (item)->getWidth ();
+ dbox.y1 = SP_OBJECT_DOCUMENT (item)->getHeight ();
+ Geom::Matrix const ctm (item->i2d_affine());
group->layout.print(ctx,&pbox,&dbox,&bbox,ctm);
}
@@ -549,14 +558,16 @@ unsigned SPText::_buildLayoutInput(SPObject *root, Inkscape::Text::Layout::Optio
if (SP_IS_TSPAN(root))
if (SP_TSPAN(root)->role != SP_TSPAN_ROLE_UNSPECIFIED) {
// we need to allow the first line not to have role=line, but still set the source_cookie to the right value
- SPObject *prev_object = SP_OBJECT_PREV(root);
+ SPObject *prev_object = root->getPrev();
if (prev_object && SP_IS_TSPAN(prev_object)) {
- if (!layout.inputExists())
+ if (!layout.inputExists()) {
layout.appendText("", prev_object->style, prev_object, &optional_attrs);
+ }
layout.appendControlCode(Inkscape::Text::Layout::PARAGRAPH_BREAK, prev_object);
}
- if (!root->hasChildren())
+ if (!root->hasChildren()) {
layout.appendText("", root->style, root, &optional_attrs);
+ }
length++; // interpreting line breaks as a character for the purposes of x/y/etc attributes
// is a liberal interpretation of the svg spec, but a strict reading would mean
// that if the first line is empty the second line would take its place at the
@@ -564,12 +575,12 @@ unsigned SPText::_buildLayoutInput(SPObject *root, Inkscape::Text::Layout::Optio
child_attrs_offset--;
}
- for (SPObject *child = sp_object_first_child(root) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = root->firstChild() ; child ; child = child->getNext() ) {
if (SP_IS_STRING(child)) {
Glib::ustring const &string = SP_STRING(child)->string;
layout.appendText(string, root->style, child, &optional_attrs, child_attrs_offset + length);
length += string.length();
- } else if (!sp_repr_is_meta_element(child->repr)) {
+ } /*XML Tree being directly used here while it shouldn't be.*/ else if (!sp_repr_is_meta_element(child->getRepr())) {
length += _buildLayoutInput(child, optional_attrs, child_attrs_offset + length, in_textpath);
}
}
@@ -583,7 +594,7 @@ void SPText::rebuildLayout()
Inkscape::Text::Layout::OptionalTextTagAttrs optional_attrs;
_buildLayoutInput(this, optional_attrs, 0, false);
layout.calculateFlow();
- for (SPObject *child = firstChild() ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = firstChild() ; child ; child = child->getNext() ) {
if (SP_IS_TEXTPATH(child)) {
SPTextPath const *textpath = SP_TEXTPATH(child);
if (textpath->originalPath != NULL) {
@@ -595,14 +606,16 @@ void SPText::rebuildLayout()
//g_print(layout.dumpAsText().c_str());
// set the x,y attributes on role:line spans
- for (SPObject *child = firstChild() ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
- if (!SP_IS_TSPAN(child)) continue;
- SPTSpan *tspan = SP_TSPAN(child);
- if (tspan->role == SP_TSPAN_ROLE_UNSPECIFIED) continue;
- if (!tspan->attributes.singleXYCoordinates()) continue;
- Inkscape::Text::Layout::iterator iter = layout.sourceToIterator(tspan);
- Geom::Point anchor_point = layout.chunkAnchorPoint(iter);
- tspan->attributes.setFirstXY(anchor_point);
+ for (SPObject *child = firstChild() ; child ; child = child->getNext() ) {
+ if (SP_IS_TSPAN(child)) {
+ SPTSpan *tspan = SP_TSPAN(child);
+ if ( (tspan->role != SP_TSPAN_ROLE_UNSPECIFIED)
+ && tspan->attributes.singleXYCoordinates() ) {
+ Inkscape::Text::Layout::iterator iter = layout.sourceToIterator(tspan);
+ Geom::Point anchor_point = layout.chunkAnchorPoint(iter);
+ tspan->attributes.setFirstXY(anchor_point);
+ }
+ }
}
}
diff --git a/src/sp-textpath.h b/src/sp-textpath.h
index 76d236cc9..2f30f6023 100644
--- a/src/sp-textpath.h
+++ b/src/sp-textpath.h
@@ -31,7 +31,7 @@ struct SPTextPathClass {
GType sp_textpath_get_type();
-#define SP_IS_TEXT_TEXTPATH(obj) (SP_IS_TEXT(obj) && sp_object_first_child(obj) && SP_IS_TEXTPATH(sp_object_first_child(obj)))
+#define SP_IS_TEXT_TEXTPATH(obj) (SP_IS_TEXT(obj) && obj->firstChild() && SP_IS_TEXTPATH(obj->firstChild()))
SPItem *sp_textpath_get_path_item(SPTextPath *tp);
void sp_textpath_to_text(SPObject *tp);
diff --git a/src/sp-tref-reference.h b/src/sp-tref-reference.h
index 37a5e21ce..c2264f83e 100644
--- a/src/sp-tref-reference.h
+++ b/src/sp-tref-reference.h
@@ -7,11 +7,13 @@
* This file was created based on sp-use-reference.h
*
* Copyright (C) 2007 Gail Banaszkiewicz
+ * Abhishek Sharma
*
* Released under GNU GPL, read the file 'COPYING' for more information.
*/
#include <forward.h>
+#include "sp-item.h"
#include <uri-references.h>
#include <sigc++/sigc++.h>
diff --git a/src/sp-tref.cpp b/src/sp-tref.cpp
index af85bc58b..c206dac77 100644
--- a/src/sp-tref.cpp
+++ b/src/sp-tref.cpp
@@ -1,5 +1,3 @@
-#define __SP_TREF_CPP__
-
/** \file
* SVG <tref> implementation - All character data within the referenced
* element, including character data enclosed within additional markup,
@@ -10,6 +8,8 @@
/*
* Authors:
* Gail Banaszkiewicz <Gail.Banaszkiewicz@gmail.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Gail Banaszkiewicz
*
@@ -153,12 +153,12 @@ sp_tref_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
((SPObjectClass *) tref_parent_class)->build(object, document, repr);
}
- sp_object_read_attr(object, "xlink:href");
- sp_object_read_attr(object, "x");
- sp_object_read_attr(object, "y");
- sp_object_read_attr(object, "dx");
- sp_object_read_attr(object, "dy");
- sp_object_read_attr(object, "rotate");
+ object->readAttr( "xlink:href" );
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "dx" );
+ object->readAttr( "dy" );
+ object->readAttr( "rotate" );
}
/**
@@ -358,7 +358,7 @@ sp_tref_description(SPItem *item)
char *child_desc;
if (SP_IS_ITEM(referred)) {
- child_desc = sp_item_description(SP_ITEM(referred));
+ child_desc = SP_ITEM(referred)->description();
} else {
child_desc = g_strdup("");
}
@@ -387,7 +387,7 @@ sp_tref_href_changed(SPObject */*old_ref*/, SPObject */*ref*/, SPTRef *tref)
tref->_delete_connection.disconnect();
if (tref->stringChild) {
- sp_object_detach(SP_OBJECT(tref), tref->stringChild);
+ SP_OBJECT(tref)->detach(tref->stringChild);
tref->stringChild = NULL;
}
@@ -506,8 +506,7 @@ sp_tref_fully_contained(SPObject *start_item, Glib::ustring::iterator &start,
}
-void
-sp_tref_update_text(SPTRef *tref)
+void sp_tref_update_text(SPTRef *tref)
{
if (tref) {
// Get the character data that will be used with this tref
@@ -515,20 +514,20 @@ sp_tref_update_text(SPTRef *tref)
build_string_from_root(SP_OBJECT_REPR(tref->getObjectReferredTo()), &charData);
if (tref->stringChild) {
- sp_object_detach(SP_OBJECT(tref), tref->stringChild);
+ SP_OBJECT(tref)->detach(tref->stringChild);
tref->stringChild = NULL;
}
// Create the node and SPString to be the tref's child
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(tref));
+ Inkscape::XML::Document *xml_doc = SP_OBJECT_DOCUMENT(tref)->getReprDoc();
Inkscape::XML::Node *newStringRepr = xml_doc->createTextNode(charData.c_str());
tref->stringChild = SP_OBJECT(g_object_new(sp_repr_type_lookup(newStringRepr), NULL));
// Add this SPString as a child of the tref
- sp_object_attach(SP_OBJECT(tref), tref->stringChild, tref->lastChild());
+ SP_OBJECT(tref)->attach(tref->stringChild, tref->lastChild());
sp_object_unref(tref->stringChild, NULL);
- sp_object_invoke_build(tref->stringChild, SP_OBJECT(tref)->document, newStringRepr, TRUE);
+ (tref->stringChild)->invoke_build(SP_OBJECT(tref)->document, newStringRepr, TRUE);
Inkscape::GC::release(newStringRepr);
}
@@ -585,7 +584,7 @@ sp_tref_convert_to_tspan(SPObject *obj)
Inkscape::XML::Node *tref_parent = sp_repr_parent(tref_repr);
SPDocument *document = SP_OBJECT(tref)->document;
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
Inkscape::XML::Node *new_tspan_repr = xml_doc->createElement("svg:tspan");
@@ -632,7 +631,7 @@ sp_tref_convert_to_tspan(SPObject *obj)
////////////////////
else {
GSList *l = NULL;
- for (SPObject *child = sp_object_first_child(obj) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = obj->firstChild() ; child != NULL ; child = child->getNext() ) {
sp_object_ref (SP_OBJECT (child), obj);
l = g_slist_prepend (l, child);
}
diff --git a/src/sp-tspan.cpp b/src/sp-tspan.cpp
index db8e0cad4..653f3e911 100644
--- a/src/sp-tspan.cpp
+++ b/src/sp-tspan.cpp
@@ -1,11 +1,11 @@
-#define __SP_TSPAN_C__
-
/*
* SVG <text> and <tspan> implementation
*
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -132,12 +132,12 @@ sp_tspan_build(SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
{
//SPTSpan *tspan = SP_TSPAN(object);
- sp_object_read_attr(object, "x");
- sp_object_read_attr(object, "y");
- sp_object_read_attr(object, "dx");
- sp_object_read_attr(object, "dy");
- sp_object_read_attr(object, "rotate");
- sp_object_read_attr(object, "sodipodi:role");
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "dx" );
+ object->readAttr( "dy" );
+ object->readAttr( "rotate" );
+ object->readAttr( "sodipodi:role" );
if (((SPObjectClass *) tspan_parent_class)->build)
((SPObjectClass *) tspan_parent_class)->build(object, doc, repr);
@@ -167,35 +167,36 @@ sp_tspan_set(SPObject *object, unsigned key, gchar const *value)
}
}
-static void
-sp_tspan_update(SPObject *object, SPCtx *ctx, guint flags)
+static void sp_tspan_update(SPObject *object, SPCtx *ctx, guint flags)
{
- if (((SPObjectClass *) tspan_parent_class)->update)
+ if (((SPObjectClass *) tspan_parent_class)->update) {
((SPObjectClass *) tspan_parent_class)->update(object, ctx, flags);
+ }
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
flags &= SP_OBJECT_MODIFIED_CASCADE;
- SPObject *ochild;
- for ( ochild = sp_object_first_child(object) ; ochild ; ochild = SP_OBJECT_NEXT(ochild) ) {
+ for ( SPObject *ochild = object->firstChild() ; ochild ; ochild = ochild->getNext() ) {
if ( flags || ( ochild->uflags & SP_OBJECT_MODIFIED_FLAG )) {
ochild->updateDisplay(ctx, flags);
}
}
}
-static void
-sp_tspan_modified(SPObject *object, unsigned flags)
+static void sp_tspan_modified(SPObject *object, unsigned flags)
{
- if (((SPObjectClass *) tspan_parent_class)->modified)
+ if (((SPObjectClass *) tspan_parent_class)->modified) {
((SPObjectClass *) tspan_parent_class)->modified(object, flags);
+ }
- if (flags & SP_OBJECT_MODIFIED_FLAG)
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
flags &= SP_OBJECT_MODIFIED_CASCADE;
- SPObject *ochild;
- for ( ochild = sp_object_first_child(object) ; ochild ; ochild = SP_OBJECT_NEXT(ochild) ) {
+ for ( SPObject *ochild = object->firstChild() ; ochild ; ochild = ochild->getNext() ) {
if (flags || (ochild->mflags & SP_OBJECT_MODIFIED_FLAG)) {
ochild->emitModified(flags);
}
@@ -241,7 +242,7 @@ sp_tspan_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML
if ( flags&SP_OBJECT_WRITE_BUILD ) {
GSList *l = NULL;
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject* child = object->firstChild() ; child ; child = child->getNext() ) {
Inkscape::XML::Node* c_repr=NULL;
if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) {
c_repr = child->updateRepr(xml_doc, NULL, flags);
@@ -250,7 +251,9 @@ sp_tspan_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML
} else if ( SP_IS_STRING(child) ) {
c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
}
- if ( c_repr ) l = g_slist_prepend(l, c_repr);
+ if ( c_repr ) {
+ l = g_slist_prepend(l, c_repr);
+ }
}
while ( l ) {
repr->addChild((Inkscape::XML::Node *) l->data, NULL);
@@ -258,7 +261,7 @@ sp_tspan_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML
l = g_slist_remove(l, l->data);
}
} else {
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject* child = object->firstChild() ; child ; child = child->getNext() ) {
if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) {
child->updateRepr(flags);
} else if ( SP_IS_TEXTPATH(child) ) {
@@ -269,8 +272,9 @@ sp_tspan_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML
}
}
- if (((SPObjectClass *) tspan_parent_class)->write)
+ if (((SPObjectClass *) tspan_parent_class)->write) {
((SPObjectClass *) tspan_parent_class)->write(object, xml_doc, repr, flags);
+ }
return repr;
}
@@ -386,32 +390,34 @@ sp_textpath_release(SPObject *object)
((SPObjectClass *) textpath_parent_class)->release(object);
}
-static void
-sp_textpath_build(SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
+static void sp_textpath_build(SPObject *object, SPDocument *doc, Inkscape::XML::Node *repr)
{
- //SPTextPath *textpath = SP_TEXTPATH(object);
-
- sp_object_read_attr(object, "x");
- sp_object_read_attr(object, "y");
- sp_object_read_attr(object, "dx");
- sp_object_read_attr(object, "dy");
- sp_object_read_attr(object, "rotate");
- sp_object_read_attr(object, "startOffset");
- sp_object_read_attr(object, "xlink:href");
-
- bool no_content=true;
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "dx" );
+ object->readAttr( "dy" );
+ object->readAttr( "rotate" );
+ object->readAttr( "startOffset" );
+ object->readAttr( "xlink:href" );
+
+ bool no_content = true;
for (Inkscape::XML::Node* rch = repr->firstChild() ; rch != NULL; rch = rch->next()) {
- if ( rch->type() == Inkscape::XML::TEXT_NODE ) {no_content=false;break;}
+ if ( rch->type() == Inkscape::XML::TEXT_NODE )
+ {
+ no_content = false;
+ break;
+ }
}
if ( no_content ) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node* rch = xml_doc->createTextNode("");
repr->addChild(rch, NULL);
}
- if (((SPObjectClass *) textpath_parent_class)->build)
+ if (((SPObjectClass *) textpath_parent_class)->build) {
((SPObjectClass *) textpath_parent_class)->build(object, doc, repr);
+ }
}
static void
@@ -438,23 +444,26 @@ sp_textpath_set(SPObject *object, unsigned key, gchar const *value)
}
}
-static void
-sp_textpath_update(SPObject *object, SPCtx *ctx, guint flags)
+static void sp_textpath_update(SPObject *object, SPCtx *ctx, guint flags)
{
SPTextPath *textpath = SP_TEXTPATH(object);
- textpath->isUpdating=true;
- if ( textpath->sourcePath->sourceDirty ) refresh_textpath_source(textpath);
- textpath->isUpdating=false;
+ textpath->isUpdating = true;
+ if ( textpath->sourcePath->sourceDirty ) {
+ refresh_textpath_source(textpath);
+ }
+ textpath->isUpdating = false;
- if (((SPObjectClass *) textpath_parent_class)->update)
+ if (((SPObjectClass *) textpath_parent_class)->update) {
((SPObjectClass *) textpath_parent_class)->update(object, ctx, flags);
+ }
- if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
flags &= SP_OBJECT_MODIFIED_CASCADE;
- SPObject *ochild;
- for ( ochild = sp_object_first_child(object) ; ochild ; ochild = SP_OBJECT_NEXT(ochild) ) {
+ for ( SPObject *ochild = object->firstChild() ; ochild ; ochild = ochild->getNext() ) {
if ( flags || ( ochild->uflags & SP_OBJECT_MODIFIED_FLAG )) {
ochild->updateDisplay(ctx, flags);
}
@@ -482,18 +491,18 @@ void refresh_textpath_source(SPTextPath* tp)
}
}
-static void
-sp_textpath_modified(SPObject *object, unsigned flags)
+static void sp_textpath_modified(SPObject *object, unsigned flags)
{
- if (((SPObjectClass *) textpath_parent_class)->modified)
+ if (((SPObjectClass *) textpath_parent_class)->modified) {
((SPObjectClass *) textpath_parent_class)->modified(object, flags);
+ }
- if (flags & SP_OBJECT_MODIFIED_FLAG)
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
+ }
flags &= SP_OBJECT_MODIFIED_CASCADE;
- SPObject *ochild;
- for ( ochild = sp_object_first_child(object) ; ochild ; ochild = SP_OBJECT_NEXT(ochild) ) {
+ for ( SPObject *ochild = object->firstChild() ; ochild ; ochild = ochild->getNext() ) {
if (flags || (ochild->mflags & SP_OBJECT_MODIFIED_FLAG)) {
ochild->emitModified(flags);
}
@@ -525,7 +534,7 @@ sp_textpath_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::
if ( flags&SP_OBJECT_WRITE_BUILD ) {
GSList *l = NULL;
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject* child = object->firstChild() ; child ; child = child->getNext() ) {
Inkscape::XML::Node* c_repr=NULL;
if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) {
c_repr = child->updateRepr(xml_doc, NULL, flags);
@@ -534,7 +543,9 @@ sp_textpath_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::
} else if ( SP_IS_STRING(child) ) {
c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
}
- if ( c_repr ) l = g_slist_prepend(l, c_repr);
+ if ( c_repr ) {
+ l = g_slist_prepend(l, c_repr);
+ }
}
while ( l ) {
repr->addChild((Inkscape::XML::Node *) l->data, NULL);
@@ -542,7 +553,7 @@ sp_textpath_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::
l = g_slist_remove(l, l->data);
}
} else {
- for (SPObject* child = sp_object_first_child(object) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject* child = object->firstChild() ; child ; child = child->getNext() ) {
if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) {
child->updateRepr(flags);
} else if ( SP_IS_TEXTPATH(child) ) {
@@ -553,8 +564,9 @@ sp_textpath_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::
}
}
- if (((SPObjectClass *) textpath_parent_class)->write)
+ if (((SPObjectClass *) textpath_parent_class)->write) {
((SPObjectClass *) textpath_parent_class)->write(object, xml_doc, repr, flags);
+ }
return repr;
}
@@ -577,7 +589,7 @@ sp_textpath_to_text(SPObject *tp)
SPObject *text = SP_OBJECT_PARENT(tp);
Geom::OptRect bbox;
- sp_item_invoke_bbox(SP_ITEM(text), bbox, sp_item_i2doc_affine(SP_ITEM(text)), TRUE);
+ SP_ITEM(text)->invoke_bbox(bbox, SP_ITEM(text)->i2doc_affine(), TRUE);
if (!bbox) return;
Geom::Point xy = bbox->min();
diff --git a/src/sp-use-reference.cpp b/src/sp-use-reference.cpp
index 914e416b3..a05dc0e93 100644
--- a/src/sp-use-reference.cpp
+++ b/src/sp-use-reference.cpp
@@ -222,7 +222,7 @@ void SPUsePath::refresh_source()
return;
}
if (SP_IS_SHAPE(item)) {
- curve = sp_shape_get_curve(SP_SHAPE(item));
+ curve = SP_SHAPE(item)->getCurve();
if (curve == NULL)
return;
}
diff --git a/src/sp-use-reference.h b/src/sp-use-reference.h
index b30819a5b..73d46c8aa 100644
--- a/src/sp-use-reference.h
+++ b/src/sp-use-reference.h
@@ -10,6 +10,7 @@
*/
#include <forward.h>
+#include "sp-item.h"
#include <uri-references.h>
#include <sigc++/sigc++.h>
diff --git a/src/sp-use.cpp b/src/sp-use.cpp
index 9efc442a9..33a05cc7b 100644
--- a/src/sp-use.cpp
+++ b/src/sp-use.cpp
@@ -1,11 +1,11 @@
-#define __SP_USE_C__
-
/*
* SVG <use> implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2005 authors
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -138,7 +138,7 @@ sp_use_finalize(GObject *obj)
SPUse *use = (SPUse *) obj;
if (use->child) {
- sp_object_detach(SP_OBJECT(obj), use->child);
+ SP_OBJECT(obj)->detach(use->child);
use->child = NULL;
}
@@ -158,11 +158,11 @@ sp_use_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
(* ((SPObjectClass *) parent_class)->build)(object, document, repr);
}
- 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");
+ object->readAttr( "x" );
+ object->readAttr( "y" );
+ object->readAttr( "width" );
+ object->readAttr( "height" );
+ object->readAttr( "xlink:href" );
// We don't need to create child here:
// reading xlink:href will attach ref, and that will cause the changed signal to be emitted,
@@ -175,7 +175,7 @@ sp_use_release(SPObject *object)
SPUse *use = SP_USE(object);
if (use->child) {
- sp_object_detach(object, use->child);
+ object->detach(use->child);
use->child = NULL;
}
@@ -287,7 +287,7 @@ sp_use_bbox(SPItem const *item, NRRect *bbox, Geom::Matrix const &transform, uns
use->y.computed)
* transform );
Geom::OptRect optbbox;
- sp_item_invoke_bbox_full(child, optbbox, ct, flags, FALSE);
+ child->invoke_bbox_full( optbbox, ct, flags, FALSE);
if (optbbox) {
bbox->x0 = (*optbbox)[0][0];
bbox->y0 = (*optbbox)[1][0];
@@ -310,7 +310,7 @@ sp_use_print(SPItem *item, SPPrintContext *ctx)
}
if (use->child && SP_IS_ITEM(use->child)) {
- sp_item_invoke_print(SP_ITEM(use->child), ctx);
+ SP_ITEM(use->child)->invoke_print(ctx);
}
if (translated) {
@@ -334,7 +334,7 @@ sp_use_description(SPItem *item)
* a <use>, and giving its description. */
}
++recursion_depth;
- char *child_desc = sp_item_description(SP_ITEM(use->child));
+ char *child_desc = SP_ITEM(use->child)->description();
--recursion_depth;
ret = g_strdup_printf(_("<b>Clone</b> of: %s"), child_desc);
@@ -355,7 +355,7 @@ sp_use_show(SPItem *item, NRArena *arena, unsigned key, unsigned flags)
nr_arena_group_set_style(NR_ARENA_GROUP(ai), SP_OBJECT_STYLE(item));
if (use->child) {
- NRArenaItem *ac = sp_item_invoke_show(SP_ITEM(use->child), arena, key, flags);
+ NRArenaItem *ac = SP_ITEM(use->child)->invoke_show(arena, key, flags);
if (ac) {
nr_arena_item_add_child(ai, ac, NULL);
}
@@ -373,7 +373,7 @@ sp_use_hide(SPItem *item, unsigned key)
SPUse *use = SP_USE(item);
if (use->child) {
- sp_item_invoke_hide(SP_ITEM(use->child), key);
+ SP_ITEM(use->child)->invoke_hide(key);
}
if (((SPItemClass *) parent_class)->hide) {
@@ -490,7 +490,7 @@ sp_use_move_compensate(Geom::Matrix const *mp, SPItem */*original*/, SPUse *self
return;
// restore item->transform field from the repr, in case it was changed by seltrans
- sp_object_read_attr (SP_OBJECT (self), "transform");
+ SP_OBJECT (self)->readAttr ("transform");
Geom::Matrix t = sp_use_get_parent_transform(self);
Geom::Matrix clone_move = t.inverse() * m * t;
@@ -510,7 +510,7 @@ sp_use_move_compensate(Geom::Matrix const *mp, SPItem */*original*/, SPUse *self
// commit the compensation
SPItem *item = SP_ITEM(self);
item->transform *= clone_move;
- sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform, &advertized_move);
+ item->doWriteTransform(SP_OBJECT_REPR(item), item->transform, &advertized_move);
SP_OBJECT(item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}
@@ -523,7 +523,7 @@ sp_use_href_changed(SPObject */*old_ref*/, SPObject */*ref*/, SPUse *use)
use->_transformed_connection.disconnect();
if (use->child) {
- sp_object_detach(SP_OBJECT(use), use->child);
+ SP_OBJECT(use)->detach(use->child);
use->child = NULL;
}
@@ -535,13 +535,13 @@ sp_use_href_changed(SPObject */*old_ref*/, SPObject */*ref*/, SPUse *use)
g_return_if_fail(type > G_TYPE_NONE);
if (g_type_is_a(type, SP_TYPE_ITEM)) {
use->child = (SPObject*) g_object_new(type, 0);
- sp_object_attach(SP_OBJECT(use), use->child, use->lastChild());
+ SP_OBJECT(use)->attach(use->child, use->lastChild());
sp_object_unref(use->child, SP_OBJECT(use));
- sp_object_invoke_build(use->child, SP_OBJECT(use)->document, childrepr, TRUE);
+ (use->child)->invoke_build(SP_OBJECT(use)->document, childrepr, TRUE);
for (SPItemView *v = item->display; v != NULL; v = v->next) {
NRArenaItem *ai;
- ai = sp_item_invoke_show(SP_ITEM(use->child), NR_ARENA_ITEM_ARENA(v->arenaitem), v->key, v->flags);
+ ai = SP_ITEM(use->child)->invoke_show(NR_ARENA_ITEM_ARENA(v->arenaitem), v->key, v->flags);
if (ai) {
nr_arena_item_add_child(v->arenaitem, ai, NULL);
}
@@ -662,21 +662,26 @@ sp_use_modified(SPObject *object, guint flags)
}
}
-SPItem *
-sp_use_unlink(SPUse *use)
+SPItem *sp_use_unlink(SPUse *use)
{
- if (!use) return NULL;
+ if (!use) {
+ return NULL;
+ }
Inkscape::XML::Node *repr = SP_OBJECT_REPR(use);
- if (!repr) return NULL;
+ if (!repr) {
+ return NULL;
+ }
Inkscape::XML::Node *parent = sp_repr_parent(repr);
SPDocument *document = SP_OBJECT(use)->document;
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
// Track the ultimate source of a chain of uses.
SPItem *orig = sp_use_root(use);
- g_return_val_if_fail(orig, NULL);
+ if (!orig) {
+ return NULL;
+ }
// Calculate the accumulated transform, starting from the original.
Geom::Matrix t = sp_use_get_root_transform(use);
@@ -734,7 +739,7 @@ sp_use_unlink(SPUse *use)
{
Geom::Matrix nomove(Geom::identity());
// Advertise ourselves as not moving.
- sp_item_write_transform(item, SP_OBJECT_REPR(item), t, &nomove);
+ item->doWriteTransform(SP_OBJECT_REPR(item), t, &nomove);
}
return item;
}
diff --git a/src/spiral-context.cpp b/src/spiral-context.cpp
index 6730ab63b..754885192 100644
--- a/src/spiral-context.cpp
+++ b/src/spiral-context.cpp
@@ -1,5 +1,3 @@
-#define __SP_SPIRAL_CONTEXT_C__
-
/*
* Spiral drawing context
*
@@ -7,6 +5,8 @@
* Mitsuru Oka
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2001 Lauris Kaplinski
* Copyright (C) 2001-2002 Mitsuru Oka
@@ -42,6 +42,8 @@
#include "context-fns.h"
#include "shape-editor.h"
+using Inkscape::DocumentUndo;
+
static void sp_spiral_context_class_init(SPSpiralContextClass * klass);
static void sp_spiral_context_init(SPSpiralContext *spiral_context);
static void sp_spiral_context_dispose(GObject *object);
@@ -397,8 +399,7 @@ sp_spiral_context_root_handler(SPEventContext *event_context, GdkEvent *event)
return ret;
}
-static void
-sp_spiral_drag(SPSpiralContext *sc, Geom::Point p, guint state)
+static void sp_spiral_drag(SPSpiralContext *sc, Geom::Point p, guint state)
{
SPDesktop *desktop = SP_EVENT_CONTEXT(sc)->desktop;
@@ -411,17 +412,17 @@ sp_spiral_drag(SPSpiralContext *sc, Geom::Point p, guint state)
return;
}
- /* Create object */
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_EVENT_CONTEXT_DOCUMENT(sc));
+ // Create object
+ Inkscape::XML::Document *xml_doc = SP_EVENT_CONTEXT_DOCUMENT(sc)->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
repr->setAttribute("sodipodi:type", "spiral");
- /* Set style */
+ // Set style
sp_desktop_apply_style_tool(desktop, repr, "/tools/shapes/spiral", false);
sc->item = (SPItem *) desktop->currentLayer()->appendChildRepr(repr);
Inkscape::GC::release(repr);
- sc->item->transform = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
+ sc->item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
sc->item->updateRepr();
sp_canvas_force_full_redraw_after_interruptions(desktop->canvas, 5);
@@ -475,14 +476,14 @@ sp_spiral_finish(SPSpiralContext *sc)
SPDesktop *desktop = SP_EVENT_CONTEXT(sc)->desktop;
- sp_shape_set_shape(SP_SHAPE(spiral));
+ SP_SHAPE(spiral)->setShape();
SP_OBJECT(spiral)->updateRepr(SP_OBJECT_WRITE_EXT);
sp_canvas_end_forced_full_redraws(desktop->canvas);
sp_desktop_selection(desktop)->set(sc->item);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SPIRAL,
- _("Create spiral"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SPIRAL,
+ _("Create spiral"));
sc->item = NULL;
}
@@ -507,7 +508,7 @@ static void sp_spiral_cancel(SPSpiralContext *sc)
sp_canvas_end_forced_full_redraws(desktop->canvas);
- sp_document_cancel(sp_desktop_document(desktop));
+ DocumentUndo::cancel(sp_desktop_document(desktop));
}
/*
diff --git a/src/splivarot.cpp b/src/splivarot.cpp
index 6e5c453e6..4ddb5b12c 100644
--- a/src/splivarot.cpp
+++ b/src/splivarot.cpp
@@ -1,4 +1,3 @@
-#define __SP_LIVAROT_C__
/*
* splivarot.cpp
* Inkscape
@@ -53,6 +52,8 @@
#include "splivarot.h"
+using Inkscape::DocumentUndo;
+
bool Ancetre(Inkscape::XML::Node *a, Inkscape::XML::Node *who);
void sp_selected_path_boolop(SPDesktop *desktop, bool_op bop, const unsigned int verb=SP_VERB_NONE, const Glib::ustring description="");
@@ -418,8 +419,8 @@ sp_selected_path_boolop(SPDesktop *desktop, bool_op bop, const unsigned int verb
{
SP_OBJECT(l->data)->deleteObject();
}
- sp_document_done(sp_desktop_document(desktop), SP_VERB_NONE,
- description);
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_NONE,
+ description);
selection->clear();
delete res;
@@ -450,11 +451,11 @@ sp_selected_path_boolop(SPDesktop *desktop, bool_op bop, const unsigned int verb
// adjust style properties that depend on a possible transform in the source object in order
// to get a correct style attribute for the new path
SPItem* item_source = SP_ITEM(source);
- Geom::Matrix i2doc(sp_item_i2doc_affine(item_source));
- sp_item_adjust_stroke(item_source, i2doc.descrim());
- sp_item_adjust_pattern(item_source, i2doc);
- sp_item_adjust_gradient(item_source, i2doc);
- sp_item_adjust_livepatheffect(item_source, i2doc);
+ Geom::Matrix i2doc(item_source->i2doc_affine());
+ item_source->adjust_stroke(i2doc.descrim());
+ item_source->adjust_pattern(i2doc);
+ item_source->adjust_gradient(i2doc);
+ item_source->adjust_livepatheffect(i2doc);
Inkscape::XML::Node *repr_source = SP_OBJECT_REPR(source);
@@ -483,7 +484,7 @@ sp_selected_path_boolop(SPDesktop *desktop, bool_op bop, const unsigned int verb
// premultiply by the inverse of parent's repr
SPItem *parent_item = SP_ITEM(sp_desktop_document(desktop)->getObjectByRepr(parent));
- Geom::Matrix local (sp_item_i2doc_affine(parent_item));
+ Geom::Matrix local (parent_item->i2doc_affine());
gchar *transform = sp_svg_transform_write(local.inverse());
// now that we have the result, add it on the canvas
@@ -512,7 +513,7 @@ sp_selected_path_boolop(SPDesktop *desktop, bool_op bop, const unsigned int verb
for (int i=0;i<nbRP;i++) {
gchar *d = resPath[i]->svg_dump_path();
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
repr->setAttribute("style", style);
if (mask)
@@ -558,7 +559,7 @@ sp_selected_path_boolop(SPDesktop *desktop, bool_op bop, const unsigned int verb
} else {
gchar *d = res->svg_dump_path();
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
repr->setAttribute("style", style);
@@ -592,7 +593,7 @@ sp_selected_path_boolop(SPDesktop *desktop, bool_op bop, const unsigned int verb
if (desc) g_free(desc);
if (verb != SP_VERB_NONE) {
- sp_document_done(sp_desktop_document(desktop), verb, description);
+ DocumentUndo::done(sp_desktop_document(desktop), verb, description);
}
delete res;
@@ -619,7 +620,7 @@ void sp_selected_path_outline_add_marker( SPObject *marker_object, Geom::Matrix
Inkscape::XML::Node *m_repr = SP_OBJECT_REPR(marker_item)->duplicate(xml_doc);
g_repr->appendChild(m_repr);
SPItem *marker_item = (SPItem *) doc->getObjectByRepr(m_repr);
- sp_item_write_transform(marker_item, m_repr, tr);
+ marker_item->doWriteTransform(m_repr, tr);
}
}
@@ -665,7 +666,7 @@ Geom::PathVector* item_outline(SPItem const *item)
SPCurve *curve = NULL;
if (SP_IS_SHAPE(item)) {
- curve = sp_shape_get_curve(SP_SHAPE(item));
+ curve = SP_SHAPE(item)->getCurve();
} else if (SP_IS_TEXT(item)) {
curve = SP_TEXT(item)->getNormalizedBpath();
}
@@ -784,7 +785,7 @@ Geom::PathVector* item_outline(SPItem const *item)
if (res->descr_cmd.size() > 1) { // if there's 0 or 1 node left, drop this path altogether
ret_pathv = orig->MakePathVector();
- if (SP_IS_SHAPE(item) && sp_shape_has_markers (SP_SHAPE(item))) {
+ if (SP_IS_SHAPE(item) && SP_SHAPE(item)->hasMarkers ()) {
SPShape *shape = SP_SHAPE(item);
Geom::PathVector const & pathv = curve->get_pathvector();
@@ -893,7 +894,7 @@ sp_selected_path_outline(SPDesktop *desktop)
SPCurve *curve = NULL;
if (SP_IS_SHAPE(item)) {
- curve = sp_shape_get_curve(SP_SHAPE(item));
+ curve = SP_SHAPE(item)->getCurve();
if (curve == NULL)
continue;
}
@@ -1064,7 +1065,7 @@ sp_selected_path_outline(SPDesktop *desktop)
if (res->descr_cmd.size() > 1) { // if there's 0 or 1 node left, drop this path altogether
SPDocument * doc = sp_desktop_document(desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
// restore old style, but set old stroke style on fill
@@ -1081,9 +1082,9 @@ sp_selected_path_outline(SPDesktop *desktop)
if (clip_path)
repr->setAttribute("clip-path", clip_path);
- if (SP_IS_SHAPE(item) && sp_shape_has_markers (SP_SHAPE(item))) {
+ if (SP_IS_SHAPE(item) && SP_SHAPE(item)->hasMarkers ()) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *g_repr = xml_doc->createElement("svg:g");
// add the group to the parent
@@ -1095,7 +1096,7 @@ sp_selected_path_outline(SPDesktop *desktop)
// restore title, description, id, transform
repr->setAttribute("id", id);
SPItem *newitem = (SPItem *) doc->getObjectByRepr(repr);
- sp_item_write_transform(newitem, repr, transform);
+ newitem->doWriteTransform(repr, transform);
if (title) {
newitem->setTitle(title);
}
@@ -1195,7 +1196,7 @@ sp_selected_path_outline(SPDesktop *desktop)
repr->setAttribute("id", id);
SPItem *newitem = (SPItem *) sp_desktop_document(desktop)->getObjectByRepr(repr);
- sp_item_write_transform(newitem, repr, transform);
+ newitem->doWriteTransform(repr, transform);
if (title) {
newitem->setTitle(title);
}
@@ -1222,8 +1223,8 @@ sp_selected_path_outline(SPDesktop *desktop)
}
if (did) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_OUTLINE,
- _("Convert stroke to path"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_OUTLINE,
+ _("Convert stroke to path"));
} else {
// TRANSLATORS: "to outline" means "to convert stroke to path"
desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("<b>No stroked paths</b> in the selection."));
@@ -1314,7 +1315,7 @@ sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updat
}
if (SP_IS_SHAPE(item))
{
- curve = sp_shape_get_curve(SP_SHAPE(item));
+ curve = SP_SHAPE(item)->getCurve();
if (curve == NULL)
return;
}
@@ -1327,9 +1328,10 @@ sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updat
Geom::Matrix const transform(item->transform);
- sp_item_write_transform(item, SP_OBJECT_REPR(item), Geom::identity());
+ item->doWriteTransform(SP_OBJECT_REPR(item), Geom::identity());
- style = g_strdup(SP_OBJECT(item)->repr->attribute("style"));
+ //XML Tree being used directly here while it shouldn't be...
+ style = g_strdup(SP_OBJECT(item)->getRepr()->attribute("style"));
// remember the position of the item
gint pos = SP_OBJECT_REPR(item)->position();
@@ -1425,11 +1427,11 @@ sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updat
{
// pas vraiment de points sur le resultat
// donc il ne reste rien
- sp_document_done(sp_desktop_document(desktop),
- (updating ? SP_VERB_SELECTION_LINKED_OFFSET
- : SP_VERB_SELECTION_DYNAMIC_OFFSET),
- (updating ? _("Create linked offset")
- : _("Create dynamic offset")));
+ DocumentUndo::done(sp_desktop_document(desktop),
+ (updating ? SP_VERB_SELECTION_LINKED_OFFSET
+ : SP_VERB_SELECTION_DYNAMIC_OFFSET),
+ (updating ? _("Create linked offset")
+ : _("Create dynamic offset")));
selection->clear();
delete res;
@@ -1443,7 +1445,7 @@ sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updat
tstr[79] = '\0';
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
repr = xml_doc->createElement("svg:path");
repr->setAttribute("sodipodi:type", "inkscape:offset");
sp_repr_set_svg_double(repr, "inkscape:radius", ( expand > 0
@@ -1457,7 +1459,9 @@ sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updat
g_free(str);
if ( updating ) {
- char const *id = SP_OBJECT(item)->repr->attribute("id");
+
+ //XML Tree being used directly here while it shouldn't be
+ char const *id = SP_OBJECT(item)->getRepr()->attribute("id");
char const *uri = g_strdup_printf("#%s", id);
repr->setAttribute("xlink:href", uri);
g_free((void *) uri);
@@ -1478,11 +1482,11 @@ sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updat
if ( updating ) {
// on conserve l'original
// we reapply the transform to the original (offset will feel it)
- sp_item_write_transform(item, SP_OBJECT_REPR(item), transform);
+ item->doWriteTransform(SP_OBJECT_REPR(item), transform);
} else {
// delete original, apply the transform to the offset
SP_OBJECT(item)->deleteObject(false);
- sp_item_write_transform(nitem, repr, transform);
+ nitem->doWriteTransform(repr, transform);
}
// The object just created from a temporary repr is only a seed.
@@ -1494,11 +1498,11 @@ sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updat
selection->set(nitem);
}
- sp_document_done(sp_desktop_document(desktop),
- (updating ? SP_VERB_SELECTION_LINKED_OFFSET
- : SP_VERB_SELECTION_DYNAMIC_OFFSET),
- (updating ? _("Create linked offset")
- : _("Create dynamic offset")));
+ DocumentUndo::done(sp_desktop_document(desktop),
+ (updating ? SP_VERB_SELECTION_LINKED_OFFSET
+ : SP_VERB_SELECTION_DYNAMIC_OFFSET),
+ (updating ? _("Create linked offset")
+ : _("Create dynamic offset")));
delete res;
delete orig;
@@ -1540,7 +1544,7 @@ sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset)
SPCurve *curve = NULL;
if (SP_IS_SHAPE(item)) {
- curve = sp_shape_get_curve(SP_SHAPE(item));
+ curve = SP_SHAPE(item)->getCurve();
if (curve == NULL)
continue;
}
@@ -1552,7 +1556,7 @@ sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset)
Geom::Matrix const transform(item->transform);
- sp_item_write_transform(item, SP_OBJECT_REPR(item), Geom::identity());
+ item->doWriteTransform(SP_OBJECT_REPR(item), Geom::identity());
gchar *style = g_strdup(SP_OBJECT_REPR(item)->attribute("style"));
@@ -1707,7 +1711,7 @@ sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset)
tstr[79] = '\0';
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
repr->setAttribute("style", style);
@@ -1725,7 +1729,7 @@ sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset)
SPItem *newitem = (SPItem *) sp_desktop_document(desktop)->getObjectByRepr(repr);
// reapply the transform
- sp_item_write_transform(newitem, repr, transform);
+ newitem->doWriteTransform(repr, transform);
repr->setAttribute("id", id);
@@ -1739,9 +1743,9 @@ sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset)
}
if (did) {
- sp_document_done(sp_desktop_document(desktop),
- (expand ? SP_VERB_SELECTION_OFFSET : SP_VERB_SELECTION_INSET),
- (expand ? _("Outset path") : _("Inset path")));
+ DocumentUndo::done(sp_desktop_document(desktop),
+ (expand ? SP_VERB_SELECTION_OFFSET : SP_VERB_SELECTION_INSET),
+ (expand ? _("Outset path") : _("Inset path")));
} else {
desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("<b>No paths</b> to inset/outset in the selection."));
return;
@@ -1782,7 +1786,7 @@ sp_selected_path_simplify_item(SPDesktop *desktop,
SPCurve *curve = NULL;
if (SP_IS_SHAPE(item)) {
- curve = sp_shape_get_curve(SP_SHAPE(item));
+ curve = SP_SHAPE(item)->getCurve();
if (!curve)
return false;
}
@@ -1794,7 +1798,7 @@ sp_selected_path_simplify_item(SPDesktop *desktop,
}
// correct virtual size by full transform (bug #166937)
- size /= sp_item_i2doc_affine(item).descrim();
+ size /= item->i2doc_affine().descrim();
// save the transform, to re-apply it after simplification
Geom::Matrix const transform(item->transform);
@@ -1804,7 +1808,7 @@ sp_selected_path_simplify_item(SPDesktop *desktop,
this is necessary so that the item is transformed twice back and forth,
allowing all compensations to cancel out regardless of the preferences
*/
- sp_item_write_transform(item, SP_OBJECT_REPR(item), Geom::identity());
+ item->doWriteTransform(SP_OBJECT_REPR(item), Geom::identity());
gchar *style = g_strdup(SP_OBJECT_REPR(item)->attribute("style"));
gchar *mask = g_strdup(SP_OBJECT_REPR(item)->attribute("mask"));
@@ -1844,7 +1848,7 @@ sp_selected_path_simplify_item(SPDesktop *desktop,
orig->Simplify(threshold * size);
}
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
// restore style, mask and clip-path
@@ -1884,7 +1888,7 @@ sp_selected_path_simplify_item(SPDesktop *desktop,
SPItem *newitem = (SPItem *) sp_desktop_document(desktop)->getObjectByRepr(repr);
// reapply the transform
- sp_item_write_transform(newitem, repr, transform);
+ newitem->doWriteTransform(repr, transform);
// restore title & description
if (title) {
@@ -1949,7 +1953,7 @@ sp_selected_path_simplify_items(SPDesktop *desktop,
continue;
if (simplifyIndividualPaths) {
- Geom::OptRect itemBbox = item->getBounds(sp_item_i2d_affine(item));
+ Geom::OptRect itemBbox = item->getBounds(item->i2d_affine());
if (itemBbox) {
simplifySize = L2(itemBbox->dimensions());
} else {
@@ -1999,8 +2003,8 @@ sp_selected_path_simplify_selection(SPDesktop *desktop, float threshold, bool ju
breakableAngles, true);
if (didSomething)
- sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_SIMPLIFY,
- _("Simplify"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_SIMPLIFY,
+ _("Simplify"));
else
desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("<b>No paths</b> to simplify in the selection."));
@@ -2094,7 +2098,7 @@ pathvector_for_curve(SPItem *item, SPCurve *curve, bool doTransformation, bool t
if (doTransformation) {
if (transformFull) {
- *dest *= extraPreAffine * sp_item_i2doc_affine(item) * extraPostAffine;
+ *dest *= extraPreAffine * item->i2doc_affine() * extraPostAffine;
} else {
*dest *= extraPreAffine * (Geom::Matrix)item->transform * extraPostAffine;
}
@@ -2115,7 +2119,7 @@ SPCurve* curve_for_item(SPItem *item)
if (SP_IS_PATH(item)) {
curve = sp_path_get_curve_for_edit(SP_PATH(item));
} else {
- curve = sp_shape_get_curve(SP_SHAPE(item));
+ curve = SP_SHAPE(item)->getCurve();
}
}
else if (SP_IS_TEXT(item) || SP_IS_FLOWTEXT(item))
diff --git a/src/spray-context.cpp b/src/spray-context.cpp
index 0b70d1a84..9a499a64c 100644
--- a/src/spray-context.cpp
+++ b/src/spray-context.cpp
@@ -10,6 +10,8 @@
* Vincent MONTAGNE
* Pierre BARBRY-BLOT
* Steren GIANNINI (steren.giannini@gmail.com)
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2009 authors
*
@@ -73,6 +75,8 @@
#include "helper/action.h"
#include <iostream>
+
+using Inkscape::DocumentUndo;
using namespace std;
@@ -143,9 +147,9 @@ void sp_spray_rotate_rel(Geom::Point c,SPDesktop */*desktop*/,SPItem *item, Geom
Geom::Translate const s(c);
Geom::Matrix affine = Geom::Matrix(s).inverse() * Geom::Matrix(rotation) * Geom::Matrix(s);
// Rotate item.
- sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * (Geom::Matrix)affine);
+ item->set_i2d_affine(item->i2d_affine() * (Geom::Matrix)affine);
// Use each item's own transform writer, consistent with sp_selection_apply_affine()
- sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform);
+ item->doWriteTransform(SP_OBJECT_REPR(item), item->transform);
// Restore the center position (it's changed because the bbox center changed)
if (item->isCenterSet()) {
item->setCenter(c);
@@ -157,8 +161,8 @@ void sp_spray_rotate_rel(Geom::Point c,SPDesktop */*desktop*/,SPItem *item, Geom
void sp_spray_scale_rel(Geom::Point c, SPDesktop */*desktop*/, SPItem *item, Geom::Scale const &scale)
{
Geom::Translate const s(c);
- sp_item_set_i2d_affine(item, sp_item_i2d_affine(item) * s.inverse() * scale * s );
- sp_item_write_transform(item, SP_OBJECT_REPR(item), item->transform);
+ item->set_i2d_affine(item->i2d_affine() * s.inverse() * scale * s );
+ item->doWriteTransform(SP_OBJECT_REPR(item), item->transform);
}
static void sp_spray_context_init(SPSprayContext *tc)
@@ -471,14 +475,14 @@ bool sp_spray_recursive(SPDesktop *desktop,
dr=dr*radius;
if (mode == SPRAY_MODE_COPY) {
- Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect a = item->getBounds(item->i2doc_affine());
if (a) {
SPItem *item_copied;
if(_fid<=population)
{
// duplicate
SPDocument *doc = SP_OBJECT_DOCUMENT(item);
- Inkscape::XML::Document* xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document* xml_doc = doc->getReprDoc();
Inkscape::XML::Node *old_repr = SP_OBJECT_REPR(item);
Inkscape::XML::Node *parent = old_repr->parent();
Inkscape::XML::Node *copy = old_repr->duplicate(xml_doc);
@@ -519,11 +523,11 @@ bool sp_spray_recursive(SPDesktop *desktop,
i++;
}
SPDocument *doc = SP_OBJECT_DOCUMENT(father);
- Inkscape::XML::Document* xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document* xml_doc = doc->getReprDoc();
Inkscape::XML::Node *old_repr = SP_OBJECT_REPR(father);
Inkscape::XML::Node *parent = old_repr->parent();
- Geom::OptRect a = father->getBounds(sp_item_i2doc_affine(father));
+ Geom::OptRect a = father->getBounds(father->i2doc_affine());
if (a) {
if (i==2) {
Inkscape::XML::Node *copy1 = old_repr->duplicate(xml_doc);
@@ -561,12 +565,12 @@ bool sp_spray_recursive(SPDesktop *desktop,
}
}
} else if (mode == SPRAY_MODE_CLONE) {
- Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect a = item->getBounds(item->i2doc_affine());
if (a) {
if(_fid<=population) {
SPItem *item_copied;
SPDocument *doc = SP_OBJECT_DOCUMENT(item);
- Inkscape::XML::Document* xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document* xml_doc = doc->getReprDoc();
Inkscape::XML::Node *old_repr = SP_OBJECT_REPR(item);
Inkscape::XML::Node *parent = old_repr->parent();
@@ -869,16 +873,16 @@ case GDK_SCROLL_LEFT:
tc->has_dilated = false;
switch (tc->mode) {
case SPRAY_MODE_COPY:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_SPRAY, _("Spray with copies"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_SPRAY, _("Spray with copies"));
break;
case SPRAY_MODE_CLONE:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_SPRAY, _("Spray with clones"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_SPRAY, _("Spray with clones"));
break;
case SPRAY_MODE_SINGLE_PATH:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_SPRAY, _("Spray in single path"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_SPRAY, _("Spray in single path"));
break;
}
}
diff --git a/src/star-context.cpp b/src/star-context.cpp
index d09a42b11..9f4afb94c 100644
--- a/src/star-context.cpp
+++ b/src/star-context.cpp
@@ -1,5 +1,3 @@
-#define __SP_STAR_CONTEXT_C__
-
/*
* Star drawing context
*
@@ -7,6 +5,8 @@
* Mitsuru Oka <oka326@parkcity.ne.jp>
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2001-2002 Mitsuru Oka
@@ -47,6 +47,8 @@
#include "star-context.h"
+using Inkscape::DocumentUndo;
+
static void sp_star_context_class_init (SPStarContextClass * klass);
static void sp_star_context_init (SPStarContext * star_context);
static void sp_star_context_dispose (GObject *object);
@@ -425,17 +427,17 @@ static void sp_star_drag(SPStarContext *sc, Geom::Point p, guint state)
return;
}
- /* Create object */
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_EVENT_CONTEXT_DOCUMENT(sc));
+ // Create object
+ Inkscape::XML::Document *xml_doc = SP_EVENT_CONTEXT_DOCUMENT(sc)->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:path");
repr->setAttribute("sodipodi:type", "star");
- /* Set style */
+ // Set style
sp_desktop_apply_style_tool(desktop, repr, "/tools/shapes/star", false);
sc->item = SP_ITEM(desktop->currentLayer()->appendChildRepr(repr));
Inkscape::GC::release(repr);
- sc->item->transform = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
+ sc->item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
sc->item->updateRepr();
sp_canvas_force_full_redraw_after_interruptions(desktop->canvas, 5);
@@ -495,15 +497,15 @@ sp_star_finish (SPStarContext * sc)
SPDesktop *desktop = SP_EVENT_CONTEXT(sc)->desktop;
SPObject *object = SP_OBJECT(sc->item);
- sp_shape_set_shape(SP_SHAPE(sc->item));
+ (SP_SHAPE(sc->item))->setShape();
object->updateRepr(SP_OBJECT_WRITE_EXT);
sp_canvas_end_forced_full_redraws(desktop->canvas);
sp_desktop_selection(desktop)->set(sc->item);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
- _("Create star"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ _("Create star"));
sc->item = NULL;
}
@@ -528,7 +530,7 @@ static void sp_star_cancel(SPStarContext *sc)
sp_canvas_end_forced_full_redraws(desktop->canvas);
- sp_document_cancel(sp_desktop_document(desktop));
+ DocumentUndo::cancel(sp_desktop_document(desktop));
}
/*
diff --git a/src/style-test.h b/src/style-test.h
index 67a4d7014..064773d1d 100644
--- a/src/style-test.h
+++ b/src/style-test.h
@@ -1,4 +1,3 @@
-
#ifndef SEEN_STYLE_TEST_H
#define SEEN_STYLE_TEST_H
@@ -22,7 +21,7 @@ public:
{
if ( _doc )
{
- sp_document_unref( _doc );
+ _doc->doUnref();
_doc = 0;
}
}
diff --git a/src/style.cpp b/src/style.cpp
index 551dd6585..d254ab6f4 100644
--- a/src/style.cpp
+++ b/src/style.cpp
@@ -5,6 +5,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Peter Moulder <pmoulder@mail.csse.monash.edu.au>
* bulia byak <buliabyak@users.sf.net>
+ * Abhishek Sharma
*
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
@@ -1015,7 +1016,9 @@ sp_style_merge_property(SPStyle *style, gint id, gchar const *val)
* Fixes Bug #324849
*/
g_warning("attribute 'clip-path' given as CSS");
- style->object->repr->setAttribute("clip-path", val);
+
+ //XML Tree being directly used here.
+ style->object->getRepr()->setAttribute("clip-path", val);
break;
case SP_PROP_CLIP_RULE:
g_warning("Unimplemented style property SP_PROP_CLIP_RULE: value: %s", val);
@@ -1025,7 +1028,9 @@ sp_style_merge_property(SPStyle *style, gint id, gchar const *val)
* See comment for SP_PROP_CLIP_PATH
*/
g_warning("attribute 'mask' given as CSS");
- style->object->repr->setAttribute("mask", val);
+
+ //XML Tree being directly used here.
+ style->object->getRepr()->setAttribute("mask", val);
break;
case SP_PROP_OPACITY:
if (!style->opacity.set) {
@@ -1284,9 +1289,11 @@ sp_style_merge_from_object_stylesheet(SPStyle *const style, SPObject const *cons
}
CRPropList *props = NULL;
+
+ //XML Tree being directly used here while it shouldn't be.
CRStatus status = cr_sel_eng_get_matched_properties_from_cascade(sel_eng,
object->document->style_cascade,
- object->repr,
+ object->getRepr(),
&props);
g_return_if_fail(status == CR_OK);
/// \todo Check what errors can occur, and handle them properly.
diff --git a/src/svg-view-widget.cpp b/src/svg-view-widget.cpp
index 10d997656..d2a31966a 100644
--- a/src/svg-view-widget.cpp
+++ b/src/svg-view-widget.cpp
@@ -1,11 +1,10 @@
-#define __SP_SVG_VIEW_C__
-
/** \file
* Functions and callbacks for generic SVG view and widget
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Ralf Stephan <ralf@ark.in-berlin.de>
+ * Abhishek Sharma
*
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
@@ -149,8 +148,8 @@ sp_svg_view_widget_size_request (GtkWidget *widget, GtkRequisition *req)
gdouble width, height;
svgv = static_cast<SPSVGView*> (v);
- width = sp_document_width (v->doc()) * svgv->_hscale;
- height = sp_document_height (v->doc()) * svgv->_vscale;
+ width = (v->doc())->getWidth () * svgv->_hscale;
+ height = (v->doc())->getHeight () * svgv->_vscale;
if (width <= vw->maxwidth) {
hpol = GTK_POLICY_NEVER;
diff --git a/src/svg-view.cpp b/src/svg-view.cpp
index bd46dd17a..ef87b38ef 100644
--- a/src/svg-view.cpp
+++ b/src/svg-view.cpp
@@ -1,11 +1,11 @@
-#define __SP_SVG_VIEW_C__
-
/** \file
* Functions and callbacks for generic SVG view and widget
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Ralf Stephan <ralf@ark.in-berlin.de>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
@@ -41,7 +41,7 @@ SPSVGView::~SPSVGView()
{
if (doc() && _drawing)
{
- sp_item_invoke_hide (SP_ITEM (sp_document_root (doc())), _dkey);
+ SP_ITEM( doc()->getRoot() )->invoke_hide(_dkey);
_drawing = NULL;
}
}
@@ -84,12 +84,12 @@ void
SPSVGView::doRescale (bool event)
{
if (!doc()) return;
- if (sp_document_width (doc()) < 1e-9) return;
- if (sp_document_height (doc()) < 1e-9) return;
+ if (doc()->getWidth () < 1e-9) return;
+ if (doc()->getHeight () < 1e-9) return;
if (_rescale) {
- _hscale = _width / sp_document_width (doc());
- _vscale = _height / sp_document_height (doc());
+ _hscale = _width / doc()->getWidth ();
+ _vscale = _height / doc()->getHeight ();
if (_keepaspect) {
if (_hscale > _vscale) {
_hscale = _vscale;
@@ -104,8 +104,8 @@ SPSVGView::doRescale (bool event)
}
if (event) {
- emitResized (sp_document_width (doc()) * _hscale,
- sp_document_height (doc()) * _vscale);
+ emitResized (doc()->getWidth () * _hscale,
+ doc()->getHeight () * _vscale);
}
}
@@ -152,7 +152,7 @@ arena_handler (SPCanvasArena */*arena*/, NRArenaItem *ai, GdkEvent *event, SPSVG
spev.type = SP_EVENT_ACTIVATE;
if ( spitem != 0 )
{
- sp_item_event (spitem, &spev);
+ spitem->emitEvent (spev);
}
}
}
@@ -166,7 +166,7 @@ arena_handler (SPCanvasArena */*arena*/, NRArenaItem *ai, GdkEvent *event, SPSVG
spev.data = svgview;
if ( spitem != 0 )
{
- sp_item_event (spitem, &spev);
+ spitem->emitEvent (spev);
}
break;
case GDK_LEAVE_NOTIFY:
@@ -174,7 +174,7 @@ arena_handler (SPCanvasArena */*arena*/, NRArenaItem *ai, GdkEvent *event, SPSVG
spev.data = svgview;
if ( spitem != 0 )
{
- sp_item_event (spitem, &spev);
+ spitem->emitEvent (spev);
}
break;
default:
@@ -191,7 +191,7 @@ void
SPSVGView::setDocument (SPDocument *document)
{
if (doc()) {
- sp_item_invoke_hide (SP_ITEM (sp_document_root (doc())), _dkey);
+ SP_ITEM( doc()->getRoot() )->invoke_hide(_dkey);
}
if (!_drawing) {
@@ -200,8 +200,7 @@ SPSVGView::setDocument (SPDocument *document)
}
if (document) {
- NRArenaItem *ai = sp_item_invoke_show (
- SP_ITEM (sp_document_root (document)),
+ NRArenaItem *ai = SP_ITEM( document->getRoot() )->invoke_show(
SP_CANVAS_ARENA (_drawing)->arena,
_dkey,
SP_ITEM_SHOW_DISPLAY);
diff --git a/src/svg/svg-path-geom-test.h b/src/svg/svg-path-geom-test.h
index 239a975f6..5735b6017 100644
--- a/src/svg/svg-path-geom-test.h
+++ b/src/svg/svg-path-geom-test.h
@@ -407,7 +407,7 @@ private:
bool bpathEqual(Geom::PathVector const &a, Geom::PathVector const &b, double eps = 1e-16) {
if (a.size() != b.size()) {
char temp[100];
- sprintf(temp, "PathVectors not the same size: %u != %u", a.size(), b.size());
+ sprintf(temp, "PathVectors not the same size: %u != %u", static_cast<unsigned int>(a.size()),static_cast<unsigned int>( b.size()));
TS_FAIL(temp);
return false;
}
@@ -416,19 +416,19 @@ private:
Geom::Path const &pb = b[i];
if (pa.closed() && !pb.closed()) {
char temp[100];
- sprintf(temp, "Left subpath is closed, right subpath is open. Subpath: %u", i);
+ sprintf(temp, "Left subpath is closed, right subpath is open. Subpath: %u", static_cast<unsigned int>(i));
TS_FAIL(temp);
return false;
}
if (!pa.closed() && pb.closed()) {
char temp[100];
- sprintf(temp, "Right subpath is closed, left subpath is open. Subpath: %u", i);
+ sprintf(temp, "Right subpath is closed, left subpath is open. Subpath: %u", static_cast<unsigned int>(i));
TS_FAIL(temp);
return false;
}
if (pa.size() != pb.size()) {
char temp[100];
- sprintf(temp, "Not the same number of segments: %u != %u, subpath: %u", pa.size(), pb.size(), i);
+ sprintf(temp, "Not the same number of segments: %u != %u, subpath: %u", static_cast<unsigned int>(pa.size()), static_cast<unsigned int>(pb.size()), static_cast<unsigned int>(i));
TS_FAIL(temp);
return false;
}
@@ -442,13 +442,13 @@ private:
Geom::LineSegment const *lb = dynamic_cast<Geom::LineSegment const*>(cb);
if (!Geom::are_near((*la)[0],(*lb)[0], eps)) {
char temp[200];
- sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[0][Geom::X], (*la)[0][Geom::Y], (*lb)[0][Geom::X], (*lb)[0][Geom::Y], i, j);
+ sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[0][Geom::X], (*la)[0][Geom::Y], (*lb)[0][Geom::X], (*lb)[0][Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
if (!Geom::are_near((*la)[1],(*lb)[1], eps)) {
char temp[200];
- sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[1][Geom::X], (*la)[1][Geom::Y], (*lb)[1][Geom::X], (*lb)[1][Geom::Y], i, j);
+ sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[1][Geom::X], (*la)[1][Geom::Y], (*lb)[1][Geom::X], (*lb)[1][Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
@@ -458,13 +458,13 @@ private:
Geom::HLineSegment const *lb = dynamic_cast<Geom::HLineSegment const*>(cb);
if (!Geom::are_near((*la).initialPoint(),(*lb).initialPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
if (!Geom::are_near((*la).finalPoint(),(*lb).finalPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
@@ -474,13 +474,13 @@ private:
Geom::VLineSegment const *lb = dynamic_cast<Geom::VLineSegment const*>(cb);
if (!Geom::are_near((*la).initialPoint(),(*lb).initialPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
if (!Geom::are_near((*la).finalPoint(),(*lb).finalPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
@@ -490,25 +490,25 @@ private:
Geom::CubicBezier const *lb = dynamic_cast<Geom::CubicBezier const*>(cb);
if (!Geom::are_near((*la)[0],(*lb)[0], eps)) {
char temp[200];
- sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[0][Geom::X], (*la)[0][Geom::Y], (*lb)[0][Geom::X], (*lb)[0][Geom::Y], i, j);
+ sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[0][Geom::X], (*la)[0][Geom::Y], (*lb)[0][Geom::X], (*lb)[0][Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
if (!Geom::are_near((*la)[1],(*lb)[1], eps)) {
char temp[200];
- sprintf(temp, "Different 1st control point: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[1][Geom::X], (*la)[1][Geom::Y], (*lb)[1][Geom::X], (*lb)[1][Geom::Y], i, j);
+ sprintf(temp, "Different 1st control point: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[1][Geom::X], (*la)[1][Geom::Y], (*lb)[1][Geom::X], (*lb)[1][Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
if (!Geom::are_near((*la)[2],(*lb)[2], eps)) {
char temp[200];
- sprintf(temp, "Different 2nd control point: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[2][Geom::X], (*la)[2][Geom::Y], (*lb)[2][Geom::X], (*lb)[2][Geom::Y], i, j);
+ sprintf(temp, "Different 2nd control point: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[2][Geom::X], (*la)[2][Geom::Y], (*lb)[2][Geom::X], (*lb)[2][Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
if (!Geom::are_near((*la)[3],(*lb)[3], eps)) {
char temp[200];
- sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[3][Geom::X], (*la)[3][Geom::Y], (*lb)[3][Geom::X], (*lb)[3][Geom::Y], i, j);
+ sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la)[3][Geom::X], (*la)[3][Geom::Y], (*lb)[3][Geom::X], (*lb)[3][Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
@@ -516,7 +516,7 @@ private:
else
{
char temp[200];
- sprintf(temp, "Unknown curve type: %s, subpath: %u, segment: %u", typeid(*ca).name(), i, j);
+ sprintf(temp, "Unknown curve type: %s, subpath: %u, segment: %u", typeid(*ca).name(), static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
}
}
@@ -527,38 +527,38 @@ private:
if (Geom::HLineSegment const *lb = dynamic_cast<Geom::HLineSegment const*>(cb)) {
if (!Geom::are_near((*la).initialPoint(),(*lb).initialPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
if (!Geom::are_near((*la).finalPoint(),(*lb).finalPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
char temp[200];
- sprintf(temp, "A LineSegment and an HLineSegment have been considered equal. Subpath: %u, segment: %u", i, j);
+ sprintf(temp, "A LineSegment and an HLineSegment have been considered equal. Subpath: %u, segment: %u", static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_TRACE(temp);
} else if (Geom::VLineSegment const *lb = dynamic_cast<Geom::VLineSegment const*>(cb)) {
if (!Geom::are_near((*la).initialPoint(),(*lb).initialPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
if (!Geom::are_near((*la).finalPoint(),(*lb).finalPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
char temp[200];
- sprintf(temp, "A LineSegment and a VLineSegment have been considered equal. Subpath: %u, segment: %u", i, j);
+ sprintf(temp, "A LineSegment and a VLineSegment have been considered equal. Subpath: %u, segment: %u", static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_TRACE(temp);
} else {
char temp[200];
- sprintf(temp, "Different curve types: %s != %s, subpath: %u, segment: %u", typeid(*ca).name(), typeid(*cb).name(), i, j);
+ sprintf(temp, "Different curve types: %s != %s, subpath: %u, segment: %u", typeid(*ca).name(), typeid(*cb).name(), static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
}
}
@@ -567,44 +567,44 @@ private:
if (Geom::HLineSegment const *la = dynamic_cast<Geom::HLineSegment const*>(ca)) {
if (!Geom::are_near((*la).initialPoint(),(*lb).initialPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
if (!Geom::are_near((*la).finalPoint(),(*lb).finalPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
char temp[200];
- sprintf(temp, "An HLineSegment and a LineSegment have been considered equal. Subpath: %u, segment: %u", i, j);
+ sprintf(temp, "An HLineSegment and a LineSegment have been considered equal. Subpath: %u, segment: %u", static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_TRACE(temp);
} else if (Geom::VLineSegment const *la = dynamic_cast<Geom::VLineSegment const*>(ca)) {
if (!Geom::are_near((*la).initialPoint(),(*lb).initialPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different start of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).initialPoint()[Geom::X], (*la).initialPoint()[Geom::Y], (*lb).initialPoint()[Geom::X], (*lb).initialPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
if (!Geom::are_near((*la).finalPoint(),(*lb).finalPoint(), eps)) {
char temp[200];
- sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], i, j);
+ sprintf(temp, "Different end of segment: (%g,%g) != (%g,%g), subpath: %u, segment: %u", (*la).finalPoint()[Geom::X], (*la).finalPoint()[Geom::Y], (*lb).finalPoint()[Geom::X], (*lb).finalPoint()[Geom::Y], static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
char temp[200];
- sprintf(temp, "A VLineSegment and a LineSegment have been considered equal. Subpath: %u, segment: %u", i, j);
+ sprintf(temp, "A VLineSegment and a LineSegment have been considered equal. Subpath: %u, segment: %u", static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_TRACE(temp);
} else {
char temp[200];
- sprintf(temp, "Different curve types: %s != %s, subpath: %u, segment: %u", typeid(*ca).name(), typeid(*cb).name(), i, j);
+ sprintf(temp, "Different curve types: %s != %s, subpath: %u, segment: %u", typeid(*ca).name(), typeid(*cb).name(), static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
return false;
}
} else {
char temp[200];
- sprintf(temp, "Different curve types: %s != %s, subpath: %u, segment: %u", typeid(*ca).name(), typeid(*cb).name(), i, j);
+ sprintf(temp, "Different curve types: %s != %s, subpath: %u, segment: %u", typeid(*ca).name(), typeid(*cb).name(), static_cast<unsigned int>(i), static_cast<unsigned int>(j));
TS_FAIL(temp);
}
}
diff --git a/src/test-helpers.h b/src/test-helpers.h
index 19dacd9c8..e1b852162 100644
--- a/src/test-helpers.h
+++ b/src/test-helpers.h
@@ -1,4 +1,3 @@
-
#ifndef SEEN_TEST_HELPERS_H
#define SEEN_TEST_HELPERS_H
@@ -32,7 +31,7 @@ T* createSuiteAndDocument( void (*fun)(T*&) )
static_cast<void>(g_object_new(inkscape_get_type(), NULL));
}
- SPDocument* tmp = sp_document_new( NULL, TRUE, true );
+ SPDocument* tmp = SPDocument::createNewDoc( NULL, TRUE, true );
if ( tmp ) {
fun( suite );
if ( suite )
@@ -41,7 +40,7 @@ T* createSuiteAndDocument( void (*fun)(T*&) )
}
else
{
- sp_document_unref( tmp );
+ tmp->doUnref();
}
}
diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp
index 363c49296..81737c890 100644
--- a/src/text-chemistry.cpp
+++ b/src/text-chemistry.cpp
@@ -1,10 +1,10 @@
-#define __SP_TEXT_CHEMISTRY_C__
-
/*
* Text commands
*
* Authors:
* bulia byak
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004 authors
*
@@ -36,6 +36,7 @@
#include "sp-flowdiv.h"
#include "sp-tspan.h"
+using Inkscape::DocumentUndo;
SPItem *
text_in_selection(Inkscape::Selection *selection)
@@ -97,7 +98,7 @@ text_put_on_path()
SPItem *text = text_or_flowtext_in_selection(selection);
SPItem *shape = shape_in_selection(selection);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
if (!text || !shape || g_slist_length((GSList *) selection->itemList()) != 2) {
sp_desktop_message_stack(desktop)->flash(Inkscape::WARNING_MESSAGE, _("Select <b>a text and a path</b> to put text on path."));
@@ -132,13 +133,13 @@ text_put_on_path()
parent->appendChild(repr);
SPItem *new_item = (SPItem *) sp_desktop_document(desktop)->getObjectByRepr(repr);
- sp_item_write_transform(new_item, repr, text->transform);
+ new_item->doWriteTransform(repr, text->transform);
SP_OBJECT(new_item)->updateRepr();
Inkscape::GC::release(repr);
text->deleteObject(); // delete the orignal flowtext
- sp_document_ensure_up_to_date(sp_desktop_document(desktop));
+ sp_desktop_document(desktop)->ensureUpToDate();
selection->clear();
@@ -187,8 +188,8 @@ text_put_on_path()
SP_OBJECT_REPR(text)->setAttribute("x", NULL);
SP_OBJECT_REPR(text)->setAttribute("y", NULL);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("Put text on path"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("Put text on path"));
g_slist_free(text_reprs);
}
@@ -214,7 +215,7 @@ text_remove_from_path()
continue;
}
- SPObject *tp = sp_object_first_child(SP_OBJECT(items->data));
+ SPObject *tp = SP_OBJECT(items->data)->firstChild();
did = true;
@@ -224,8 +225,8 @@ text_remove_from_path()
if (!did) {
sp_desktop_message_stack(desktop)->flash(Inkscape::ERROR_MESSAGE, _("<b>No texts-on-paths</b> in the selection."));
} else {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("Remove text from path"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("Remove text from path"));
selection->setList(g_slist_copy((GSList *) selection->itemList())); // reselect to update statusbar description
}
}
@@ -251,7 +252,7 @@ text_remove_all_kerns_recursively(SPObject *o)
g_strfreev(xa_comma);
}
- for (SPObject *i = sp_object_first_child(o); i != NULL; i = SP_OBJECT_NEXT(i)) {
+ for (SPObject *i = o->firstChild(); i != NULL; i = i->getNext()) {
text_remove_all_kerns_recursively(i);
}
}
@@ -288,8 +289,8 @@ text_remove_all_kerns()
if (!did) {
sp_desktop_message_stack(desktop)->flash(Inkscape::ERROR_MESSAGE, _("Select <b>text(s)</b> to remove kerns from."));
} else {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("Remove manual kerns"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("Remove manual kerns"));
}
}
@@ -301,7 +302,7 @@ text_flow_into_shape()
return;
SPDocument *doc = sp_desktop_document (desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -376,8 +377,8 @@ text_flow_into_shape()
SP_OBJECT(text)->deleteObject (true);
- sp_document_done(doc, SP_VERB_CONTEXT_TEXT,
- _("Flow text into shape"));
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_TEXT,
+ _("Flow text into shape"));
sp_desktop_selection(desktop)->set(SP_ITEM(root_object));
@@ -393,7 +394,7 @@ text_unflow ()
return;
SPDocument *doc = sp_desktop_document (desktop);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::Selection *selection = sp_desktop_selection(desktop);
@@ -432,7 +433,7 @@ text_unflow ()
rtext->setAttribute("style", SP_OBJECT_REPR(flowtext)->attribute("style")); // fixme: transfer style attrs too; and from descendants
Geom::OptRect bbox;
- sp_item_invoke_bbox(SP_ITEM(flowtext), bbox, sp_item_i2doc_affine(SP_ITEM(flowtext)), TRUE);
+ SP_ITEM(flowtext)->invoke_bbox(bbox, SP_ITEM(flowtext)->i2doc_affine(), TRUE);
if (bbox) {
Geom::Point xy = bbox->min();
sp_repr_set_svg_double(rtext, "x", xy[Geom::X]);
@@ -472,8 +473,8 @@ text_unflow ()
g_slist_free (old_objs);
g_slist_free (new_objs);
- sp_document_done(doc, SP_VERB_CONTEXT_TEXT,
- _("Unflow flowed text"));
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_TEXT,
+ _("Unflow flowed text"));
}
void
@@ -517,7 +518,7 @@ flowtext_to_text()
parent->addChild(repr, SP_OBJECT_REPR(item));
SPItem *new_item = (SPItem *) sp_desktop_document(desktop)->getObjectByRepr(repr);
- sp_item_write_transform(new_item, repr, item->transform);
+ new_item->doWriteTransform(repr, item->transform);
SP_OBJECT(new_item)->updateRepr();
Inkscape::GC::release(repr);
@@ -529,9 +530,9 @@ flowtext_to_text()
g_slist_free(items);
if (did) {
- sp_document_done(sp_desktop_document(desktop),
- SP_VERB_OBJECT_FLOWTEXT_TO_TEXT,
- _("Convert flowed text to text"));
+ DocumentUndo::done(sp_desktop_document(desktop),
+ SP_VERB_OBJECT_FLOWTEXT_TO_TEXT,
+ _("Convert flowed text to text"));
selection->setReprList(reprs);
} else {
sp_desktop_message_stack(desktop)->
diff --git a/src/text-context.cpp b/src/text-context.cpp
index 9d94e0e78..66e5f9450 100644
--- a/src/text-context.cpp
+++ b/src/text-context.cpp
@@ -1,11 +1,11 @@
-#define __SP_TEXT_CONTEXT_C__
-
/*
* SPTextContext
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2005 authors
* Copyright (C) 2001 Ximian, Inc.
@@ -54,6 +54,7 @@
#include "text-context.h"
+using Inkscape::DocumentUndo;
static void sp_text_context_class_init(SPTextContextClass *klass);
static void sp_text_context_init(SPTextContext *text_context);
@@ -340,7 +341,7 @@ sp_text_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEve
case GDK_BUTTON_PRESS:
if (event->button.button == 1 && !event_context->space_panning) {
// find out clicked item, disregarding groups
- item_ungrouped = desktop->item_at_point(Geom::Point(event->button.x, event->button.y), TRUE);
+ item_ungrouped = desktop->getItemAtPoint(Geom::Point(event->button.x, event->button.y), TRUE);
if (SP_IS_TEXT(item_ungrouped) || SP_IS_FLOWTEXT(item_ungrouped)) {
sp_desktop_selection(desktop)->set(item_ungrouped);
if (tc->text) {
@@ -423,7 +424,7 @@ sp_text_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEve
break;
}
// find out item under mouse, disregarding groups
- item_ungrouped = desktop->item_at_point(Geom::Point(event->button.x, event->button.y), TRUE);
+ item_ungrouped = desktop->getItemAtPoint(Geom::Point(event->button.x, event->button.y), TRUE);
if (SP_IS_TEXT(item_ungrouped) || SP_IS_FLOWTEXT(item_ungrouped)) {
Inkscape::Text::Layout const *layout = te_get_layout(item_ungrouped);
@@ -432,7 +433,7 @@ sp_text_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEve
} else {
SP_CTRLRECT(tc->indicator)->setColor(0x0000ff7f, false, 0);
}
- Geom::OptRect ibbox = sp_item_bbox_desktop(item_ungrouped);
+ Geom::OptRect ibbox = item_ungrouped->getBboxDesktop();
if (ibbox) {
SP_CTRLRECT(tc->indicator)->setRectangle(*ibbox);
}
@@ -473,7 +474,7 @@ sp_text_context_setup_text(SPTextContext *tc)
SPEventContext *ec = SP_EVENT_CONTEXT(tc);
/* Create <text> */
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_EVENT_CONTEXT_DESKTOP(ec)->doc());
+ Inkscape::XML::Document *xml_doc = SP_EVENT_CONTEXT_DESKTOP(ec)->doc()->getReprDoc();
Inkscape::XML::Node *rtext = xml_doc->createElement("svg:text");
rtext->setAttribute("xml:space", "preserve"); // we preserve spaces in the text objects we create
@@ -498,11 +499,11 @@ sp_text_context_setup_text(SPTextContext *tc)
/* yes, it's immediate .. why does it matter? */
sp_desktop_selection(ec->desktop)->set(text_item);
Inkscape::GC::release(rtext);
- text_item->transform = sp_item_i2doc_affine(SP_ITEM(ec->desktop->currentLayer())).inverse();
+ text_item->transform = SP_ITEM(ec->desktop->currentLayer())->i2doc_affine().inverse();
text_item->updateRepr();
- sp_document_done(sp_desktop_document(ec->desktop), SP_VERB_CONTEXT_TEXT,
- _("Create text"));
+ DocumentUndo::done(sp_desktop_document(ec->desktop), SP_VERB_CONTEXT_TEXT,
+ _("Create text"));
}
/**
@@ -540,8 +541,8 @@ insert_uni_char(SPTextContext *const tc)
tc->text_sel_start = tc->text_sel_end = sp_te_replace(tc->text, tc->text_sel_start, tc->text_sel_end, u);
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
- sp_document_done(sp_desktop_document(tc->desktop), SP_VERB_DIALOG_TRANSFORM,
- _("Insert Unicode character"));
+ DocumentUndo::done(sp_desktop_document(tc->desktop), SP_VERB_DIALOG_TRANSFORM,
+ _("Insert Unicode character"));
}
}
@@ -723,8 +724,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_desktop_apply_style_tool(desktop, SP_OBJECT_REPR(ft), "/tools/text", true);
sp_desktop_selection(desktop)->set(ft);
desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Flowed text is created."));
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("Create flowed text"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("Create flowed text"));
} else {
desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("The frame is <b>too small</b> for the current font size. Flowed text not created."));
}
@@ -863,8 +864,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("No-break space"));
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("Insert no-break space"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("Insert no-break space"));
return TRUE;
}
break;
@@ -900,8 +901,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_repr_css_set_property(css, "font-weight", "normal");
sp_te_apply_style(tc->text, tc->text_sel_start, tc->text_sel_end, css);
sp_repr_css_attr_unref(css);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("Make bold"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("Make bold"));
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
return TRUE;
@@ -918,8 +919,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_repr_css_set_property(css, "font-style", "italic");
sp_te_apply_style(tc->text, tc->text_sel_start, tc->text_sel_end, css);
sp_repr_css_attr_unref(css);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("Make italic"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("Make italic"));
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
return TRUE;
@@ -957,8 +958,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("New line"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("New line"));
return TRUE;
}
case GDK_BackSpace:
@@ -991,8 +992,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("Backspace"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("Backspace"));
}
return TRUE;
case GDK_Delete:
@@ -1022,8 +1023,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
- _("Delete"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT,
+ _("Delete"));
}
return TRUE;
case GDK_Left:
@@ -1039,8 +1040,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_te_adjust_kerning_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, Geom::Point(mul*-1, 0));
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
- sp_document_maybe_done(sp_desktop_document(desktop), "kern:left", SP_VERB_CONTEXT_TEXT,
- _("Kern to the left"));
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "kern:left", SP_VERB_CONTEXT_TEXT,
+ _("Kern to the left"));
} else {
if (MOD__CTRL)
tc->text_sel_end.cursorLeftWithControl();
@@ -1064,8 +1065,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_te_adjust_kerning_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, Geom::Point(mul*1, 0));
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
- sp_document_maybe_done(sp_desktop_document(desktop), "kern:right", SP_VERB_CONTEXT_TEXT,
- _("Kern to the right"));
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "kern:right", SP_VERB_CONTEXT_TEXT,
+ _("Kern to the right"));
} else {
if (MOD__CTRL)
tc->text_sel_end.cursorRightWithControl();
@@ -1089,9 +1090,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_te_adjust_kerning_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, Geom::Point(0, mul*-1));
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
- sp_document_maybe_done(sp_desktop_document(desktop), "kern:up", SP_VERB_CONTEXT_TEXT,
- _("Kern up"));
-
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "kern:up", SP_VERB_CONTEXT_TEXT,
+ _("Kern up"));
} else {
if (MOD__CTRL)
tc->text_sel_end.cursorUpWithControl();
@@ -1115,9 +1115,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_te_adjust_kerning_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, Geom::Point(0, mul*1));
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
- sp_document_maybe_done(sp_desktop_document(desktop), "kern:down", SP_VERB_CONTEXT_TEXT,
- _("Kern down"));
-
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "kern:down", SP_VERB_CONTEXT_TEXT,
+ _("Kern down"));
} else {
if (MOD__CTRL)
tc->text_sel_end.cursorDownWithControl();
@@ -1192,8 +1191,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
} else {
sp_te_adjust_rotation(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, -90);
}
- sp_document_maybe_done(sp_desktop_document(desktop), "textrot:ccw", SP_VERB_CONTEXT_TEXT,
- _("Rotate counterclockwise"));
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "textrot:ccw", SP_VERB_CONTEXT_TEXT,
+ _("Rotate counterclockwise"));
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
return TRUE;
@@ -1213,8 +1212,8 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
} else {
sp_te_adjust_rotation(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, 90);
}
- sp_document_maybe_done(sp_desktop_document(desktop), "textrot:cw", SP_VERB_CONTEXT_TEXT,
- _("Rotate clockwise"));
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "textrot:cw", SP_VERB_CONTEXT_TEXT,
+ _("Rotate clockwise"));
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
return TRUE;
@@ -1230,17 +1229,15 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_te_adjust_linespacing_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, -10);
else
sp_te_adjust_linespacing_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, -1);
- sp_document_maybe_done(sp_desktop_document(desktop), "linespacing:dec", SP_VERB_CONTEXT_TEXT,
- _("Contract line spacing"));
-
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "linespacing:dec", SP_VERB_CONTEXT_TEXT,
+ _("Contract line spacing"));
} else {
if (MOD__SHIFT)
sp_te_adjust_tspan_letterspacing_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, -10);
else
sp_te_adjust_tspan_letterspacing_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, -1);
- sp_document_maybe_done(sp_desktop_document(desktop), "letterspacing:dec", SP_VERB_CONTEXT_TEXT,
- _("Contract letter spacing"));
-
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "letterspacing:dec", SP_VERB_CONTEXT_TEXT,
+ _("Contract letter spacing"));
}
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
@@ -1257,17 +1254,15 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons
sp_te_adjust_linespacing_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, 10);
else
sp_te_adjust_linespacing_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, 1);
- sp_document_maybe_done(sp_desktop_document(desktop), "linespacing:inc", SP_VERB_CONTEXT_TEXT,
- _("Expand line spacing"));
-
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "linespacing:inc", SP_VERB_CONTEXT_TEXT,
+ _("Expand line spacing"));
} else {
if (MOD__SHIFT)
sp_te_adjust_tspan_letterspacing_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, 10);
else
sp_te_adjust_tspan_letterspacing_screen(tc->text, tc->text_sel_start, tc->text_sel_end, desktop, 1);
- sp_document_maybe_done(sp_desktop_document(desktop), "letterspacing:inc", SP_VERB_CONTEXT_TEXT,
- _("Expand letter spacing"));
-
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), "letterspacing:inc", SP_VERB_CONTEXT_TEXT,
+ _("Expand letter spacing"));\
}
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
@@ -1395,8 +1390,8 @@ sp_text_paste_inline(SPEventContext *ec)
tc->text_sel_start = tc->text_sel_end = sp_te_insert_line(tc->text, tc->text_sel_start);
begin = end + 1;
}
- sp_document_done(sp_desktop_document(ec->desktop), SP_VERB_CONTEXT_TEXT,
- _("Paste text"));
+ DocumentUndo::done(sp_desktop_document(ec->desktop), SP_VERB_CONTEXT_TEXT,
+ _("Paste text"));
return true;
}
@@ -1520,8 +1515,8 @@ sp_text_context_style_set(SPCSSAttr const *css, SPTextContext *tc)
return false; // will get picked up by the parent and applied to the whole text object
sp_te_apply_style(tc->text, tc->text_sel_start, tc->text_sel_end, css);
- sp_document_done(sp_desktop_document(tc->desktop), SP_VERB_CONTEXT_TEXT,
- _("Set text style"));
+ DocumentUndo::done(sp_desktop_document(tc->desktop), SP_VERB_CONTEXT_TEXT,
+ _("Set text style"));
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
@@ -1594,8 +1589,8 @@ sp_text_context_update_cursor(SPTextContext *tc, bool scroll_to_see)
if (tc->text) {
Geom::Point p0, p1;
sp_te_get_cursor_coords(tc->text, tc->text_sel_end, p0, p1);
- Geom::Point const d0 = p0 * sp_item_i2d_affine(SP_ITEM(tc->text));
- Geom::Point const d1 = p1 * sp_item_i2d_affine(SP_ITEM(tc->text));
+ Geom::Point const d0 = p0 * SP_ITEM(tc->text)->i2d_affine();
+ Geom::Point const d1 = p1 * SP_ITEM(tc->text)->i2d_affine();
// scroll to show cursor
if (scroll_to_see) {
@@ -1636,7 +1631,7 @@ sp_text_context_update_cursor(SPTextContext *tc, bool scroll_to_see)
SP_CTRLRECT(tc->frame)->setColor(0x0000ff7f, false, 0);
}
sp_canvas_item_show(tc->frame);
- Geom::OptRect frame_bbox = sp_item_bbox_desktop(frame);
+ Geom::OptRect frame_bbox = frame->getBboxDesktop();
if (frame_bbox) {
SP_CTRLRECT(tc->frame)->setRectangle(*frame_bbox);
}
@@ -1676,7 +1671,7 @@ static void sp_text_context_update_text_selection(SPTextContext *tc)
std::vector<Geom::Point> quads;
if (tc->text != NULL)
- quads = sp_te_create_selection_quads(tc->text, tc->text_sel_start, tc->text_sel_end, sp_item_i2d_affine(tc->text));
+ quads = sp_te_create_selection_quads(tc->text, tc->text_sel_start, tc->text_sel_end, (tc->text)->i2d_affine());
for (unsigned i = 0 ; i < quads.size() ; i += 4) {
SPCanvasItem *quad_canvasitem;
quad_canvasitem = sp_canvas_item_new(sp_desktop_controls(tc->desktop), SP_TYPE_CTRLQUADR, NULL);
@@ -1728,7 +1723,7 @@ sp_text_context_forget_text(SPTextContext *tc)
// the XML editor
if ( text_repr && sp_repr_parent(text_repr) ) {
sp_repr_unparent(text_repr);
- sp_document_done(sp_desktop_document(tc->desktop), SP_VERB_CONTEXT_TEXT,
+ SPDocumentUndo::done(sp_desktop_document(tc->desktop), SP_VERB_CONTEXT_TEXT,
_("Remove empty text"));
}
}
@@ -1761,8 +1756,8 @@ sptc_commit(GtkIMContext */*imc*/, gchar *string, SPTextContext *tc)
sp_text_context_update_cursor(tc);
sp_text_context_update_text_selection(tc);
- sp_document_done(SP_OBJECT_DOCUMENT(tc->text), SP_VERB_CONTEXT_TEXT,
- _("Type text"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT(tc->text), SP_VERB_CONTEXT_TEXT,
+ _("Type text"));
}
void
diff --git a/src/text-editing.cpp b/src/text-editing.cpp
index 4124511da..4a9ccf1f3 100644
--- a/src/text-editing.cpp
+++ b/src/text-editing.cpp
@@ -4,6 +4,8 @@
* Authors:
* bulia byak
* Richard Hughes
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004-5 authors
*
@@ -60,28 +62,32 @@ static void te_update_layout_now (SPItem *item)
item->updateRepr();
}
-/** Returns true if there are no visible characters on the canvas */
-bool
-sp_te_output_is_empty (SPItem const *item)
+bool sp_te_output_is_empty(SPItem const *item)
{
Inkscape::Text::Layout const *layout = te_get_layout(item);
return layout->begin() == layout->end();
}
-/** Returns true if the user has typed nothing in the text box */
-bool
-sp_te_input_is_empty (SPObject const *item)
+bool sp_te_input_is_empty(SPObject const *item)
{
- if (SP_IS_STRING(item)) return SP_STRING(item)->string.empty();
- for (SPObject const *child = item->firstChild() ; child ; child = SP_OBJECT_NEXT(child))
- if (!sp_te_input_is_empty(child)) return false;
- return true;
+ bool empty = true;
+ if (SP_IS_STRING(item)) {
+ empty = SP_STRING(item)->string.empty();
+ } else {
+ for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) {
+ if (!sp_te_input_is_empty(child)) {
+ empty = false;
+ break;
+ }
+ }
+ }
+ return empty;
}
Inkscape::Text::Layout::iterator
sp_te_get_position_by_coords (SPItem const *item, Geom::Point const &i_p)
{
- Geom::Matrix im (sp_item_i2d_affine (item));
+ Geom::Matrix im (item->i2d_affine ());
im = im.inverse();
Geom::Point p = i_p * im;
@@ -200,25 +206,29 @@ static const char * span_name_for_text_object(SPObject const *object)
return NULL;
}
-/** Recursively gets the length of all the SPStrings at or below the given
-\a item. Also adds 1 for each line break encountered. */
unsigned sp_text_get_length(SPObject const *item)
{
unsigned length = 0;
- if (SP_IS_STRING(item)) return SP_STRING(item)->string.length();
-
- if (is_line_break_object(item)) length++;
+ if (SP_IS_STRING(item)) {
+ length = SP_STRING(item)->string.length();
+ } else {
+ if (is_line_break_object(item)) {
+ length++;
+ }
- for (SPObject const *child = item->firstChild() ; child ; child = SP_OBJECT_NEXT(child)) {
- if (SP_IS_STRING(child)) length += SP_STRING(child)->string.length();
- else length += sp_text_get_length(child);
+ for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) {
+ if (SP_IS_STRING(child)) {
+ length += SP_STRING(child)->string.length();
+ } else {
+ length += sp_text_get_length(child);
+ }
+ }
}
+
return length;
}
-/** Recursively gets the length of all the SPStrings at or below the given
-\a item, before and not including \a upto. Also adds 1 for each line break encountered. */
unsigned sp_text_get_length_upto(SPObject const *item, SPObject const *upto)
{
unsigned length = 0;
@@ -237,7 +247,7 @@ unsigned sp_text_get_length_upto(SPObject const *item, SPObject const *upto)
}
// Count the length of the children
- for (SPObject const *child = item->firstChild() ; child ; child = SP_OBJECT_NEXT(child)) {
+ for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) {
if (upto && child == upto) {
// hit upto, return immediately
return length;
@@ -293,8 +303,9 @@ to \a item at the same level. */
static unsigned sum_sibling_text_lengths_before(SPObject const *item)
{
unsigned char_index = 0;
- for (SPObject *sibling = SP_OBJECT_PARENT(item)->firstChild() ; sibling && sibling != item ; sibling = SP_OBJECT_NEXT(sibling))
+ for (SPObject *sibling = SP_OBJECT_PARENT(item)->firstChild() ; sibling && sibling != item ; sibling = sibling->getNext()) {
char_index += sp_text_get_length(sibling);
+ }
return char_index;
}
@@ -316,13 +327,13 @@ parent of the first line break node encountered.
*/
static SPObject* split_text_object_tree_at(SPObject *split_obj, unsigned char_index)
{
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(split_obj));
+ Inkscape::XML::Document *xml_doc = SP_OBJECT_DOCUMENT(split_obj)->getReprDoc();
if (is_line_break_object(split_obj)) {
Inkscape::XML::Node *new_node = duplicate_node_without_children(xml_doc, SP_OBJECT_REPR(split_obj));
SP_OBJECT_REPR(SP_OBJECT_PARENT(split_obj))->addChild(new_node, SP_OBJECT_REPR(split_obj));
Inkscape::GC::release(new_node);
- split_attributes(split_obj, SP_OBJECT_NEXT(split_obj), char_index);
- return SP_OBJECT_NEXT(split_obj);
+ split_attributes(split_obj, split_obj->getNext(), char_index);
+ return split_obj->getNext();
}
unsigned char_count_before = sum_sibling_text_lengths_before(split_obj);
@@ -336,10 +347,10 @@ static SPObject* split_text_object_tree_at(SPObject *split_obj, unsigned char_in
split_attributes(split_obj, duplicate_obj->firstChild(), char_index);
// then move all the subsequent nodes
- split_obj = SP_OBJECT_NEXT(split_obj);
+ split_obj = split_obj->getNext();
while (split_obj) {
Inkscape::XML::Node *move_repr = SP_OBJECT_REPR(split_obj);
- SPObject *next_obj = SP_OBJECT_NEXT(split_obj); // this is about to become invalidated by removeChild()
+ SPObject *next_obj = split_obj->getNext(); // this is about to become invalidated by removeChild()
Inkscape::GC::anchor(move_repr);
SP_OBJECT_REPR(SP_OBJECT_PARENT(split_obj))->removeChild(move_repr);
SP_OBJECT_REPR(duplicate_obj)->appendChild(move_repr);
@@ -376,12 +387,12 @@ Inkscape::Text::Layout::iterator sp_te_insert_line (SPItem *item, Inkscape::Text
if (split_obj == 0) split_obj = item->lastChild();
if (SP_IS_TREF(split_obj)) {
- desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, tref_edit_message);
+ desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, tref_edit_message);
return position;
}
if (split_obj) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(split_obj));
+ Inkscape::XML::Document *xml_doc = SP_OBJECT_DOCUMENT(split_obj)->getReprDoc();
Inkscape::XML::Node *new_node = duplicate_node_without_children(xml_doc, SP_OBJECT_REPR(split_obj));
SP_OBJECT_REPR(SP_OBJECT_PARENT(split_obj))->addChild(new_node, SP_OBJECT_REPR(split_obj));
Inkscape::GC::release(new_node);
@@ -420,12 +431,17 @@ static SPString* sp_te_seek_next_string_recursive(SPObject *start_obj)
while (start_obj) {
if (start_obj->hasChildren()) {
SPString *found_string = sp_te_seek_next_string_recursive(start_obj->firstChild());
- if (found_string) return found_string;
+ if (found_string) {
+ return found_string;
+ }
+ }
+ if (SP_IS_STRING(start_obj)) {
+ return SP_STRING(start_obj);
}
- if (SP_IS_STRING(start_obj)) return SP_STRING(start_obj);
- start_obj = SP_OBJECT_NEXT(start_obj);
- if (is_line_break_object(start_obj))
+ start_obj = start_obj->getNext();
+ if (is_line_break_object(start_obj)) {
break; // don't cross line breaks
+ }
}
return NULL;
}
@@ -495,10 +511,12 @@ sp_te_insert(SPItem *item, Inkscape::Text::Layout::iterator const &position, gch
if (source_obj->hasChildren()) {
source_obj = source_obj->firstChild();
if (SP_IS_FLOWTEXT(item)) {
- while (SP_IS_FLOWREGION(source_obj) || SP_IS_FLOWREGIONEXCLUDE(source_obj))
- source_obj = SP_OBJECT_NEXT(source_obj);
- if (source_obj == NULL)
+ while (SP_IS_FLOWREGION(source_obj) || SP_IS_FLOWREGIONEXCLUDE(source_obj)) {
+ source_obj = source_obj->getNext();
+ }
+ if (source_obj == NULL) {
source_obj = item;
+ }
}
}
if (source_obj == item && SP_IS_FLOWTEXT(item)) {
@@ -507,7 +525,7 @@ sp_te_insert(SPItem *item, Inkscape::Text::Layout::iterator const &position, gch
source_obj = item->lastChild();
}
} else
- source_obj = SP_OBJECT_NEXT(source_obj);
+ source_obj = source_obj->getNext();
if (source_obj) { // never fails
SPString *string_item = sp_te_seek_next_string_recursive(source_obj);
@@ -607,16 +625,16 @@ static SPObject* delete_line_break(SPObject *root, SPObject *item, bool *next_is
new_span_repr->setAttribute("rotate", a);
SPObject *following_item = item;
- while (SP_OBJECT_NEXT(following_item) == NULL) {
+ while (following_item->getNext() == NULL) {
following_item = SP_OBJECT_PARENT(following_item);
g_assert(following_item != root);
}
- following_item = SP_OBJECT_NEXT(following_item);
+ following_item = following_item->getNext();
SPObject *new_parent_item;
if (SP_IS_STRING(following_item)) {
new_parent_item = SP_OBJECT_PARENT(following_item);
- SP_OBJECT_REPR(new_parent_item)->addChild(new_span_repr, SP_OBJECT_PREV(following_item) ? SP_OBJECT_REPR(SP_OBJECT_PREV(following_item)) : NULL);
+ SP_OBJECT_REPR(new_parent_item)->addChild(new_span_repr, following_item->getPrev() ? SP_OBJECT_REPR(following_item->getPrev()) : NULL);
next_item = following_item;
*next_is_sibling = true;
} else {
@@ -771,7 +789,7 @@ sp_te_delete (SPItem *item, Inkscape::Text::Layout::iterator const &start,
SPObject *next_item;
do {
bool is_sibling = true;
- next_item = SP_OBJECT_NEXT(sub_item);
+ next_item = sub_item->getNext();
if (next_item == NULL) {
next_item = SP_OBJECT_PARENT(sub_item);
is_sibling = false;
@@ -804,16 +822,19 @@ sp_te_delete (SPItem *item, Inkscape::Text::Layout::iterator const &start,
replacing line break elements with '\n'. */
static void sp_te_get_ustring_multiline(SPObject const *root, Glib::ustring *string, bool *pending_line_break)
{
- if (*pending_line_break)
+ if (*pending_line_break) {
*string += '\n';
- for (SPObject const *child = root->firstChild() ; child ; child = SP_OBJECT_NEXT(child)) {
- if (SP_IS_STRING(child))
+ }
+ for (SPObject const *child = root->firstChild() ; child ; child = child->getNext()) {
+ if (SP_IS_STRING(child)) {
*string += SP_STRING(child)->string;
- else
+ } else {
sp_te_get_ustring_multiline(child, string, pending_line_break);
+ }
}
- if (!SP_IS_TEXT(root) && !SP_IS_TEXTPATH(root) && is_line_break_object(root))
+ if (!SP_IS_TEXT(root) && !SP_IS_TEXTPATH(root) && is_line_break_object(root)) {
*pending_line_break = true;
+ }
}
/** Gets a text-only representation of the given text or flowroot object,
@@ -873,8 +894,8 @@ sp_te_set_repr_text_multiline(SPItem *text, gchar const *str)
SPObject *object;
bool is_textpath = false;
if (SP_IS_TEXT_TEXTPATH (text)) {
- repr = SP_OBJECT_REPR (sp_object_first_child(SP_OBJECT (text)));
- object = sp_object_first_child(SP_OBJECT (text));
+ repr = SP_OBJECT_REPR(text->firstChild());
+ object = text->firstChild();
is_textpath = true;
} else {
repr = SP_OBJECT_REPR (text);
@@ -887,9 +908,10 @@ sp_te_set_repr_text_multiline(SPItem *text, gchar const *str)
repr->setContent("");
SPObject *child = object->firstChild();
while (child) {
- SPObject *next = SP_OBJECT_NEXT(child);
- if (!SP_IS_FLOWREGION(child) && !SP_IS_FLOWREGIONEXCLUDE(child))
+ SPObject *next = child->getNext();
+ if (!SP_IS_FLOWREGION(child) && !SP_IS_FLOWREGIONEXCLUDE(child)) {
repr->removeChild(SP_OBJECT_REPR(child));
+ }
child = next;
}
@@ -957,7 +979,7 @@ sp_te_adjust_kerning_screen (SPItem *item, Inkscape::Text::Layout::iterator cons
// divide increment by zoom
// divide increment by matrix expansion
gdouble factor = 1 / desktop->current_zoom();
- Geom::Matrix t (sp_item_i2doc_affine(item));
+ Geom::Matrix t (item->i2doc_affine());
factor = factor / t.descrim();
by = factor * by;
@@ -1015,7 +1037,7 @@ sp_te_adjust_rotation_screen(SPItem *text, Inkscape::Text::Layout::iterator cons
// divide increment by zoom
// divide increment by matrix expansion
gdouble factor = 1 / desktop->current_zoom();
- Geom::Matrix t (sp_item_i2doc_affine(text));
+ Geom::Matrix t (text->i2doc_affine());
factor = factor / t.descrim();
Inkscape::Text::Layout const *layout = te_get_layout(text);
if (layout == NULL) return;
@@ -1121,7 +1143,7 @@ sp_te_adjust_tspan_letterspacing_screen(SPItem *text, Inkscape::Text::Layout::it
gdouble const zoom = desktop->current_zoom();
gdouble const zby = (by
/ (zoom * (nb_let > 1 ? nb_let - 1 : 1))
- / sp_item_i2doc_affine(SP_ITEM(source_obj)).descrim());
+ / SP_ITEM(source_obj)->i2doc_affine().descrim());
val += zby;
if (start == end) {
@@ -1193,7 +1215,7 @@ sp_te_adjust_linespacing_screen (SPItem *text, Inkscape::Text::Layout::iterator
gdouble zby = by / (desktop->current_zoom() * (line_count == 0 ? 1 : line_count));
// divide increment by matrix expansion
- Geom::Matrix t (sp_item_i2doc_affine (SP_ITEM(text)));
+ Geom::Matrix t (SP_ITEM(text)->i2doc_affine ());
zby = zby / t.descrim();
switch (style->line_height.unit) {
@@ -1341,7 +1363,7 @@ static void apply_css_recursive(SPObject *o, SPCSSAttr const *css)
{
sp_repr_css_change(SP_OBJECT_REPR(o), const_cast<SPCSSAttr*>(css), "style");
- for (SPObject *child = sp_object_first_child(SP_OBJECT(o)) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = o->firstChild() ; child ; child = child->getNext() ) {
if (sp_repr_css_property(const_cast<SPCSSAttr*>(css), "opacity", NULL) != NULL) {
// Unset properties which are accumulating and thus should not be set recursively.
// For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group.
@@ -1364,11 +1386,12 @@ name of the xml for a text span (ie tspan or flowspan). */
static void recursively_apply_style(SPObject *common_ancestor, SPCSSAttr const *css, SPObject *start_item, Glib::ustring::iterator start_text_iter, SPObject *end_item, Glib::ustring::iterator end_text_iter, char const *span_object_name)
{
bool passed_start = start_item == NULL ? true : false;
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(common_ancestor));
+ Inkscape::XML::Document *xml_doc = SP_OBJECT_DOCUMENT(common_ancestor)->getReprDoc();
- for (SPObject *child = common_ancestor->firstChild() ; child != NULL ; child = SP_OBJECT_NEXT(child)) {
- if (start_item == child)
+ for (SPObject *child = common_ancestor->firstChild() ; child ; child = child->getNext()) {
+ if (start_item == child) {
passed_start = true;
+ }
if (passed_start) {
if (end_item && child->isAncestorOf(end_item)) {
@@ -1385,7 +1408,7 @@ static void recursively_apply_style(SPObject *common_ancestor, SPCSSAttr const *
Inkscape::XML::Node *child_span = xml_doc->createElement(span_object_name);
sp_repr_css_set(child_span, const_cast<SPCSSAttr*>(css), "style"); // better hope that prototype wasn't nonconst for a good reason
- SPObject *prev_item = SP_OBJECT_PREV(child);
+ SPObject *prev_item = child->getPrev();
Inkscape::XML::Node *prev_repr = prev_item ? SP_OBJECT_REPR(prev_item) : NULL;
if (child == start_item || child == end_item) {
@@ -1428,7 +1451,7 @@ static void recursively_apply_style(SPObject *common_ancestor, SPCSSAttr const *
child_span->appendChild(text_in_span);
Inkscape::GC::release(text_in_span);
child->deleteObject();
- child = sp_object_get_child_by_repr(common_ancestor, child_span);
+ child = common_ancestor->get_child_by_repr(child_span);
} else
surround_entire_string = true;
@@ -1440,7 +1463,7 @@ static void recursively_apply_style(SPObject *common_ancestor, SPCSSAttr const *
SP_OBJECT_REPR(common_ancestor)->removeChild(child_repr);
child_span->appendChild(child_repr);
Inkscape::GC::release(child_repr);
- child = sp_object_get_child_by_repr(common_ancestor, child_span);
+ child = common_ancestor->get_child_by_repr(child_span);
}
Inkscape::GC::release(child_span);
@@ -1493,13 +1516,17 @@ static SPObject* ascend_while_first(SPObject *item, Glib::ustring::iterator text
-> abcdef */
static bool tidy_operator_empty_spans(SPObject **item)
{
- if ((*item)->hasChildren()) return false;
- if (is_line_break_object(*item)) return false;
- if (SP_IS_STRING(*item) && !SP_STRING(*item)->string.empty()) return false;
- SPObject *next = SP_OBJECT_NEXT(*item);
- (*item)->deleteObject();
- *item = next;
- return true;
+ bool result = false;
+ if ( !(*item)->hasChildren()
+ && !is_line_break_object(*item)
+ && !(SP_IS_STRING(*item) && !SP_STRING(*item)->string.empty())
+ ) {
+ SPObject *next = (*item)->getNext();
+ (*item)->deleteObject();
+ *item = next;
+ result = true;
+ }
+ return result;
}
/** inexplicable spans: abc<span style="">def</span>ghi
@@ -1507,7 +1534,8 @@ static bool tidy_operator_empty_spans(SPObject **item)
the repeated strings will be merged by another operator. */
static bool tidy_operator_inexplicable_spans(SPObject **item)
{
- if (*item && sp_repr_is_meta_element((*item)->repr)) return false;
+ //XML Tree being directly used here while it shouldn't be.
+ if (*item && sp_repr_is_meta_element((*item)->getRepr())) return false;
if (SP_IS_STRING(*item)) return false;
if (is_line_break_object(*item)) return false;
TextTagAttributes *attrs = attributes_for_object(*item);
@@ -1520,7 +1548,7 @@ static bool tidy_operator_inexplicable_spans(SPObject **item)
SP_OBJECT_REPR(*item)->removeChild(repr);
SP_OBJECT_REPR(SP_OBJECT_PARENT(*item))->addChild(repr, SP_OBJECT_REPR(next));
Inkscape::GC::release(repr);
- next = SP_OBJECT_NEXT(next);
+ next = next->getNext();
}
(*item)->deleteObject();
*item = next;
@@ -1532,7 +1560,7 @@ static bool tidy_operator_inexplicable_spans(SPObject **item)
static bool tidy_operator_repeated_spans(SPObject **item)
{
SPObject *first = *item;
- SPObject *second = SP_OBJECT_NEXT(first);
+ SPObject *second = first->getNext();
if (second == NULL) return false;
Inkscape::XML::Node *first_repr = SP_OBJECT_REPR(first);
@@ -1605,10 +1633,12 @@ static bool redundant_double_nesting_processor(SPObject **item, SPObject *child,
if (attrs && attrs->anyAttributesSet()) return false;
if (!objects_have_equal_style(SP_OBJECT_PARENT(*item), child)) return false;
- Inkscape::XML::Node *insert_after_repr;
- if (!prepend) insert_after_repr = SP_OBJECT_REPR(*item);
- else if (SP_OBJECT_PREV(*item)) insert_after_repr = SP_OBJECT_REPR(SP_OBJECT_PREV(*item));
- else insert_after_repr = NULL;
+ Inkscape::XML::Node *insert_after_repr = 0;
+ if (!prepend) {
+ insert_after_repr = SP_OBJECT_REPR(*item);
+ } else if ((*item)->getPrev()) {
+ insert_after_repr = SP_OBJECT_REPR((*item)->getPrev());
+ }
while (SP_OBJECT_REPR(child)->childCount()) {
Inkscape::XML::Node *move_repr = SP_OBJECT_REPR(child)->firstChild();
Inkscape::GC::anchor(move_repr);
@@ -1673,7 +1703,7 @@ static bool redundant_semi_nesting_processor(SPObject **item, SPObject *child, b
Inkscape::XML::Document *xml_doc = SP_OBJECT_REPR(*item)->document();
Inkscape::XML::Node *new_span = xml_doc->createElement(SP_OBJECT_REPR(*item)->name());
if (prepend) {
- SPObject *prev = SP_OBJECT_PREV(*item);
+ SPObject *prev = (*item)->getPrev();
SP_OBJECT_REPR(SP_OBJECT_PARENT(*item))->addChild(new_span, prev ? SP_OBJECT_REPR(prev) : NULL);
} else
SP_OBJECT_REPR(SP_OBJECT_PARENT(*item))->addChild(new_span, SP_OBJECT_REPR(*item));
@@ -1703,7 +1733,7 @@ static bool tidy_operator_redundant_semi_nesting(SPObject **item)
in a paragraph which is not \a not_obj. */
static SPString* find_last_string_child_not_equal_to(SPObject *root, SPObject *not_obj)
{
- for (SPObject *child = root->lastChild() ; child ; child = SP_OBJECT_PREV(child))
+ for (SPObject *child = root->lastChild() ; child ; child = child->getPrev())
{
if (child == not_obj) continue;
if (child->hasChildren()) {
@@ -1729,7 +1759,7 @@ static bool tidy_operator_styled_whitespace(SPObject **item)
SPObject *test_item = *item;
SPString *next_string;
for ( ; ; ) { // find the next string
- next_string = sp_te_seek_next_string_recursive(SP_OBJECT_NEXT(test_item));
+ next_string = sp_te_seek_next_string_recursive(test_item->getNext());
if (next_string) {
next_string->string.insert(0, str);
break;
@@ -1738,7 +1768,7 @@ static bool tidy_operator_styled_whitespace(SPObject **item)
test_item = SP_OBJECT_PARENT(test_item);
if (is_line_break_object(test_item)) break;
if (SP_IS_FLOWTEXT(test_item)) return false;
- SPObject *next = SP_OBJECT_NEXT(test_item);
+ SPObject *next = test_item->getNext();
if (next) {
test_item = next;
break;
@@ -1753,7 +1783,7 @@ static bool tidy_operator_styled_whitespace(SPObject **item)
}
SP_OBJECT_REPR(next_string)->setContent(next_string->string.c_str());
SPObject *delete_obj = *item;
- *item = SP_OBJECT_NEXT(*item);
+ *item = (*item)->getNext();
delete_obj->deleteObject();
return true;
}
@@ -1796,11 +1826,12 @@ static bool tidy_xml_tree_recursively(SPObject *root)
for (SPObject *child = root->firstChild() ; child != NULL ; ) {
if (SP_IS_FLOWREGION(child) || SP_IS_FLOWREGIONEXCLUDE(child) || SP_IS_TREF(child)) {
- child = SP_OBJECT_NEXT(child);
+ child = child->getNext();
continue;
}
- if (child->hasChildren())
+ if (child->hasChildren()) {
changes |= tidy_xml_tree_recursively(child);
+ }
unsigned i;
for (i = 0 ; i < sizeof(tidy_operators) / sizeof(tidy_operators[0]) ; i++) {
@@ -1809,8 +1840,9 @@ static bool tidy_xml_tree_recursively(SPObject *root)
break;
}
}
- if (i == sizeof(tidy_operators) / sizeof(tidy_operators[0]))
- child = SP_OBJECT_NEXT(child);
+ if (i == sizeof(tidy_operators) / sizeof(tidy_operators[0])) {
+ child = child->getNext();
+ }
}
return changes;
}
@@ -1838,13 +1870,18 @@ void sp_te_apply_style(SPItem *text, Inkscape::Text::Layout::iterator const &sta
start_item = SP_OBJECT(rawptr);
layout->getSourceOfCharacter(last, &rawptr, &end_text_iter);
end_item = SP_OBJECT(rawptr);
- if (start_item == 0)
+ if (start_item == 0) {
return; // start is at end of text
- if (is_line_break_object(start_item))
- start_item = SP_OBJECT_NEXT(start_item);
- if (is_line_break_object(end_item))
- end_item = SP_OBJECT_NEXT(end_item);
- if (end_item == 0) end_item = text;
+ }
+ if (is_line_break_object(start_item)) {
+ start_item = start_item->getNext();
+ }
+ if (is_line_break_object(end_item)) {
+ end_item = end_item->getNext();
+ }
+ if (end_item == 0) {
+ end_item = text;
+ }
/* Special case: With a tref, we only want to change its style when the whole
@@ -1871,7 +1908,7 @@ void sp_te_apply_style(SPItem *text, Inkscape::Text::Layout::iterator const &sta
SPCSSAttr *css_set = sp_repr_css_attr_new();
sp_repr_css_merge(css_set, (SPCSSAttr*) css);
{
- Geom::Matrix const local(sp_item_i2doc_affine(SP_ITEM(common_ancestor)));
+ Geom::Matrix const local(SP_ITEM(common_ancestor)->i2doc_affine());
double const ex(local.descrim());
if ( ( ex != 0. )
&& ( ex != 1. ) ) {
@@ -1920,17 +1957,22 @@ bool is_top_level_text_object (SPObject *obj)
|| SP_IS_FLOWTEXT(obj));
}
-bool has_visible_text (SPObject *obj)
+bool has_visible_text(SPObject *obj)
{
- if (SP_IS_STRING(obj) && !SP_STRING(obj)->string.empty())
- return true; // maybe we should also check that it's not all whitespace?
+ bool hasVisible = false;
- for (SPObject const *child = obj->firstChild() ; child ; child = SP_OBJECT_NEXT(child)) {
- if (has_visible_text((SPObject *) child))
- return true;
+ if (SP_IS_STRING(obj) && !SP_STRING(obj)->string.empty()) {
+ hasVisible = true; // maybe we should also check that it's not all whitespace?
+ } else {
+ for (SPObject const *child = obj->firstChild() ; child ; child = child->getNext()) {
+ if (has_visible_text((SPObject *) child)) {
+ hasVisible = true;
+ break;
+ }
+ }
}
- return false;
+ return hasVisible;
}
/*
@@ -1942,4 +1984,4 @@ bool has_visible_text (SPObject *obj)
fill-column:99
End:
*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/text-editing.h b/src/text-editing.h
index 038458ff7..3d5efbbec 100644
--- a/src/text-editing.h
+++ b/src/text-editing.h
@@ -1,5 +1,5 @@
-#ifndef __SP_TEXT_EDITING_H__
-#define __SP_TEXT_EDITING_H__
+#ifndef SEEN_SP_TEXT_EDITING_H
+#define SEEN_SP_TEXT_EDITING_H
/*
* Text editing functions common for for text and flowtext
@@ -28,11 +28,21 @@ typedef std::pair<Inkscape::Text::Layout::iterator, Inkscape::Text::Layout::iter
Inkscape::Text::Layout const * te_get_layout (SPItem const *item);
-bool sp_te_output_is_empty (SPItem const *item);
-bool sp_te_input_is_empty (SPObject const *item);
+/** Returns true if there are no visible characters on the canvas. */
+bool sp_te_output_is_empty(SPItem const *item);
+
+/** Returns true if the user has typed nothing in the text box. */
+bool sp_te_input_is_empty(SPObject const *item);
+
+/** Recursively gets the length of all the SPStrings at or below the given
+\a item. Also adds 1 for each line break encountered. */
unsigned sp_text_get_length(SPObject const *item);
+
+/** Recursively gets the length of all the SPStrings at or below the given
+\a item, before and not including \a upto. Also adds 1 for each line break encountered. */
unsigned sp_text_get_length_upto(SPObject const *item, SPObject const *upto);
+
std::vector<Geom::Point> sp_te_create_selection_quads(SPItem const *item, Inkscape::Text::Layout::iterator const &start, Inkscape::Text::Layout::iterator const &end, Geom::Matrix const &transform);
Inkscape::Text::Layout::iterator sp_te_get_position_by_coords (SPItem const *item, Geom::Point const &i_p);
@@ -70,4 +80,4 @@ bool is_part_of_text_subtree (SPObject *obj);
bool is_top_level_text_object (SPObject *obj);
bool has_visible_text (SPObject *obj);
-#endif
+#endif // SEEN_SP_TEXT_EDITING_H
diff --git a/src/trace/trace.cpp b/src/trace/trace.cpp
index 198ffdfb2..5571e147b 100644
--- a/src/trace/trace.cpp
+++ b/src/trace/trace.cpp
@@ -4,6 +4,8 @@
*
* Authors:
* Bob Jamison <rjamison@earthlink.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2006 Bob Jamison
*
@@ -245,7 +247,7 @@ Tracer::sioxProcessImage(SPImage *img,
return Glib::RefPtr<Gdk::Pixbuf>(NULL);
}
- NRArenaItem *aImg = sp_item_get_arenaitem(img, desktop->dkey);
+ NRArenaItem *aImg = img->get_arenaitem(desktop->dkey);
//g_message("img: %d %d %d %d\n", aImg->bbox.x0, aImg->bbox.y0,
// aImg->bbox.x1, aImg->bbox.y1);
@@ -263,7 +265,7 @@ Tracer::sioxProcessImage(SPImage *img,
for (iter = sioxShapes.begin() ; iter!=sioxShapes.end() ; iter++)
{
SPItem *item = *iter;
- NRArenaItem *aItem = sp_item_get_arenaitem(item, desktop->dkey);
+ NRArenaItem *aItem = item->get_arenaitem(desktop->dkey);
arenaItems.push_back(aItem);
}
@@ -442,7 +444,7 @@ void Tracer::traceThread()
return;
}
SPDocument *doc = SP_ACTIVE_DOCUMENT;
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
SPImage *img = getSelectedSPImage();
@@ -481,7 +483,8 @@ void Tracer::traceThread()
}
//### Get pointers to the <image> and its parent
- Inkscape::XML::Node *imgRepr = SP_OBJECT(img)->repr;
+ //XML Tree being used directly here while it shouldn't be.
+ Inkscape::XML::Node *imgRepr = SP_OBJECT(img)->getRepr();
Inkscape::XML::Node *par = sp_repr_parent(imgRepr);
//### Get some information for the new transform()
@@ -517,7 +520,7 @@ void Tracer::traceThread()
//#OK. Now let's start making new nodes
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *groupRepr = NULL;
//# if more than 1, make a <g>roup of <path>s
@@ -548,7 +551,7 @@ void Tracer::traceThread()
if (reprobj)
{
SPItem *newItem = SP_ITEM(reprobj);
- sp_item_write_transform(newItem, pathRepr, tf, NULL);
+ newItem->doWriteTransform(pathRepr, tf, NULL);
}
if (nrPaths == 1)
{
@@ -567,7 +570,7 @@ void Tracer::traceThread()
}
//## inform the document, so we can undo
- sp_document_done(doc, SP_VERB_SELECTION_TRACE, _("Trace bitmap"));
+ DocumentUndo::done(doc, SP_VERB_SELECTION_TRACE, _("Trace bitmap"));
engine = NULL;
diff --git a/src/tweak-context.cpp b/src/tweak-context.cpp
index 37ca5c418..3f0db0b8d 100644
--- a/src/tweak-context.cpp
+++ b/src/tweak-context.cpp
@@ -1,10 +1,10 @@
-#define __SP_TWEAK_CONTEXT_C__
-
/*
* tweaking paths without node editing
*
* Authors:
* bulia byak
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2007 authors
*
@@ -74,6 +74,8 @@
#include "tweak-context.h"
+using Inkscape::DocumentUndo;
+
#define DDC_RED_RGBA 0xff0000ff
#define DYNA_MIN_WIDTH 1.0e-6
@@ -422,7 +424,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
if (SP_IS_GROUP(item) && !SP_IS_BOX3D(item)) {
GSList *children = NULL;
- for (SPObject *child = sp_object_first_child(SP_OBJECT(item)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = item->firstChild() ; child; child = child->getNext() ) {
if (SP_IS_ITEM(child)) {
children = g_slist_prepend(children, child);
}
@@ -439,7 +441,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
} else {
if (mode == TWEAK_MODE_MOVE) {
- Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect a = item->getBounds(item->i2doc_affine());
if (a) {
double x = Geom::L2(a->midpoint() - p)/radius;
if (a->contains(p)) x = 0;
@@ -452,7 +454,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
} else if (mode == TWEAK_MODE_MOVE_IN_OUT) {
- Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect a = item->getBounds(item->i2doc_affine());
if (a) {
double x = Geom::L2(a->midpoint() - p)/radius;
if (a->contains(p)) x = 0;
@@ -466,7 +468,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
} else if (mode == TWEAK_MODE_MOVE_JITTER) {
- Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect a = item->getBounds(item->i2doc_affine());
if (a) {
double dp = g_random_double_range(0, M_PI*2);
double dr = g_random_double_range(0, radius);
@@ -481,7 +483,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
} else if (mode == TWEAK_MODE_SCALE) {
- Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect a = item->getBounds(item->i2doc_affine());
if (a) {
double x = Geom::L2(a->midpoint() - p)/radius;
if (a->contains(p)) x = 0;
@@ -494,7 +496,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
} else if (mode == TWEAK_MODE_ROTATE) {
- Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect a = item->getBounds(item->i2doc_affine());
if (a) {
double x = Geom::L2(a->midpoint() - p)/radius;
if (a->contains(p)) x = 0;
@@ -507,7 +509,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
} else if (mode == TWEAK_MODE_MORELESS) {
- Geom::OptRect a = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect a = item->getBounds(item->i2doc_affine());
if (a) {
double x = Geom::L2(a->midpoint() - p)/radius;
if (a->contains(p)) x = 0;
@@ -521,7 +523,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
sp_object_unref(SP_OBJECT(item), NULL);
} else { // duplicate
SPDocument *doc = SP_OBJECT_DOCUMENT(item);
- Inkscape::XML::Document* xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document* xml_doc = doc->getReprDoc();
Inkscape::XML::Node *old_repr = SP_OBJECT_REPR(item);
SPObject *old_obj = doc->getObjectByRepr(old_repr);
Inkscape::XML::Node *parent = old_repr->parent();
@@ -559,7 +561,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
- Geom::OptRect bbox = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect bbox = item->getBounds(item->i2doc_affine());
if (bbox) {
bbox->expandBy(radius);
if (!bbox->contains(p)) {
@@ -577,7 +579,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
Shape *theShape = new Shape;
Shape *theRes = new Shape;
- Geom::Matrix i2doc(sp_item_i2doc_affine(item));
+ Geom::Matrix i2doc(item->i2doc_affine());
orig->ConvertWithBackData((0.08 - (0.07 * fidelity)) / i2doc.descrim()); // default 0.059
orig->Fill(theShape, 0);
@@ -798,7 +800,7 @@ tweak_colors_in_gradient (SPItem *item, bool fill_or_stroke,
if (!gradient || !SP_IS_GRADIENT(gradient))
return;
- Geom::Matrix i2d (sp_item_i2doc_affine (item));
+ Geom::Matrix i2d (item->i2doc_affine ());
Geom::Point p = p_w * i2d.inverse();
p *= (gradient->gradientTransform).inverse();
// now p is in gradient's original coordinates
@@ -860,10 +862,10 @@ tweak_colors_in_gradient (SPItem *item, bool fill_or_stroke,
double offset_l = 0;
double offset_h = 0;
SPObject *child_prev = NULL;
- for (SPObject *child = sp_object_first_child(vector);
- child != NULL; child = SP_OBJECT_NEXT(child)) {
- if (!SP_IS_STOP(child))
+ for (SPObject *child = vector->firstChild(); child; child = child->getNext()) {
+ if (!SP_IS_STOP(child)) {
continue;
+ }
SPStop *stop = SP_STOP (child);
offset_h = stop->offset;
@@ -920,7 +922,7 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point,
bool did = false;
if (SP_IS_GROUP(item)) {
- for (SPObject *child = sp_object_first_child(SP_OBJECT(item)) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ for (SPObject *child = item->firstChild() ; child; child = child->getNext() ) {
if (SP_IS_ITEM(child)) {
if (sp_tweak_color_recursive (mode, SP_ITEM(child), item_at_point,
fill_goal, do_fill,
@@ -937,7 +939,7 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point,
if (!style) {
return false;
}
- Geom::OptRect bbox = item->getBounds(sp_item_i2doc_affine(item),
+ Geom::OptRect bbox = item->getBounds(item->i2doc_affine(),
SPItem::GEOMETRIC_BBOX);
if (!bbox) {
return false;
@@ -967,14 +969,14 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point,
if (this_force > 0.002) {
if (do_blur) {
- Geom::OptRect bbox = item->getBounds(sp_item_i2doc_affine(item),
+ Geom::OptRect bbox = item->getBounds(item->i2doc_affine(),
SPItem::GEOMETRIC_BBOX);
if (!bbox) {
return did;
}
double blur_now = 0;
- Geom::Matrix i2d = sp_item_i2d_affine (item);
+ Geom::Matrix i2d = item->i2d_affine ();
if (style->filter.set && style->getFilter()) {
//cycle through filter primitives
SPObject *primitive_obj = style->getFilter()->children;
@@ -1057,7 +1059,7 @@ sp_tweak_dilate (SPTweakContext *tc, Geom::Point event_p, Geom::Point p, Geom::P
bool did = false;
double radius = get_dilate_radius(tc);
- SPItem *item_at_point = SP_EVENT_CONTEXT(tc)->desktop->item_at_point(event_p, TRUE);
+ SPItem *item_at_point = SP_EVENT_CONTEXT(tc)->desktop->getItemAtPoint(event_p, TRUE);
bool do_fill = false, do_stroke = false, do_opacity = false;
guint32 fill_goal = sp_desktop_get_color_tool(desktop, "/tools/tweak", true, &do_fill);
@@ -1255,56 +1257,56 @@ sp_tweak_context_root_handler(SPEventContext *event_context,
tc->has_dilated = false;
switch (tc->mode) {
case TWEAK_MODE_MOVE:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Move tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Move tweak"));
break;
case TWEAK_MODE_MOVE_IN_OUT:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Move in/out tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Move in/out tweak"));
break;
case TWEAK_MODE_MOVE_JITTER:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Move jitter tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Move jitter tweak"));
break;
case TWEAK_MODE_SCALE:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Scale tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Scale tweak"));
break;
case TWEAK_MODE_ROTATE:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Rotate tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Rotate tweak"));
break;
case TWEAK_MODE_MORELESS:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Duplicate/delete tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Duplicate/delete tweak"));
break;
case TWEAK_MODE_PUSH:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Push path tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Push path tweak"));
break;
case TWEAK_MODE_SHRINK_GROW:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Shrink/grow path tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Shrink/grow path tweak"));
break;
case TWEAK_MODE_ATTRACT_REPEL:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Attract/repel path tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Attract/repel path tweak"));
break;
case TWEAK_MODE_ROUGHEN:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Roughen path tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Roughen path tweak"));
break;
case TWEAK_MODE_COLORPAINT:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Color paint tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Color paint tweak"));
break;
case TWEAK_MODE_COLORJITTER:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Color jitter tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Color jitter tweak"));
break;
case TWEAK_MODE_BLUR:
- sp_document_done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
- SP_VERB_CONTEXT_TWEAK, _("Blur tweak"));
+ DocumentUndo::done(sp_desktop_document(SP_EVENT_CONTEXT(tc)->desktop),
+ SP_VERB_CONTEXT_TWEAK, _("Blur tweak"));
break;
}
}
diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp
index 90a9ba0f5..d405afb8f 100644
--- a/src/ui/clipboard.cpp
+++ b/src/ui/clipboard.cpp
@@ -5,6 +5,7 @@
* Krzysztof Kosiński <tweenk@o2.pl>
* Jon A. Cruz <jon@joncruz.org>
* Incorporates some code from selection-chemistry.cpp, see that file for more credits.
+ * Abhishek Sharma
*
* Copyright (C) 2008 authors
* Copyright (C) 2010 Jon A. Cruz
@@ -335,7 +336,7 @@ bool ClipboardManagerImpl::paste(SPDesktop *desktop, bool in_place)
}
_pasteDocument(desktop, tempdoc, in_place);
- sp_document_unref(tempdoc);
+ tempdoc->doUnref();
return true;
}
@@ -350,8 +351,7 @@ const gchar *ClipboardManagerImpl::getFirstObjectID()
return NULL;
}
- Inkscape::XML::Node
- *root = sp_document_repr_root(tempdoc);
+ Inkscape::XML::Node *root = tempdoc->getReprRoot();
if (!root) {
return NULL;
@@ -405,9 +405,8 @@ bool ClipboardManagerImpl::pasteStyle(SPDesktop *desktop)
}
}
- Inkscape::XML::Node
- *root = sp_document_repr_root(tempdoc),
- *clipnode = sp_repr_lookup_name(root, "inkscape:clipboard", 1);
+ Inkscape::XML::Node *root = tempdoc->getReprRoot();
+ Inkscape::XML::Node *clipnode = sp_repr_lookup_name(root, "inkscape:clipboard", 1);
bool pasted = false;
@@ -421,7 +420,7 @@ bool ClipboardManagerImpl::pasteStyle(SPDesktop *desktop)
_userWarn(desktop, _("No style on the clipboard."));
}
- sp_document_unref(tempdoc);
+ tempdoc->doUnref();
return pasted;
}
@@ -455,7 +454,7 @@ bool ClipboardManagerImpl::pasteSize(SPDesktop *desktop, bool separately, bool a
}
// retrieve size ifomration from the clipboard
- Inkscape::XML::Node *root = sp_document_repr_root(tempdoc);
+ Inkscape::XML::Node *root = tempdoc->getReprRoot();
Inkscape::XML::Node *clipnode = sp_repr_lookup_name(root, "inkscape:clipboard", 1);
bool pasted = false;
if (clipnode) {
@@ -467,7 +466,7 @@ bool ClipboardManagerImpl::pasteSize(SPDesktop *desktop, bool separately, bool a
if (separately) {
for (GSList *i = const_cast<GSList*>(selection->itemList()) ; i ; i = i->next) {
SPItem *item = SP_ITEM(i->data);
- Geom::OptRect obj_size = sp_item_bbox_desktop(item);
+ Geom::OptRect obj_size = item->getBboxDesktop();
if ( !obj_size ) {
continue;
}
@@ -484,7 +483,7 @@ bool ClipboardManagerImpl::pasteSize(SPDesktop *desktop, bool separately, bool a
}
pasted = true;
}
- sp_document_unref(tempdoc);
+ tempdoc->doUnref();
return pasted;
}
@@ -509,7 +508,7 @@ bool ClipboardManagerImpl::pastePathEffect(SPDesktop *desktop)
SPDocument *tempdoc = _retrieveClipboard("image/x-inkscape-svg");
if ( tempdoc ) {
- Inkscape::XML::Node *root = sp_document_repr_root(tempdoc);
+ Inkscape::XML::Node *root = tempdoc->getReprRoot();
Inkscape::XML::Node *clipnode = sp_repr_lookup_name(root, "inkscape:clipboard", 1);
if ( clipnode ) {
gchar const *effectstack = clipnode->attribute("inkscape:path-effect");
@@ -544,12 +543,11 @@ Glib::ustring ClipboardManagerImpl::getPathParameter(SPDesktop* desktop)
_userWarn(desktop, _("Nothing on the clipboard."));
return "";
}
- Inkscape::XML::Node
- *root = sp_document_repr_root(tempdoc),
- *path = sp_repr_lookup_name(root, "svg:path", -1); // unlimited search depth
+ Inkscape::XML::Node *root = tempdoc->getReprRoot();
+ Inkscape::XML::Node *path = sp_repr_lookup_name(root, "svg:path", -1); // unlimited search depth
if ( path == NULL ) {
_userWarn(desktop, _("Clipboard does not contain a path."));
- sp_document_unref(tempdoc);
+ tempdoc->doUnref();
return "";
}
gchar const *svgd = path->attribute("d");
@@ -568,7 +566,7 @@ Glib::ustring ClipboardManagerImpl::getShapeOrTextObjectId(SPDesktop *desktop)
_userWarn(desktop, _("Nothing on the clipboard."));
return "";
}
- Inkscape::XML::Node *root = sp_document_repr_root(tempdoc);
+ Inkscape::XML::Node *root = tempdoc->getReprRoot();
Inkscape::XML::Node *repr = sp_repr_lookup_name(root, "svg:path", -1); // unlimited search depth
if ( repr == NULL ) {
@@ -577,7 +575,7 @@ Glib::ustring ClipboardManagerImpl::getShapeOrTextObjectId(SPDesktop *desktop)
if ( repr == NULL ) {
_userWarn(desktop, _("Clipboard does not contain a path."));
- sp_document_unref(tempdoc);
+ tempdoc->doUnref();
return "";
}
gchar const *svgd = repr->attribute("id");
@@ -615,7 +613,7 @@ void ClipboardManagerImpl::_copySelection(Inkscape::Selection *selection)
// write the complete accumulated transform passed to us
// (we're dealing with unattached representations, so we write to their attributes
// instead of using sp_item_set_transform)
- gchar *transform_str = sp_svg_transform_write(sp_item_i2doc_affine(SP_ITEM(i->data)));
+ gchar *transform_str = sp_svg_transform_write(SP_ITEM(i->data)->i2doc_affine());
obj_copy->setAttribute("transform", transform_str);
g_free(transform_str);
}
@@ -702,7 +700,7 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item)
}
// Copy text paths
if (SP_IS_TEXT_TEXTPATH(item)) {
- _copyTextPath(SP_TEXTPATH(sp_object_first_child(SP_OBJECT(item))));
+ _copyTextPath(SP_TEXTPATH(item->firstChild()));
}
// Copy clipping objects
if (item->clip_ref->getObject()) {
@@ -759,7 +757,7 @@ void ClipboardManagerImpl::_copyPattern(SPPattern *pattern)
_copyNode(SP_OBJECT_REPR(pattern), _doc, _defs);
// items in the pattern may also use gradients and other patterns, so recurse
- for (SPObject *child = sp_object_first_child(SP_OBJECT(pattern)) ; child != NULL ; child = SP_OBJECT_NEXT(child) ) {
+ for ( SPObject *child = pattern->firstChild() ; child ; child = child->getNext() ) {
if (!SP_IS_ITEM (child)) {
continue;
}
@@ -814,10 +812,9 @@ Inkscape::XML::Node *ClipboardManagerImpl::_copyNode(Inkscape::XML::Node *node,
void ClipboardManagerImpl::_pasteDocument(SPDesktop *desktop, SPDocument *clipdoc, bool in_place)
{
SPDocument *target_document = sp_desktop_document(desktop);
- Inkscape::XML::Node
- *root = sp_document_repr_root(clipdoc),
- *target_parent = SP_OBJECT_REPR(desktop->currentLayer());
- Inkscape::XML::Document *target_xmldoc = sp_document_repr_doc(target_document);
+ Inkscape::XML::Node *root = clipdoc->getReprRoot();
+ Inkscape::XML::Node *target_parent = SP_OBJECT_REPR(desktop->currentLayer());
+ Inkscape::XML::Document *target_xmldoc = target_document->getReprDoc();
// copy definitions
_pasteDefs(desktop, clipdoc);
@@ -847,11 +844,11 @@ void ClipboardManagerImpl::_pasteDocument(SPDesktop *desktop, SPDocument *clipdo
selection->setReprList(pasted_objects);
// invers apply parent transform
- Geom::Matrix doc2parent = sp_item_i2doc_affine(SP_ITEM(desktop->currentLayer())).inverse();
+ Geom::Matrix doc2parent = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
sp_selection_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false);
// Update (among other things) all curves in paths, for bounds() to work
- sp_document_ensure_up_to_date(target_document);
+ target_document->ensureUpToDate();
// move selection either to original position (in_place) or to mouse pointer
Geom::OptRect sel_bbox = selection->bounds();
@@ -894,11 +891,10 @@ void ClipboardManagerImpl::_pasteDefs(SPDesktop *desktop, SPDocument *clipdoc)
{
// boilerplate vars copied from _pasteDocument
SPDocument *target_document = sp_desktop_document(desktop);
- Inkscape::XML::Node
- *root = sp_document_repr_root(clipdoc),
- *defs = sp_repr_lookup_name(root, "svg:defs", 1),
- *target_defs = SP_OBJECT_REPR(SP_DOCUMENT_DEFS(target_document));
- Inkscape::XML::Document *target_xmldoc = sp_document_repr_doc(target_document);
+ Inkscape::XML::Node *root = clipdoc->getReprRoot();
+ Inkscape::XML::Node *defs = sp_repr_lookup_name(root, "svg:defs", 1);
+ Inkscape::XML::Node *target_defs = SP_OBJECT_REPR(SP_DOCUMENT_DEFS(target_document));
+ Inkscape::XML::Document *target_xmldoc = target_document->getReprDoc();
prevent_id_clashes(clipdoc, target_document);
@@ -1201,7 +1197,7 @@ void ClipboardManagerImpl::_onGet(Gtk::SelectionData &sel, guint /*info*/)
guint32 bgcolor = 0x00000000;
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));
+ Geom::Rect area = Geom::Rect(origin, origin + _clipboardSPDoc->getDimensions());
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);
@@ -1255,11 +1251,11 @@ void ClipboardManagerImpl::_onClear()
void ClipboardManagerImpl::_createInternalClipboard()
{
if ( _clipboardSPDoc == NULL ) {
- _clipboardSPDoc = sp_document_new(NULL, false, true);
+ _clipboardSPDoc = SPDocument::createNewDoc(NULL, false, true);
//g_assert( _clipboardSPDoc != NULL );
_defs = SP_OBJECT_REPR(SP_DOCUMENT_DEFS(_clipboardSPDoc));
- _doc = sp_document_repr_doc(_clipboardSPDoc);
- _root = sp_document_repr_root(_clipboardSPDoc);
+ _doc = _clipboardSPDoc->getReprDoc();
+ _root = _clipboardSPDoc->getReprRoot();
_clipnode = _doc->createElement("inkscape:clipboard");
_root->appendChild(_clipnode);
@@ -1280,7 +1276,7 @@ void ClipboardManagerImpl::_createInternalClipboard()
void ClipboardManagerImpl::_discardInternalClipboard()
{
if ( _clipboardSPDoc != NULL ) {
- sp_document_unref(_clipboardSPDoc);
+ _clipboardSPDoc->doUnref();
_clipboardSPDoc = NULL;
_defs = NULL;
_doc = NULL;
diff --git a/src/ui/context-menu.cpp b/src/ui/context-menu.cpp
index 262fdcf32..c544d1999 100644
--- a/src/ui/context-menu.cpp
+++ b/src/ui/context-menu.cpp
@@ -1,10 +1,10 @@
-#define __CONTEXT_MENU_C__
-
/*
* Unser-interface related object extension
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* This code is in public domain
*/
@@ -21,6 +21,8 @@
#include "preferences.h"
#include "ui/dialog/dialog-manager.h"
+using Inkscape::DocumentUndo;
+
static void sp_object_type_menu(GType type, SPObject *object, SPDesktop *desktop, GtkMenu *menu);
/* Append object-specific part to context menu */
@@ -274,7 +276,7 @@ sp_item_create_link(GtkMenuItem *menuitem, SPItem *item)
SPDesktop *desktop = (SPDesktop*)gtk_object_get_data(GTK_OBJECT(menuitem), "desktop");
g_return_if_fail(desktop != NULL);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:a");
SP_OBJECT_REPR(SP_OBJECT_PARENT(item))->addChild(repr, SP_OBJECT_REPR(item));
SPObject *object = SP_OBJECT_DOCUMENT(item)->getObjectByRepr(repr);
@@ -289,8 +291,8 @@ sp_item_create_link(GtkMenuItem *menuitem, SPItem *item)
Inkscape::GC::release(repr);
Inkscape::GC::release(child);
- sp_document_done(SP_OBJECT_DOCUMENT(object), SP_VERB_NONE,
- _("Create link"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT(object), SP_VERB_NONE,
+ _("Create link"));
sp_object_attributes_dialog(object, "SPAnchor");
diff --git a/src/ui/context-menu.h b/src/ui/context-menu.h
index c66cd4e96..36846edc3 100644
--- a/src/ui/context-menu.h
+++ b/src/ui/context-menu.h
@@ -1,11 +1,12 @@
-#ifndef __CONTEXT_MENU_H__
-#define __CONTEXT_MENU_H__
+#ifndef SEEN_CONTEXT_MENU_H
+#define SEEN_CONTEXT_MENU_H
/*
* Unser-interface related object extension
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* This code is in public domain
*/
@@ -13,7 +14,7 @@
#include <gtk/gtkmenu.h>
#include "forward.h"
-
+#include "sp-object.h"
/* Append object-specific part to context menu */
void sp_object_menu (SPObject *object, SPDesktop *desktop, GtkMenu *menu);
diff --git a/src/ui/dialog/aboutbox.cpp b/src/ui/dialog/aboutbox.cpp
index 8d467d53f..8db5e7c0b 100644
--- a/src/ui/dialog/aboutbox.cpp
+++ b/src/ui/dialog/aboutbox.cpp
@@ -6,6 +6,7 @@
* MenTaLguY <mental@rydia.net>
* Kees Cook <kees@outflux.net>
* Jon Phillips <jon@rejon.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004 Derek P. Moore
* Copyright 2004 Kees Cook
@@ -147,7 +148,7 @@ Gtk::Widget *build_splash_widget() {
// should be in UTF-*8..
char *about=g_build_filename(INKSCAPE_SCREENSDIR, _("about.svg"), NULL);
- SPDocument *doc=sp_document_new (about, TRUE);
+ SPDocument *doc=SPDocument::createNewDoc (about, TRUE);
g_free(about);
g_return_val_if_fail(doc != NULL, NULL);
@@ -155,14 +156,14 @@ Gtk::Widget *build_splash_widget() {
if ( version && SP_IS_TEXT(version) ) {
sp_te_set_repr_text_multiline (SP_TEXT (version), Inkscape::version_string);
}
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
GtkWidget *v=sp_svg_view_widget_new(doc);
- double width=sp_document_width(doc);
- double height=sp_document_height(doc);
+ double width=doc->getWidth();
+ double height=doc->getHeight();
- sp_document_unref(doc);
+ doc->doUnref();
sp_svg_view_widget_set_resize(SP_SVG_VIEW_WIDGET(v), FALSE, (int)width, (int)height);
diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp
index ba8cc939b..48f0fbf22 100644
--- a/src/ui/dialog/align-and-distribute.cpp
+++ b/src/ui/dialog/align-and-distribute.cpp
@@ -7,6 +7,8 @@
* Frank Felfe <innerspace@iname.com>
* Lauris Kaplinski <lauris@kaplinski.com>
* Tim Dwyer <tgdwyer@gmail.com>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2004, 2005 Authors
*
@@ -152,7 +154,7 @@ private :
selected.erase(master);
/*}*/
//Compute the anchor point
- Geom::OptRect b = sp_item_bbox_desktop (thing);
+ Geom::OptRect b = thing->getBboxDesktop ();
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]);
@@ -163,14 +165,13 @@ private :
}
case AlignAndDistribute::PAGE:
- mp = Geom::Point(a.mx1 * sp_document_width(sp_desktop_document(desktop)),
- a.my1 * sp_document_height(sp_desktop_document(desktop)));
+ mp = Geom::Point(a.mx1 * sp_desktop_document(desktop)->getWidth(),
+ a.my1 * sp_desktop_document(desktop)->getHeight());
break;
case AlignAndDistribute::DRAWING:
{
- Geom::OptRect b = sp_item_bbox_desktop
- ( (SPItem *) sp_document_root (sp_desktop_document (desktop)) );
+ Geom::OptRect b = static_cast<SPItem *>( sp_desktop_document(desktop)->getRoot() )->getBboxDesktop();
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,9 +217,9 @@ private :
it != selected.end();
it++)
{
- sp_document_ensure_up_to_date(sp_desktop_document (desktop));
+ sp_desktop_document (desktop)->ensureUpToDate();
if (!sel_as_group)
- b = sp_item_bbox_desktop (*it);
+ b = (*it)->getBboxDesktop();
if (b) {
Geom::Point const sp(a.sx0 * b->min()[Geom::X] + a.sx1 * b->max()[Geom::X],
a.sy0 * b->min()[Geom::Y] + a.sy1 * b->max()[Geom::Y]);
@@ -234,8 +235,8 @@ private :
prefs->setInt("/options/clonecompensation/value", saved_compensation);
if (changed) {
- sp_document_done ( sp_desktop_document (desktop) , SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
- _("Align"));
+ DocumentUndo::done( sp_desktop_document(desktop) , SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ _("Align"));
}
@@ -322,7 +323,7 @@ private :
it != selected.end();
++it)
{
- Geom::OptRect bbox = sp_item_bbox_desktop(*it);
+ Geom::OptRect bbox = (*it)->getBboxDesktop();
if (bbox) {
sorted.push_back(BBoxSort(*it, *bbox, _orientation, _kBegin, _kEnd));
}
@@ -393,8 +394,8 @@ private :
prefs->setInt("/options/clonecompensation/value", saved_compensation);
if (changed) {
- sp_document_done ( sp_desktop_document (desktop), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
- _("Distribute"));
+ DocumentUndo::done( sp_desktop_document(desktop), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ _("Distribute"));
}
}
guint _index;
@@ -504,8 +505,8 @@ private :
// restore compensation setting
prefs->setInt("/options/clonecompensation/value", saved_compensation);
- sp_document_done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
- _("Remove overlaps"));
+ DocumentUndo::done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ _("Remove overlaps"));
}
};
@@ -535,8 +536,8 @@ private :
// restore compensation setting
prefs->setInt("/options/clonecompensation/value", saved_compensation);
- sp_document_done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
- _("Arrange connector network"));
+ DocumentUndo::done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ _("Arrange connector network"));
}
};
@@ -628,10 +629,11 @@ private :
// restore compensation setting
prefs->setInt("/options/clonecompensation/value", saved_compensation);
- sp_document_done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
- _("Exchange Positions"));
+ DocumentUndo::done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ _("Exchange Positions"));
}
};
+
// instantiae the private static member
boost::optional<Geom::Point> ActionExchangePositions::center;
@@ -661,8 +663,8 @@ private :
// restore compensation setting
prefs->setInt("/options/clonecompensation/value", saved_compensation);
- sp_document_done (sp_desktop_document (_dialog.getDesktop()), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
- _("Unclump"));
+ DocumentUndo::done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ _("Unclump"));
}
};
@@ -715,8 +717,8 @@ private :
it != selected.end();
++it)
{
- sp_document_ensure_up_to_date(sp_desktop_document (desktop));
- Geom::OptRect item_box = sp_item_bbox_desktop (*it);
+ sp_desktop_document (desktop)->ensureUpToDate();
+ Geom::OptRect item_box = (*it)->getBboxDesktop ();
if (item_box) {
// find new center, staying within bbox
double x = _dialog.randomize_bbox->min()[Geom::X] + (*item_box)[Geom::X].extent() /2 +
@@ -732,8 +734,8 @@ private :
// restore compensation setting
prefs->setInt("/options/clonecompensation/value", saved_compensation);
- sp_document_done (sp_desktop_document (desktop), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
- _("Randomize positions"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ _("Randomize positions"));
}
};
@@ -801,7 +803,7 @@ private :
Inkscape::Text::Layout const *layout = te_get_layout(*it);
boost::optional<Geom::Point> pt = layout->baselineAnchorPoint();
if (pt) {
- Geom::Point base = *pt * sp_item_i2d_affine(*it);
+ Geom::Point base = *pt * (*it)->i2d_affine();
if (base[Geom::X] < b_min[Geom::X]) b_min[Geom::X] = base[Geom::X];
if (base[Geom::Y] < b_min[Geom::Y]) b_min[Geom::Y] = base[Geom::Y];
if (base[Geom::X] > b_max[Geom::X]) b_max[Geom::X] = base[Geom::X];
@@ -831,8 +833,8 @@ private :
}
if (changed) {
- sp_document_done (sp_desktop_document (desktop), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
- _("Distribute text baselines"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ _("Distribute text baselines"));
}
} else {
@@ -844,7 +846,7 @@ private :
Inkscape::Text::Layout const *layout = te_get_layout(*it);
boost::optional<Geom::Point> pt = layout->baselineAnchorPoint();
if (pt) {
- Geom::Point base = *pt * sp_item_i2d_affine(*it);
+ Geom::Point base = *pt * (*it)->i2d_affine();
Geom::Point t(0.0, 0.0);
t[_orientation] = b_min[_orientation] - base[_orientation];
sp_item_move_rel(*it, Geom::Translate(t));
@@ -854,8 +856,8 @@ private :
}
if (changed) {
- sp_document_done (sp_desktop_document (desktop), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
- _("Align text baselines"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_DIALOG_ALIGN_DISTRIBUTE,
+ _("Align text baselines"));
}
}
}
@@ -1239,7 +1241,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++) {
- Geom::OptRect b = sp_item_bbox_desktop (*it);
+ Geom::OptRect b = (*it)->getBboxDesktop ();
if (b) {
gdouble dim = (*b)[horizontal ? Geom::X : Geom::Y].extent();
if (dim > max) {
@@ -1256,7 +1258,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++) {
- Geom::OptRect b = sp_item_bbox_desktop (*it);
+ Geom::OptRect b = (*it)->getBboxDesktop ();
if (b) {
gdouble dim = (*b)[horizontal ? Geom::X : Geom::Y].extent();
if (dim < max) {
diff --git a/src/ui/dialog/color-item.cpp b/src/ui/dialog/color-item.cpp
index c7dfa0dc4..014273274 100644
--- a/src/ui/dialog/color-item.cpp
+++ b/src/ui/dialog/color-item.cpp
@@ -3,6 +3,7 @@
*/
/* Authors:
* Jon A. Cruz
+ * Abhishek Sharma
*
* Copyright (C) 2010 Jon A. Cruz
*
@@ -449,7 +450,7 @@ void ColorItem::_updatePreviews()
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
if ( desktop ) {
SPDocument* document = sp_desktop_document( desktop );
- Inkscape::XML::Node *rroot = sp_document_repr_root( document );
+ Inkscape::XML::Node *rroot = document->getReprRoot();
if ( rroot ) {
// Find where this thing came from
@@ -477,7 +478,7 @@ void ColorItem::_updatePreviews()
str = 0;
if ( bruteForce( document, rroot, paletteName, def.getR(), def.getG(), def.getB() ) ) {
- sp_document_done( document , SP_VERB_DIALOG_SWATCHES,
+ SPDocumentUndo::done( document , SP_VERB_DIALOG_SWATCHES,
_("Change color definition"));
}
}
@@ -723,7 +724,7 @@ void ColorItem::buttonClicked(bool secondary)
sp_desktop_set_style(desktop, css);
sp_repr_css_attr_unref(css);
- sp_document_done( sp_desktop_document(desktop), SP_VERB_DIALOG_SWATCHES, descr.c_str() );
+ DocumentUndo::done( sp_desktop_document(desktop), SP_VERB_DIALOG_SWATCHES, descr.c_str() );
}
}
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index f22509496..16212bef7 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -8,6 +8,8 @@
* Jon Phillips <jon@rejon.org>
* Ralf Stephan <ralf@ark.in-berlin.de> (Gtkmm)
* Diederik van Lierop <mail@diedenrezi.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006-2008 Johan Engelen <johan@shouraizou.nl>
* Copyright (C) 2000 - 2008 Authors
@@ -404,7 +406,7 @@ DocumentProperties::linkSelectedProfile()
g_warning("No color profile available.");
return;
}
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *cprofRepr = xml_doc->createElement("svg:color-profile");
gchar* tmp = static_cast<gchar*>(_menu.get_active()->get_data("name"));
Glib::ustring nameStr = tmp ? tmp : "profile"; // TODO add some auto-numbering to avoid collisions
@@ -426,7 +428,7 @@ DocumentProperties::linkSelectedProfile()
//Inkscape::GC::release(defsRepr);
// inform the document, so we can undo
- sp_document_done(desktop->doc(), SP_VERB_EDIT_LINK_COLOR_PROFILE, _("Link Color Profile"));
+ DocumentUndo::done(desktop->doc(), SP_VERB_EDIT_LINK_COLOR_PROFILE, _("Link Color Profile"));
populate_linked_profiles_box();
}
@@ -436,7 +438,7 @@ void
DocumentProperties::populate_linked_profiles_box()
{
_LinkedProfilesListStore->clear();
- const GSList *current = sp_document_get_resource_list( SP_ACTIVE_DOCUMENT, "iccprofile" );
+ const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "iccprofile" );
if (current) _emb_profiles_observer.set(SP_OBJECT(current->data)->parent);
while ( current ) {
SPObject* obj = SP_OBJECT(current->data);
@@ -493,13 +495,15 @@ void DocumentProperties::removeSelectedProfile(){
}
}
- const GSList *current = sp_document_get_resource_list( SP_ACTIVE_DOCUMENT, "iccprofile" );
+ const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "iccprofile" );
while ( current ) {
SPObject* obj = SP_OBJECT(current->data);
Inkscape::ColorProfile* prof = reinterpret_cast<Inkscape::ColorProfile*>(obj);
if (!name.compare(prof->name)){
- sp_repr_unparent(obj->repr);
- sp_document_done(SP_ACTIVE_DOCUMENT, SP_VERB_EDIT_REMOVE_COLOR_PROFILE, _("Remove linked color profile"));
+
+ //XML Tree being used directly here while it shouldn't be.
+ sp_repr_unparent(obj->getRepr());
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_EDIT_REMOVE_COLOR_PROFILE, _("Remove linked color profile"));
}
current = g_slist_next(current);
}
@@ -565,7 +569,7 @@ DocumentProperties::build_cms()
_LinkedProfilesList.signal_button_release_event().connect_notify(sigc::mem_fun(*this, &DocumentProperties::linked_profiles_list_button_release));
cms_create_popup_menu(_LinkedProfilesList, sigc::mem_fun(*this, &DocumentProperties::removeSelectedProfile));
- const GSList *current = sp_document_get_resource_list( SP_ACTIVE_DOCUMENT, "defs" );
+ const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "defs" );
if (current) {
_emb_profiles_observer.set(SP_OBJECT(current->data)->parent);
}
@@ -623,7 +627,7 @@ DocumentProperties::build_scripting()
#endif // ENABLE_LCMS
//TODO: review this observers code:
- const GSList *current = sp_document_get_resource_list( SP_ACTIVE_DOCUMENT, "script" );
+ const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
if (current) {
_ext_scripts_observer.set(SP_OBJECT(current->data)->parent);
}
@@ -636,7 +640,7 @@ void DocumentProperties::addExternalScript(){
if (!desktop){
g_warning("No active desktop");
} else {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc());
+ Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
Inkscape::XML::Node *scriptRepr = xml_doc->createElement("svg:script");
scriptRepr->setAttribute("xlink:href", (gchar*) _script_entry.get_text().c_str());
_script_entry.set_text("");
@@ -644,7 +648,7 @@ void DocumentProperties::addExternalScript(){
xml_doc->root()->addChild(scriptRepr, NULL);
// inform the document, so we can undo
- sp_document_done(desktop->doc(), SP_VERB_EDIT_ADD_EXTERNAL_SCRIPT, _("Add external script..."));
+ DocumentUndo::done(desktop->doc(), SP_VERB_EDIT_ADD_EXTERNAL_SCRIPT, _("Add external script..."));
populate_external_scripts_box();
}
@@ -662,13 +666,15 @@ void DocumentProperties::removeExternalScript(){
}
}
- const GSList *current = sp_document_get_resource_list( SP_ACTIVE_DOCUMENT, "script" );
+ const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
while ( current ) {
SPObject* obj = SP_OBJECT(current->data);
SPScript* script = (SPScript*) obj;
if (name == script->xlinkhref){
- sp_repr_unparent(obj->repr);
- sp_document_done(SP_ACTIVE_DOCUMENT, SP_VERB_EDIT_REMOVE_EXTERNAL_SCRIPT, _("Remove external script"));
+
+ //XML Tree being used directly here while it shouldn't be.
+ sp_repr_unparent(obj->getRepr());
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_EDIT_REMOVE_EXTERNAL_SCRIPT, _("Remove external script"));
}
current = g_slist_next(current);
}
@@ -679,7 +685,7 @@ void DocumentProperties::removeExternalScript(){
void DocumentProperties::populate_external_scripts_box(){
_ExternalScriptsListStore->clear();
- const GSList *current = sp_document_get_resource_list( SP_ACTIVE_DOCUMENT, "script" );
+ const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "script" );
if (current) _ext_scripts_observer.set(SP_OBJECT(current->data)->parent);
while ( current ) {
SPObject* obj = SP_OBJECT(current->data);
@@ -798,8 +804,8 @@ DocumentProperties::update()
if (nv->doc_units)
_rum_deflt.setUnit (nv->doc_units);
- double const doc_w_px = sp_document_width(sp_desktop_document(dt));
- double const doc_h_px = sp_document_height(sp_desktop_document(dt));
+ double const doc_w_px = sp_desktop_document(dt)->getWidth();
+ double const doc_h_px = sp_desktop_document(dt)->getHeight();
_page_sizer.setDim (doc_w_px, doc_h_px);
_page_sizer.updateFitMarginsUI(SP_OBJECT_REPR(nv));
@@ -961,7 +967,7 @@ DocumentProperties::onRemoveGrid()
// delete the grid that corresponds with the selected tab
// when the grid is deleted from SVG, the SPNamedview handler automatically deletes the object, so found_grid becomes an invalid pointer!
found_grid->repr->parent()->removeChild(found_grid->repr);
- sp_document_done(sp_desktop_document(dt), SP_VERB_DIALOG_NAMEDVIEW, _("Remove grid"));
+ DocumentUndo::done(sp_desktop_document(dt), SP_VERB_DIALOG_NAMEDVIEW, _("Remove grid"));
}
}
diff --git a/src/ui/dialog/filedialogimpl-gtkmm.cpp b/src/ui/dialog/filedialogimpl-gtkmm.cpp
index fbfdc4a9b..855d5a223 100644
--- a/src/ui/dialog/filedialogimpl-gtkmm.cpp
+++ b/src/ui/dialog/filedialogimpl-gtkmm.cpp
@@ -6,6 +6,7 @@
* Joel Holdsworth
* Bruno Dilly
* Other dudes from The Inkscape Organization
+ * Abhishek Sharma
*
* Copyright (C) 2004-2007 Bob Jamison
* Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
@@ -123,9 +124,9 @@ findExpanderWidgets(Gtk::Container *parent,
bool SVGPreview::setDocument(SPDocument *doc)
{
if (document)
- sp_document_unref(document);
+ document->doUnref();
- sp_document_ref(doc);
+ doc->doRef();
document = doc;
//This should remove it from the box, and free resources
@@ -151,7 +152,7 @@ bool SVGPreview::setFileName(Glib::ustring &theFileName)
* I don't know why passing false to keepalive is bad. But it
* prevents the display of an svg with a non-ascii filename
*/
- SPDocument *doc = sp_document_new (fileName.c_str(), true);
+ SPDocument *doc = SPDocument::createNewDoc (fileName.c_str(), true);
if (!doc) {
g_warning("SVGView: error loading document '%s'\n", fileName.c_str());
return false;
@@ -159,7 +160,7 @@ bool SVGPreview::setFileName(Glib::ustring &theFileName)
setDocument(doc);
- sp_document_unref(doc);
+ doc->doUnref();
return true;
}
@@ -172,7 +173,7 @@ bool SVGPreview::setFromMem(char const *xmlBuffer)
return false;
gint len = (gint)strlen(xmlBuffer);
- SPDocument *doc = sp_document_new_from_mem(xmlBuffer, len, 0);
+ SPDocument *doc = SPDocument::createNewDocFromMem(xmlBuffer, len, 0);
if (!doc) {
g_warning("SVGView: error loading buffer '%s'\n",xmlBuffer);
return false;
@@ -180,7 +181,7 @@ bool SVGPreview::setFromMem(char const *xmlBuffer)
setDocument(doc);
- sp_document_unref(doc);
+ doc->doUnref();
Inkscape::GC::request_early_collection();
diff --git a/src/ui/dialog/filedialogimpl-win32.cpp b/src/ui/dialog/filedialogimpl-win32.cpp
index b4379e071..9f33d8838 100644
--- a/src/ui/dialog/filedialogimpl-win32.cpp
+++ b/src/ui/dialog/filedialogimpl-win32.cpp
@@ -4,6 +4,7 @@
/* Authors:
* Joel Holdsworth
* The Inkscape Organization
+ * Abhishek Sharma
*
* Copyright (C) 2004-2008 The Inkscape Organization
*
@@ -908,20 +909,20 @@ bool FileOpenDialogImplWin32::set_svg_preview()
gchar *utf8string = g_utf16_to_utf8((const gunichar2*)_path_string,
_MAX_PATH, NULL, NULL, NULL);
- SPDocument *svgDoc = sp_document_new (utf8string, true);
+ SPDocument *svgDoc = SPDocument::createNewDoc (utf8string, true);
g_free(utf8string);
// Check the document loaded properly
if(svgDoc == NULL) return false;
if(svgDoc->root == NULL)
{
- sp_document_unref(svgDoc);
+ svgDoc->doUnref();
return false;
}
// Get the size of the document
- const double svgWidth = sp_document_width(svgDoc);
- const double svgHeight = sp_document_height(svgDoc);
+ const double svgWidth = svgDoc->getWidth();
+ const double svgHeight = svgDoc->getHeight();
// Find the minimum scale to fit the image inside the preview area
const double scaleFactorX = PreviewSize / svgWidth;
@@ -938,15 +939,15 @@ bool FileOpenDialogImplWin32::set_svg_preview()
// write object bbox to area
Geom::OptRect maybeArea(area);
- sp_document_ensure_up_to_date (svgDoc);
- sp_item_invoke_bbox((SPItem *) svgDoc->root, maybeArea,
- sp_item_i2d_affine((SPItem *)(svgDoc->root)), TRUE);
+ svgDoc->ensureUpToDate();
+ static_cast<SPItem *>(svgDoc->root)->invoke_bbox( maybeArea,
+ static_cast<SPItem *>(svgDoc->root)->i2d_affine(), TRUE);
NRArena *const arena = NRArena::create();
- unsigned const key = sp_item_display_key_new(1);
+ unsigned const key = SPItem::display_key_new(1);
- NRArenaItem *root = sp_item_invoke_show((SPItem*)(svgDoc->root),
+ NRArenaItem *root = static_cast<SPItem*>(svgDoc->root)->invoke_show(
arena, key, SP_ITEM_SHOW_DISPLAY);
NRGC gc(NULL);
@@ -970,7 +971,7 @@ bool FileOpenDialogImplWin32::set_svg_preview()
// Fail if the pixblock failed to allocate
if(pixBlock.data.px == NULL)
{
- sp_document_unref(svgDoc);
+ svgDoc->doUnref();
return false;
}
@@ -982,8 +983,8 @@ bool FileOpenDialogImplWin32::set_svg_preview()
nr_arena_item_invoke_render(NULL, root, &bbox, &pixBlock, /*0*/NR_ARENA_ITEM_RENDER_NO_CACHE);
// Tidy up
- sp_document_unref(svgDoc);
- sp_item_invoke_hide((SPItem*)(svgDoc->root), key);
+ svgDoc->doUnref();
+ static_cast<SPItem*>(svgDoc->root)->invoke_hide(key);
nr_object_unref((NRObject *) arena);
// Create the GDK pixbuf
diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp
index b6a2c4fbf..63f387911 100644
--- a/src/ui/dialog/filter-effects-dialog.cpp
+++ b/src/ui/dialog/filter-effects-dialog.cpp
@@ -5,6 +5,8 @@
* Nicholas Bishop <nicholasbishop@gmail.org>
* Rodrigo Kumpera <kumpera@gmail.com>
* Felipe C. da S. Sanches <juca@members.fsf.org>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Authors
*
@@ -56,6 +58,7 @@
#include "style.h"
#include "svg/svg-color.h"
+#include "svg/stringstream.h"
#include "ui/dialog/filedialog.h"
#include "verbs.h"
#include "xml/node.h"
@@ -302,6 +305,7 @@ public:
// Returns the color in 'rgb(r,g,b)' form.
Glib::ustring get_as_attribute() const
{
+ // no doubles here, so we can use the standard string stream.
std::ostringstream os;
const Gdk::Color c = get_color();
const int r = c.get_red() / 257, g = c.get_green() / 257, b = c.get_blue() / 257;//TO-DO: verify this. This sounds a lot strange! shouldn't it be 256?
@@ -369,7 +373,8 @@ public:
Glib::ustring get_as_attribute() const
{
- std::ostringstream os;
+ // use SVGOStringStream to output SVG-compatible doubles
+ Inkscape::SVGOStringStream os;
for(Gtk::TreeIter iter = _model->children().begin();
iter != _model->children().end(); ++iter) {
@@ -1021,16 +1026,18 @@ private:
!(ls == 1 && SP_IS_FEPOINTLIGHT(child)) &&
!(ls == 2 && SP_IS_FESPOTLIGHT(child))) {
if(child)
- sp_repr_unparent(child->repr);
+ //XML Tree being used directly here while it shouldn't be.
+ sp_repr_unparent(child->getRepr());
if(ls != -1) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(prim->document);
+ Inkscape::XML::Document *xml_doc = prim->document->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement(_light_source.get_active_data()->key.c_str());
- prim->repr->appendChild(repr);
+ //XML Tree being used directly here while it shouldn't be.
+ prim->getRepr()->appendChild(repr);
Inkscape::GC::release(repr);
}
- sp_document_done(prim->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("New light source"));
+ DocumentUndo::done(prim->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("New light source"));
update();
}
@@ -1142,8 +1149,7 @@ void FilterEffectsDialog::FilterModifier::on_activate_desktop(Application*, SPDe
me->_resource_changed.disconnect();
me->_resource_changed =
- sp_document_resources_changed_connect(sp_desktop_document(desktop), "filter",
- sigc::mem_fun(me, &FilterModifier::update_filters));
+ sp_desktop_document(desktop)->connectResourcesChanged("filter",sigc::mem_fun(me, &FilterModifier::update_filters));
me->_dialog.setDesktop(desktop);
@@ -1214,7 +1220,7 @@ void FilterEffectsDialog::FilterModifier::on_name_edited(const Glib::ustring& pa
if(iter) {
SPFilter* filter = (*iter)[_columns.filter];
filter->setLabel(text.c_str());
- sp_document_done(filter->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Rename filter"));
+ DocumentUndo::done(filter->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Rename filter"));
if(iter)
(*iter)[_columns.label] = text;
}
@@ -1250,7 +1256,7 @@ void FilterEffectsDialog::FilterModifier::on_selection_toggled(const Glib::ustri
}
update_selection(sel);
- sp_document_done(doc, SP_VERB_DIALOG_FILTER_EFFECTS, _("Apply filter"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_FILTER_EFFECTS, _("Apply filter"));
}
}
@@ -1260,7 +1266,7 @@ void FilterEffectsDialog::FilterModifier::update_filters()
{
SPDesktop* desktop = _dialog.getDesktop();
SPDocument* document = sp_desktop_document(desktop);
- const GSList* filters = sp_document_get_resource_list(document, "filter");
+ const GSList* filters = document->getResourceList("filter");
_model->clear();
@@ -1326,7 +1332,7 @@ void FilterEffectsDialog::FilterModifier::add_filter()
select_filter(filter);
- sp_document_done(doc, SP_VERB_DIALOG_FILTER_EFFECTS, _("Add filter"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_FILTER_EFFECTS, _("Add filter"));
}
void FilterEffectsDialog::FilterModifier::remove_filter()
@@ -1335,9 +1341,11 @@ void FilterEffectsDialog::FilterModifier::remove_filter()
if(filter) {
SPDocument* doc = filter->document;
- sp_repr_unparent(filter->repr);
- sp_document_done(doc, SP_VERB_DIALOG_FILTER_EFFECTS, _("Remove filter"));
+ //XML Tree being used directly here while it shouldn't be.
+ sp_repr_unparent(filter->getRepr());
+
+ DocumentUndo::done(doc, SP_VERB_DIALOG_FILTER_EFFECTS, _("Remove filter"));
update_filters();
}
@@ -1352,7 +1360,7 @@ void FilterEffectsDialog::FilterModifier::duplicate_filter()
repr = repr->duplicate(repr->document());
parent->appendChild(repr);
- sp_document_done(filter->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Duplicate filter"));
+ DocumentUndo::done(filter->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Duplicate filter"));
update_filters();
}
@@ -1487,7 +1495,9 @@ void FilterEffectsDialog::PrimitiveList::update()
if(prim) {
Gtk::TreeModel::Row row = *_model->append();
row[_columns.primitive] = prim;
- row[_columns.type_id] = FPConverter.get_id_from_key(prim->repr->name());
+
+ //XML Tree being used directly here while it shouldn't be.
+ row[_columns.type_id] = FPConverter.get_id_from_key(prim->getRepr()->name());
row[_columns.type] = _(FPConverter.get_label(row[_columns.type_id]).c_str());
row[_columns.id] = prim->getId();
@@ -1540,10 +1550,11 @@ void FilterEffectsDialog::PrimitiveList::remove_selected()
if(prim) {
_observer->set(0);
- sp_repr_unparent(prim->repr);
+ //XML Tree being used directly here while it shouldn't be.
+ sp_repr_unparent(prim->getRepr());
- sp_document_done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_DIALOG_FILTER_EFFECTS,
- _("Remove filter primitive"));
+ DocumentUndo::done(sp_desktop_document(_dialog.getDesktop()), SP_VERB_DIALOG_FILTER_EFFECTS,
+ _("Remove filter primitive"));
update();
}
@@ -1913,9 +1924,11 @@ bool FilterEffectsDialog::PrimitiveList::on_button_release_event(GdkEventButton*
if(c == _in_drag && SP_IS_FEMERGENODE(o)) {
// If input is null, delete it
if(!in_val) {
- sp_repr_unparent(o->repr);
- sp_document_done(prim->document, SP_VERB_DIALOG_FILTER_EFFECTS,
- _("Remove merge node"));
+
+ //XML Tree being used directly here while it shouldn't be.
+ sp_repr_unparent(o->getRepr());
+ DocumentUndo::done(prim->document, SP_VERB_DIALOG_FILTER_EFFECTS,
+ _("Remove merge node"));
(*get_selection()->get_selected())[_columns.primitive] = prim;
}
else
@@ -1925,10 +1938,12 @@ bool FilterEffectsDialog::PrimitiveList::on_button_release_event(GdkEventButton*
}
// Add new input?
if(!handled && c == _in_drag && in_val) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(prim->document);
+ Inkscape::XML::Document *xml_doc = prim->document->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("svg:feMergeNode");
repr->setAttribute("inkscape:collect", "always");
- prim->repr->appendChild(repr);
+
+ //XML Tree being used directly here while it shouldn't be.
+ prim->getRepr()->appendChild(repr);
SPFeMergeNode *node = SP_FEMERGENODE(prim->document->getObjectByRepr(repr));
Inkscape::GC::release(repr);
_dialog.set_attr(node, SP_ATTR_IN, in_val);
@@ -2031,7 +2046,7 @@ void FilterEffectsDialog::PrimitiveList::on_drag_end(const Glib::RefPtr<Gdk::Dra
filter->requestModified(SP_OBJECT_MODIFIED_FLAG);
- sp_document_done(filter->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Reorder filter primitive"));
+ DocumentUndo::done(filter->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Reorder filter primitive"));
}
// If a connection is dragged towards the top or bottom of the list, the list should scroll to follow.
@@ -2263,7 +2278,7 @@ void FilterEffectsDialog::add_primitive()
_primitive_list.select(prim);
- sp_document_done(filter->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Add filter primitive"));
+ DocumentUndo::done(filter->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Add filter primitive"));
}
}
@@ -2359,7 +2374,7 @@ void FilterEffectsDialog::duplicate_primitive()
repr = SP_OBJECT_REPR(origprim)->duplicate(SP_OBJECT_REPR(origprim)->document());
SP_OBJECT_REPR(filter)->appendChild(repr);
- sp_document_done(filter->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Duplicate filter primitive"));
+ DocumentUndo::done(filter->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Duplicate filter primitive"));
_primitive_list.update();
}
@@ -2411,8 +2426,8 @@ void FilterEffectsDialog::set_attr(SPObject* o, const SPAttributeEnum attr, cons
Glib::ustring undokey = "filtereffects:";
undokey += name;
- sp_document_maybe_done(filter->document, undokey.c_str(), SP_VERB_DIALOG_FILTER_EFFECTS,
- _("Set filter primitive attribute"));
+ DocumentUndo::maybeDone(filter->document, undokey.c_str(), SP_VERB_DIALOG_FILTER_EFFECTS,
+ _("Set filter primitive attribute"));
}
_attr_lock = false;
@@ -2467,7 +2482,9 @@ void FilterEffectsDialog::update_settings_view()
SPFilterPrimitive* prim = _primitive_list.get_selected();
if(prim) {
- _settings->show_and_update(FPConverter.get_id_from_key(prim->repr->name()), prim);
+
+ //XML Tree being used directly here while it shouldn't be.
+ _settings->show_and_update(FPConverter.get_id_from_key(prim->getRepr()->name()), prim);
_empty_settings.hide();
}
diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp
index 7fad00f56..b6d6a0319 100644
--- a/src/ui/dialog/find.cpp
+++ b/src/ui/dialog/find.cpp
@@ -4,6 +4,8 @@
* Authors:
* Bryce W. Harrington <bryce@bryceharrington.org>
* Johan Engelen <goejendaagh@zonnet.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2004-2006 Authors
*
@@ -76,8 +78,8 @@ Find::Find()
_check_texts(_("Texts"), _("Search text objects")),
_check_groups(_("Groups"), _("Search groups")),
_check_clones(
- //TRANSLATORS: "Clones" is a noun indicating type of object to find
- C_("Find dialog", "Clones"), _("Search clones")),
+ //TRANSLATORS: "Clones" is a noun indicating type of object to find
+ C_("Find dialog", "Clones"), _("Search clones")),
_check_images(_("Images"), _("Search images")),
_check_offsets(_("Offsets"), _("Search offset objects")),
@@ -346,7 +348,7 @@ Find::all_items (SPObject *r, GSList *l, bool hidden, bool locked)
if (!strcmp (SP_OBJECT_REPR (r)->name(), "svg:metadata"))
return l; // we're not interested in metadata
- for (SPObject *child = sp_object_first_child(r); child; child = SP_OBJECT_NEXT (child)) {
+ for (SPObject *child = r->firstChild(); child; child = child->getNext()) {
if (SP_IS_ITEM (child) && !SP_OBJECT_IS_CLONED (child) && !desktop->isLayer(SP_ITEM(child))) {
if ((hidden || !desktop->itemIsHidden(SP_ITEM(child))) && (locked || !SP_ITEM(child)->isLocked())) {
l = g_slist_prepend (l, child);
@@ -415,7 +417,7 @@ Find::onFind()
if (_check_search_layer.get_active()) {
l = all_items (desktop->currentLayer(), l, hidden, locked);
} else {
- l = all_items (SP_DOCUMENT_ROOT (sp_desktop_document (desktop)), l, hidden, locked);
+ l = all_items(sp_desktop_document(desktop)->getRoot(), l, hidden, locked);
}
}
guint all = g_slist_length (l);
diff --git a/src/ui/dialog/glyphs.cpp b/src/ui/dialog/glyphs.cpp
index 5e66ca9b8..f3d7ed971 100644
--- a/src/ui/dialog/glyphs.cpp
+++ b/src/ui/dialog/glyphs.cpp
@@ -4,6 +4,7 @@
/* Authors:
* Jon A. Cruz
+ * Abhishek Sharma
*
* Copyright (C) 2010 Jon A. Cruz
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -28,7 +29,7 @@
#include "glyphs.h"
#include "desktop.h"
-#include "document.h" // for sp_document_done()
+#include "document.h" // for SPDocumentUndo::done()
#include "libnrtype/font-instance.h"
#include "sp-flowtext.h"
#include "sp-text.h"
@@ -571,7 +572,7 @@ void GlyphsPanel::insertText()
}
combined += glyphs;
sp_te_set_repr_text_multiline(textItem, combined.c_str());
- sp_document_done(targetDesktop->doc(), SP_VERB_CONTEXT_TEXT, _("Append text"));
+ DocumentUndo::done(targetDesktop->doc(), SP_VERB_CONTEXT_TEXT, _("Append text"));
}
}
}
diff --git a/src/ui/dialog/guides.cpp b/src/ui/dialog/guides.cpp
index aac6024b9..1ab0d51bc 100644
--- a/src/ui/dialog/guides.cpp
+++ b/src/ui/dialog/guides.cpp
@@ -5,6 +5,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Andrius R. <knutux@gmail.com>
* Johan Engelen
+ * Abhishek Sharma
*
* Copyright (C) 1999-2007 Authors
*
@@ -108,8 +109,8 @@ void GuidelinePropertiesDialog::_onApply()
sp_guide_moveto(*_guide, newpos, true);
- sp_document_done(SP_OBJECT_DOCUMENT(_guide), SP_VERB_NONE,
- _("Set guide properties"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT(_guide), SP_VERB_NONE,
+ _("Set guide properties"));
}
void GuidelinePropertiesDialog::_onOK()
@@ -121,8 +122,8 @@ void GuidelinePropertiesDialog::_onDelete()
{
SPDocument *doc = SP_OBJECT_DOCUMENT(_guide);
sp_guide_remove(_guide);
- sp_document_done(doc, SP_VERB_NONE,
- _("Delete guide"));
+ DocumentUndo::done(doc, SP_VERB_NONE,
+ _("Delete guide"));
}
void GuidelinePropertiesDialog::_response(gint response)
@@ -225,9 +226,9 @@ void GuidelinePropertiesDialog::_setup() {
// initialize dialog
_oldpos = _guide->point_on_line;
- if (_guide->is_vertical()) {
+ if (_guide->isVertical()) {
_oldangle = 90;
- } else if (_guide->is_horizontal()) {
+ } else if (_guide->isHorizontal()) {
_oldangle = 0;
} else {
_oldangle = Geom::rad_to_deg( std::atan2( - _guide->normal_to_line[Geom::X], _guide->normal_to_line[Geom::Y] ) );
diff --git a/src/ui/dialog/icon-preview.cpp b/src/ui/dialog/icon-preview.cpp
index f35bd964b..4ba63b448 100644
--- a/src/ui/dialog/icon-preview.cpp
+++ b/src/ui/dialog/icon-preview.cpp
@@ -5,6 +5,7 @@
* Jon A. Cruz
* Bob Jamison
* Other dudes from The Inkscape Organization
+ * Abhishek Sharma
*
* Copyright (C) 2004 Bob Jamison
* Copyright (C) 2005,2010 Jon A. Cruz
@@ -444,10 +445,9 @@ void IconPreviewPanel::renderPreview( SPObject* obj )
NRArena *arena = NRArena::create();
/* Create ArenaItem and set transform */
- unsigned int visionkey = sp_item_display_key_new(1);
+ unsigned int visionkey = SPItem::display_key_new(1);
- root = sp_item_invoke_show ( SP_ITEM( SP_DOCUMENT_ROOT(doc) ),
- arena, visionkey, SP_ITEM_SHOW_DISPLAY );
+ root = SP_ITEM( doc->getRoot() )->invoke_show( arena, visionkey, SP_ITEM_SHOW_DISPLAY );
for ( int i = 0; i < numEntries; i++ ) {
unsigned unused;
@@ -465,7 +465,7 @@ void IconPreviewPanel::renderPreview( SPObject* obj )
}
updateMagnify();
- sp_item_invoke_hide(SP_ITEM(sp_document_root(doc)), visionkey);
+ SP_ITEM(doc->getRoot())->invoke_hide(visionkey);
nr_object_unref((NRObject *) arena);
renderTimer->stop();
minDelay = std::max( 0.1, renderTimer->elapsed() * 3.0 );
diff --git a/src/ui/dialog/layer-properties.cpp b/src/ui/dialog/layer-properties.cpp
index 1728ff3a6..bf15bcd76 100644
--- a/src/ui/dialog/layer-properties.cpp
+++ b/src/ui/dialog/layer-properties.cpp
@@ -4,6 +4,7 @@
/* Author:
* Bryce W. Harrington <bryce@bryceharrington.com>
* Andrius R. <knutux@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2004 Bryce Harrington
* Copyright (C) 2006 Andrius R.
@@ -105,8 +106,8 @@ LayerPropertiesDialog::_apply()
g_assert(_strategy != NULL);
_strategy->perform(*this);
- sp_document_done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_NONE,
- _("Add layer"));
+ DocumentUndo::done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_NONE,
+ _("Add layer"));
_close();
}
@@ -188,8 +189,8 @@ void LayerPropertiesDialog::Rename::perform(LayerPropertiesDialog &dialog) {
(gchar *)name.c_str(),
FALSE
);
- sp_document_done(sp_desktop_document(desktop), SP_VERB_NONE,
- _("Rename layer"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_NONE,
+ _("Rename layer"));
// TRANSLATORS: This means "The layer has been renamed"
desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Renamed layer"));
}
diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp
index c3c0ae3c5..0eca5bbca 100644
--- a/src/ui/dialog/layers.cpp
+++ b/src/ui/dialog/layers.cpp
@@ -3,6 +3,7 @@
*
* Authors:
* Jon A. Cruz
+ * Abhishek Sharma
*
* Copyright (C) 2006,2010 Jon A. Cruz
*
@@ -468,8 +469,8 @@ void LayersPanel::_toggled( Glib::ustring const& str, int targetCol )
row[_model->_colVisible] = newValue;
item->setHidden( !newValue );
item->updateRepr();
- sp_document_done( _desktop->doc() , SP_VERB_DIALOG_LAYERS,
- newValue? _("Unhide layer") : _("Hide layer"));
+ DocumentUndo::done( _desktop->doc() , SP_VERB_DIALOG_LAYERS,
+ newValue? _("Unhide layer") : _("Hide layer"));
}
break;
@@ -479,8 +480,8 @@ void LayersPanel::_toggled( Glib::ustring const& str, int targetCol )
row[_model->_colLocked] = newValue;
item->setLocked( newValue );
item->updateRepr();
- sp_document_done( _desktop->doc() , SP_VERB_DIALOG_LAYERS,
- newValue? _("Lock layer") : _("Unlock layer"));
+ DocumentUndo::done( _desktop->doc() , SP_VERB_DIALOG_LAYERS,
+ newValue? _("Lock layer") : _("Unlock layer"));
}
break;
}
@@ -766,7 +767,7 @@ void LayersPanel::setDesktop( SPDesktop* desktop )
}
}
/*
- GSList const *layers=sp_document_get_resource_list( _desktop->doc(), "layer" );
+ GSList const *layers = _desktop->doc()->getResourceList( "layer" );
g_message( "layers list starts at %p", layers );
for ( GSList const *iter=layers ; iter ; iter = iter->next ) {
SPObject *layer=static_cast<SPObject *>(iter->data);
diff --git a/src/ui/dialog/livepatheffect-editor.cpp b/src/ui/dialog/livepatheffect-editor.cpp
index 706a84733..bf60fe059 100644
--- a/src/ui/dialog/livepatheffect-editor.cpp
+++ b/src/ui/dialog/livepatheffect-editor.cpp
@@ -5,6 +5,7 @@
* Johan Engelen <j.b.c.engelen@utwente.nl>
* Steren Giannini <steren.giannini@gmail.com>
* Bastien Bouclet <bgkweb@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Authors
* Released under GNU GPL. Read the file 'COPYING' for more information.
@@ -376,8 +377,8 @@ LivePathEffectEditor::onApply()
LivePathEffect::Effect::createAndApply(data->key.c_str(), doc, item);
- sp_document_done(doc, SP_VERB_DIALOG_LIVE_PATH_EFFECT,
- _("Create and apply path effect"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_LIVE_PATH_EFFECT,
+ _("Create and apply path effect"));
lpe_list_locked = false;
onSelectionChanged(sel);
@@ -394,8 +395,8 @@ LivePathEffectEditor::onRemove()
if ( item && SP_IS_LPE_ITEM(item) ) {
sp_lpe_item_remove_current_path_effect(SP_LPE_ITEM(item), false);
- sp_document_done ( sp_desktop_document (current_desktop), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
- _("Remove path effect") );
+ DocumentUndo::done( sp_desktop_document(current_desktop), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
+ _("Remove path effect") );
effect_list_reload(SP_LPE_ITEM(item));
}
@@ -410,8 +411,8 @@ void LivePathEffectEditor::onUp()
if ( item && SP_IS_LPE_ITEM(item) ) {
sp_lpe_item_up_current_path_effect(SP_LPE_ITEM(item));
- sp_document_done ( sp_desktop_document (current_desktop), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
- _("Move path effect up") );
+ DocumentUndo::done( sp_desktop_document(current_desktop), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
+ _("Move path effect up") );
effect_list_reload(SP_LPE_ITEM(item));
}
@@ -426,8 +427,8 @@ void LivePathEffectEditor::onDown()
if ( item && SP_IS_LPE_ITEM(item) ) {
sp_lpe_item_down_current_path_effect(SP_LPE_ITEM(item));
- sp_document_done ( sp_desktop_document (current_desktop), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
- _("Move path effect down") );
+ DocumentUndo::done( sp_desktop_document(current_desktop), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
+ _("Move path effect down") );
effect_list_reload(SP_LPE_ITEM(item));
}
@@ -465,8 +466,8 @@ void LivePathEffectEditor::on_visibility_toggled( Glib::ustring const& str )
/* FIXME: this explicit writing to SVG is wrong. The lpe_item should have a method to disable/enable an effect within its stack.
* So one can call: lpe_item->setActive(lpeobjref->lpeobject); */
lpeobjref->lpeobject->get_lpe()->getRepr()->setAttribute("is_visible", newValue ? "true" : "false");
- sp_document_done( sp_desktop_document(current_desktop), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
- newValue ? _("Activate path effect") : _("Deactivate path effect"));
+ DocumentUndo::done( sp_desktop_document(current_desktop), SP_VERB_DIALOG_LIVE_PATH_EFFECT,
+ newValue ? _("Activate path effect") : _("Deactivate path effect"));
}
}
diff --git a/src/ui/dialog/print.cpp b/src/ui/dialog/print.cpp
index 2456e10da..a56cbfd9d 100644
--- a/src/ui/dialog/print.cpp
+++ b/src/ui/dialog/print.cpp
@@ -3,6 +3,7 @@
*/
/* Authors:
* Kees Cook <kees@outflux.net>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Kees Cook
* Released under GNU GPL. Read the file 'COPYING' for more information.
@@ -46,8 +47,8 @@ static void draw_page(
if (junk->_tab->as_bitmap()) {
// Render as exported PNG
- gdouble width = sp_document_width(junk->_doc);
- gdouble height = sp_document_height(junk->_doc);
+ gdouble width = (junk->_doc)->getWidth();
+ gdouble height = (junk->_doc)->getHeight();
gdouble dpi = junk->_tab->bitmap_dpi();
std::string tmp_png;
std::string tmp_base = "inkscape-print-png-XXXXXX";
@@ -181,7 +182,7 @@ Print::Print(SPDocument *doc, SPItem *base) :
_printop = gtk_print_operation_new ();
// set up dialog title, based on document name
- gchar *jobname = _doc->name ? _doc->name : _("SVG Document");
+ gchar const *jobname = _doc->getName() ? _doc->getName() : _("SVG Document");
Glib::ustring title = _("Print");
title += " ";
title += jobname;
@@ -190,8 +191,8 @@ Print::Print(SPDocument *doc, SPItem *base) :
// set up paper size to match the document size
gtk_print_operation_set_unit (_printop, GTK_UNIT_POINTS);
GtkPageSetup *page_setup = gtk_page_setup_new();
- gdouble doc_width = sp_document_width(_doc) * PT_PER_PX;
- gdouble doc_height = sp_document_height(_doc) * PT_PER_PX;
+ gdouble doc_width = _doc->getWidth() * PT_PER_PX;
+ gdouble doc_height = _doc->getHeight() * PT_PER_PX;
GtkPaperSize *paper_size;
if (doc_width > doc_height) {
gtk_page_setup_set_orientation (page_setup, GTK_PAGE_ORIENTATION_LANDSCAPE);
diff --git a/src/ui/dialog/session-player.cpp b/src/ui/dialog/session-player.cpp
index 51b206a85..d8ff8ca56 100644
--- a/src/ui/dialog/session-player.cpp
+++ b/src/ui/dialog/session-player.cpp
@@ -3,6 +3,7 @@
*/
/* Authors:
* David Yip <yipdw@rose-hulman.edu>
+ * Abhishek Sharma
*
* Copyright (c) 2005 Authors
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -171,7 +172,7 @@ SessionPlaybackDialogImpl::_respCallback(int resp)
switch (result) {
case Gtk::RESPONSE_OK:
this->_sm->clearDocument();
- sp_document_done(sp_desktop_document(this->_desktop), SP_VERB_NONE,
+ SPDocumentUndo::done(sp_desktop_document(this->_desktop), SP_VERB_NONE,
/* TODO: annotate */ "session-player.cpp:186");
this->_sm->loadSessionFile(sessionfiledlg.get_filename());
this->_openfile.set_text(this->_sfp->filename());
diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp
index 1f11a412e..042acb6e1 100644
--- a/src/ui/dialog/svg-fonts-dialog.cpp
+++ b/src/ui/dialog/svg-fonts-dialog.cpp
@@ -3,6 +3,8 @@
*/
/* Authors:
* Felipe C. da S. Sanches <juca@members.fsf.org>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008 Authors
* Released under GNU GPLv2 (or later). Read the file 'COPYING' for more information.
@@ -117,8 +119,8 @@ void SvgFontsDialog::AttrEntry::on_attr_changed(){
Glib::ustring undokey = "svgfonts:";
undokey += name;
- sp_document_maybe_done(o->document, undokey.c_str(), SP_VERB_DIALOG_SVG_FONTS,
- _("Set SVG Font attribute"));
+ DocumentUndo::maybeDone(o->document, undokey.c_str(), SP_VERB_DIALOG_SVG_FONTS,
+ _("Set SVG Font attribute"));
}
}
@@ -163,15 +165,17 @@ void SvgFontsDialog::on_kerning_value_changed(){
if (!this->kerning_pair) return;
SPDocument* document = sp_desktop_document(this->getDesktop());
- //TODO: I am unsure whether this is the correct way of calling sp_document_maybe_done
+ //TODO: I am unsure whether this is the correct way of calling SPDocumentUndo::maybe_done
Glib::ustring undokey = "svgfonts:hkern:k:";
undokey += this->kerning_pair->u1->attribute_string();
undokey += ":";
undokey += this->kerning_pair->u2->attribute_string();
//slider values increase from right to left so that they match the kerning pair preview
- this->kerning_pair->repr->setAttribute("k", Glib::Ascii::dtostr(get_selected_spfont()->horiz_adv_x - kerning_slider.get_value()).c_str());
- sp_document_maybe_done(document, undokey.c_str(), SP_VERB_DIALOG_SVG_FONTS, _("Adjust kerning value"));
+
+ //XML Tree being directly used here while it shouldn't be.
+ this->kerning_pair->getRepr()->setAttribute("k", Glib::Ascii::dtostr(get_selected_spfont()->horiz_adv_x - kerning_slider.get_value()).c_str());
+ DocumentUndo::maybeDone(document, undokey.c_str(), SP_VERB_DIALOG_SVG_FONTS, _("Adjust kerning value"));
//populate_kerning_pairs_box();
kerning_preview.redraw();
@@ -243,7 +247,7 @@ void SvgFontsDialog::update_fonts()
{
SPDesktop* desktop = this->getDesktop();
SPDocument* document = sp_desktop_document(desktop);
- const GSList* fonts = sp_document_get_resource_list(document, "font");
+ const GSList* fonts = document->getResourceList("font");
_model->clear();
for(const GSList *l = fonts; l; l = l->next) {
@@ -423,7 +427,7 @@ SvgFontsDialog::populate_kerning_pairs_box()
SPGlyph *new_glyph(SPDocument* document, SPFont *font, const int count)
{
g_return_val_if_fail(font != NULL, NULL);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
// create a new glyph
Inkscape::XML::Node *repr;
@@ -462,7 +466,7 @@ void SvgFontsDialog::add_glyph(){
SPDocument* doc = sp_desktop_document(this->getDesktop());
/* SPGlyph* glyph =*/ new_glyph(doc, get_selected_spfont(), count+1);
- sp_document_done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Add glyph"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Add glyph"));
update_glyphs();
}
@@ -505,8 +509,9 @@ void SvgFontsDialog::set_glyph_description_from_selected_path(){
msgStack->flash(Inkscape::ERROR_MESSAGE, msg);
return;
}
- glyph->repr->setAttribute("d", (char*) sp_svg_write_path (pathv));
- sp_document_done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph curves"));
+ //XML Tree being directly used here while it shouldn't be.
+ glyph->getRepr()->setAttribute("d", (char*) sp_svg_write_path (pathv));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph curves"));
update_glyphs();
}
@@ -547,8 +552,10 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){
SPObject* obj;
for (obj = get_selected_spfont()->children; obj; obj=obj->next){
if (SP_IS_MISSING_GLYPH(obj)){
- obj->repr->setAttribute("d", (char*) sp_svg_write_path (pathv));
- sp_document_done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph curves"));
+
+ //XML Tree being directly used here while it shouldn't be.
+ obj->getRepr()->setAttribute("d", (char*) sp_svg_write_path (pathv));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph curves"));
}
}
@@ -566,8 +573,9 @@ void SvgFontsDialog::reset_missing_glyph_description(){
SPObject* obj;
for (obj = get_selected_spfont()->children; obj; obj=obj->next){
if (SP_IS_MISSING_GLYPH(obj)){
- obj->repr->setAttribute("d", (char*) "M0,0h1000v1024h-1000z");
- sp_document_done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Reset missing-glyph"));
+ //XML Tree being directly used here while it shouldn't be.
+ obj->getRepr()->setAttribute("d", (char*) "M0,0h1000v1024h-1000z");
+ DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Reset missing-glyph"));
}
}
@@ -579,10 +587,11 @@ void SvgFontsDialog::glyph_name_edit(const Glib::ustring&, const Glib::ustring&
if (!i) return;
SPGlyph* glyph = (*i)[_GlyphsListColumns.glyph_node];
- glyph->repr->setAttribute("glyph-name", str.c_str());
+ //XML Tree being directly used here while it shouldn't be.
+ glyph->getRepr()->setAttribute("glyph-name", str.c_str());
SPDocument* doc = sp_desktop_document(this->getDesktop());
- sp_document_done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Edit glyph name"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Edit glyph name"));
update_glyphs();
}
@@ -592,10 +601,11 @@ void SvgFontsDialog::glyph_unicode_edit(const Glib::ustring&, const Glib::ustrin
if (!i) return;
SPGlyph* glyph = (*i)[_GlyphsListColumns.glyph_node];
- glyph->repr->setAttribute("unicode", str.c_str());
+ //XML Tree being directly used here while it shouldn't be.
+ glyph->getRepr()->setAttribute("unicode", str.c_str());
SPDocument* doc = sp_desktop_document(this->getDesktop());
- sp_document_done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph unicode"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph unicode"));
update_glyphs();
}
@@ -604,9 +614,10 @@ void SvgFontsDialog::remove_selected_font(){
SPFont* font = get_selected_spfont();
if (!font) return;
- sp_repr_unparent(font->repr);
+ //XML Tree being directly used here while it shouldn't be.
+ sp_repr_unparent(font->getRepr());
SPDocument* doc = sp_desktop_document(this->getDesktop());
- sp_document_done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Remove font"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Remove font"));
update_fonts();
}
@@ -618,10 +629,12 @@ void SvgFontsDialog::remove_selected_glyph(){
if(!i) return;
SPGlyph* glyph = (*i)[_GlyphsListColumns.glyph_node];
- sp_repr_unparent(glyph->repr);
+
+ //XML Tree being directly used here while it shouldn't be.
+ sp_repr_unparent(glyph->getRepr());
SPDocument* doc = sp_desktop_document(this->getDesktop());
- sp_document_done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Remove glyph"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Remove glyph"));
update_glyphs();
}
@@ -633,10 +646,12 @@ void SvgFontsDialog::remove_selected_kerning_pair(){
if(!i) return;
SPGlyphKerning* pair = (*i)[_KerningPairsListColumns.spnode];
- sp_repr_unparent(pair->repr);
+
+ //XML Tree being directly used here while it shouldn't be.
+ sp_repr_unparent(pair->getRepr());
SPDocument* doc = sp_desktop_document(this->getDesktop());
- sp_document_done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Remove kerning pair"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Remove kerning pair"));
update_glyphs();
}
@@ -707,11 +722,10 @@ void SvgFontsDialog::add_kerning_pair(){
if (this->kerning_pair) return; //We already have this kerning pair
SPDocument* document = sp_desktop_document(this->getDesktop());
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
// create a new hkern node
- Inkscape::XML::Node *repr;
- repr = xml_doc->createElement("svg:hkern");
+ Inkscape::XML::Node *repr = xml_doc->createElement("svg:hkern");
repr->setAttribute("u1", first_glyph.get_active_text().c_str());
repr->setAttribute("u2", second_glyph.get_active_text().c_str());
@@ -724,7 +738,7 @@ void SvgFontsDialog::add_kerning_pair(){
// get corresponding object
this->kerning_pair = SP_HKERN( document->getObjectByRepr(repr) );
- sp_document_done(document, SP_VERB_DIALOG_SVG_FONTS, _("Add kerning pair"));
+ DocumentUndo::done(document, SP_VERB_DIALOG_SVG_FONTS, _("Add kerning pair"));
}
Gtk::VBox* SvgFontsDialog::kerning_tab(){
@@ -774,11 +788,10 @@ SPFont *new_font(SPDocument *document)
SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document);
+ Inkscape::XML::Document *xml_doc = document->getReprDoc();
// create a new font
- Inkscape::XML::Node *repr;
- repr = xml_doc->createElement("svg:font");
+ Inkscape::XML::Node *repr = xml_doc->createElement("svg:font");
//By default, set the horizontal advance to 1024 units
repr->setAttribute("horiz-adv-x", "1024");
@@ -813,11 +826,12 @@ void set_font_family(SPFont* font, char* str){
SPObject* obj;
for (obj=font->children; obj; obj=obj->next){
if (SP_IS_FONTFACE(obj)){
- obj->repr->setAttribute("font-family", str);
+ //XML Tree being directly used here while it shouldn't be.
+ obj->getRepr()->setAttribute("font-family", str);
}
}
- sp_document_done(font->document, SP_VERB_DIALOG_SVG_FONTS, _("Set font family"));
+ DocumentUndo::done(font->document, SP_VERB_DIALOG_SVG_FONTS, _("Set font family"));
}
void SvgFontsDialog::add_font(){
@@ -833,14 +847,15 @@ void SvgFontsDialog::add_font(){
SPObject* obj;
for (obj=font->children; obj; obj=obj->next){
if (SP_IS_FONTFACE(obj)){
- obj->repr->setAttribute("font-family", os2.str().c_str());
+ //XML Tree being directly used here while it shouldn't be.
+ obj->getRepr()->setAttribute("font-family", os2.str().c_str());
}
}
update_fonts();
// select_font(font);
- sp_document_done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Add font"));
+ DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Add font"));
}
SvgFontsDialog::SvgFontsDialog()
diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp
index f6cd5b775..0fa791366 100644
--- a/src/ui/dialog/swatches.cpp
+++ b/src/ui/dialog/swatches.cpp
@@ -5,6 +5,7 @@
/* Authors:
* Jon A. Cruz
* John Bintz
+ * Abhishek Sharma
*
* Copyright (C) 2005 Jon A. Cruz
* Copyright (C) 2008 John Bintz
@@ -155,7 +156,7 @@ static void editGradient( GtkMenuItem */*menuitem*/, gpointer /*user_data*/ )
SPDocument *doc = desktop ? desktop->doc() : 0;
if (doc) {
std::string targetName(bounceTarget->def.descr);
- const GSList *gradients = sp_document_get_resource_list(doc, "gradient");
+ const GSList *gradients = doc->getResourceList("gradient");
for (const GSList *item = gradients; item; item = item->next) {
SPGradient* grad = SP_GRADIENT(item->data);
if ( targetName == grad->getId() ) {
@@ -177,13 +178,13 @@ void SwatchesPanelHook::convertGradient( GtkMenuItem * /*menuitem*/, gpointer us
if ( doc && (index >= 0) && (static_cast<guint>(index) < popupItems.size()) ) {
Glib::ustring targetName = popupItems[index];
- const GSList *gradients = sp_document_get_resource_list(doc, "gradient");
+ const GSList *gradients = doc->getResourceList("gradient");
for (const GSList *item = gradients; item; item = item->next) {
SPGradient* grad = SP_GRADIENT(item->data);
if ( targetName == grad->getId() ) {
grad->setSwatch();
- sp_document_done(doc, SP_VERB_CONTEXT_GRADIENT,
- _("Add gradient stop"));
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_GRADIENT,
+ _("Add gradient stop"));
break;
}
}
@@ -199,13 +200,13 @@ void SwatchesPanelHook::deleteGradient( GtkMenuItem */*menuitem*/, gpointer /*us
SPDocument *doc = desktop ? desktop->doc() : 0;
if (doc) {
std::string targetName(bounceTarget->def.descr);
- const GSList *gradients = sp_document_get_resource_list(doc, "gradient");
+ const GSList *gradients = doc->getResourceList("gradient");
for (const GSList *item = gradients; item; item = item->next) {
SPGradient* grad = SP_GRADIENT(item->data);
if ( targetName == grad->getId() ) {
grad->setSwatch(false);
- sp_document_done(doc, SP_VERB_CONTEXT_GRADIENT,
- _("Delete"));
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_GRADIENT,
+ _("Delete"));
break;
}
}
@@ -320,7 +321,7 @@ gboolean colorItemHandleButtonPress( GtkWidget* widget, GdkEventButton* event, g
SPDesktopWidget *dtw = SP_DESKTOP_WIDGET(wdgt);
if ( dtw && dtw->desktop ) {
// Pick up all gradients with vectors
- const GSList *gradients = sp_document_get_resource_list(dtw->desktop->doc(), "gradient");
+ const GSList *gradients = (dtw->desktop->doc())->getResourceList("gradient");
gint index = 0;
for (const GSList *curr = gradients; curr; curr = curr->next) {
SPGradient* grad = SP_GRADIENT(curr->data);
@@ -773,7 +774,7 @@ void SwatchesPanel::_trackDocument( SwatchesPanel *panel, SPDocument *document )
}
docPerPanel[panel] = document;
if (!found) {
- sigc::connection conn1 = sp_document_resources_changed_connect( document, "gradient", sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleGradientsChange), document) );
+ sigc::connection conn1 = document->connectResourcesChanged( "gradient", sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleGradientsChange), document) );
sigc::connection conn2 = SP_DOCUMENT_DEFS(document)->connectRelease( sigc::hide(sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleDefsModified), document)) );
sigc::connection conn3 = SP_DOCUMENT_DEFS(document)->connectModified( sigc::hide(sigc::hide(sigc::bind(sigc::ptr_fun(&SwatchesPanel::handleDefsModified), document))) );
@@ -811,7 +812,7 @@ static void recalcSwatchContents(SPDocument* doc,
{
std::vector<SPGradient*> newList;
- const GSList *gradients = sp_document_get_resource_list(doc, "gradient");
+ const GSList *gradients = doc->getResourceList("gradient");
for (const GSList *item = gradients; item; item = item->next) {
SPGradient* grad = SP_GRADIENT(item->data);
if ( grad->isSwatch() ) {
@@ -973,7 +974,8 @@ void SwatchesPanel::_updateFromSelection()
}
}
if ( target ) {
- gchar const* id = target->repr->attribute("id");
+ //XML Tree being used directly here while it shouldn't be
+ gchar const* id = target->getRepr()->attribute("id");
if ( id ) {
fillId = id;
}
@@ -1004,7 +1006,8 @@ void SwatchesPanel::_updateFromSelection()
}
}
if ( target ) {
- gchar const* id = target->repr->attribute("id");
+ //XML Tree being used directly here while it shouldn't be
+ gchar const* id = target->getRepr()->attribute("id");
if ( id ) {
strokeId = id;
}
diff --git a/src/ui/dialog/tile.cpp b/src/ui/dialog/tile.cpp
index b50610938..fccf5c105 100644
--- a/src/ui/dialog/tile.cpp
+++ b/src/ui/dialog/tile.cpp
@@ -5,6 +5,7 @@
* Bob Jamison ( based off trace dialog)
* John Cliff
* Other dudes from The Inkscape Organization
+ * Abhishek Sharma
*
* Copyright (C) 2004 Bob Jamison
* Copyright (C) 2004 John Cliff
@@ -46,8 +47,8 @@ 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));
+ Geom::OptRect a = first->getBounds(first->i2doc_affine());
+ Geom::OptRect b = second->getBounds(second->i2doc_affine());
if ( !a || !b ) {
// FIXME?
@@ -86,8 +87,8 @@ sp_compare_x_position(SPItem *first, SPItem *second)
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));
+ Geom::OptRect a = first->getBounds(first->i2doc_affine());
+ Geom::OptRect b = second->getBounds(second->i2doc_affine());
if ( !a || !b ) {
// FIXME?
@@ -159,14 +160,14 @@ void TileDialog::Grid_Arrange ()
grid_top = 99999;
SPDesktop *desktop = getDesktop();
- sp_document_ensure_up_to_date(sp_desktop_document(desktop));
+ sp_desktop_document(desktop)->ensureUpToDate();
Inkscape::Selection *selection = sp_desktop_selection (desktop);
const GSList *items = selection ? selection->itemList() : 0;
cnt=0;
for (; items != NULL; items = items->next) {
SPItem *item = SP_ITEM(items->data);
- Geom::OptRect b = item->getBounds(sp_item_i2doc_affine(item));
+ Geom::OptRect b = item->getBounds(item->i2doc_affine());
if (!b) {
continue;
}
@@ -209,7 +210,7 @@ void TileDialog::Grid_Arrange ()
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));
+ Geom::OptRect b = item->getBounds(item->i2doc_affine());
if (b) {
width = b->dimensions()[Geom::X];
height = b->dimensions()[Geom::Y];
@@ -316,7 +317,7 @@ g_print("\n row = %f col = %f selection x= %f selection y = %f", total_row_h
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::OptRect b = item->getBounds(item->i2doc_affine());
Geom::Point min;
if (b) {
width = b->dimensions()[Geom::X];
@@ -336,16 +337,16 @@ g_print("\n row = %f col = %f selection x= %f selection y = %f", total_row_h
// 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);
+ item->set_i2d_affine(item->i2d_affine() * affine);
+ item->doWriteTransform(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"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_GRIDTILE,
+ _("Arrange in a grid"));
}
diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp
index bb7ea1a69..1bca2ffff 100644
--- a/src/ui/dialog/transformation.cpp
+++ b/src/ui/dialog/transformation.cpp
@@ -4,6 +4,7 @@
/* Authors:
* Bryce W. Harrington <bryce@bryceharrington.org>
* buliabyak@gmail.com
+ * Abhishek Sharma
*
* Copyright (C) 2004, 2005 Authors
* Released under GNU GPL. Read the file 'COPYING' for more information.
@@ -635,7 +636,7 @@ Transformation::applyPageMove(Inkscape::Selection *selection)
it != selected.end();
++it)
{
- Geom::OptRect bbox = sp_item_bbox_desktop(*it);
+ Geom::OptRect bbox = (*it)->getBboxDesktop();
if (bbox) {
sorted.push_back(BBoxSort(*it, *bbox, Geom::X, x > 0? 1. : 0., x > 0? 0. : 1.));
}
@@ -659,7 +660,7 @@ Transformation::applyPageMove(Inkscape::Selection *selection)
it != selected.end();
++it)
{
- Geom::OptRect bbox = sp_item_bbox_desktop(*it);
+ Geom::OptRect bbox = (*it)->getBboxDesktop();
if (bbox) {
sorted.push_back(BBoxSort(*it, *bbox, Geom::Y, y > 0? 1. : 0., y > 0? 0. : 1.));
}
@@ -686,8 +687,8 @@ Transformation::applyPageMove(Inkscape::Selection *selection)
}
}
- sp_document_done ( sp_desktop_document (selection->desktop()) , SP_VERB_DIALOG_TRANSFORM,
- _("Move"));
+ DocumentUndo::done( sp_desktop_document(selection->desktop()) , SP_VERB_DIALOG_TRANSFORM,
+ _("Move"));
}
void
@@ -703,7 +704,7 @@ Transformation::applyPageScale(Inkscape::Selection *selection)
Geom::Scale scale (0,0);
// the values are increments!
if (_units_scale.isAbsolute()) {
- Geom::OptRect bbox(sp_item_bbox_desktop(item));
+ Geom::OptRect bbox(item->getBboxDesktop());
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
@@ -743,8 +744,8 @@ Transformation::applyPageScale(Inkscape::Selection *selection)
}
}
- sp_document_done(sp_desktop_document(selection->desktop()), SP_VERB_DIALOG_TRANSFORM,
- _("Scale"));
+ DocumentUndo::done(sp_desktop_document(selection->desktop()), SP_VERB_DIALOG_TRANSFORM,
+ _("Scale"));
}
void
@@ -765,8 +766,8 @@ Transformation::applyPageRotate(Inkscape::Selection *selection)
}
}
- sp_document_done(sp_desktop_document(selection->desktop()), SP_VERB_DIALOG_TRANSFORM,
- _("Rotate"));
+ DocumentUndo::done(sp_desktop_document(selection->desktop()), SP_VERB_DIALOG_TRANSFORM,
+ _("Rotate"));
}
void
@@ -790,7 +791,7 @@ Transformation::applyPageSkew(Inkscape::Selection *selection)
} else { // absolute displacement
double skewX = _scalar_skew_horizontal.getValue("px");
double skewY = _scalar_skew_vertical.getValue("px");
- Geom::OptRect bbox(sp_item_bbox_desktop(item));
+ Geom::OptRect bbox(item->getBboxDesktop());
if (bbox) {
double width = bbox->dimensions()[Geom::X];
double height = bbox->dimensions()[Geom::Y];
@@ -824,8 +825,8 @@ Transformation::applyPageSkew(Inkscape::Selection *selection)
}
}
- sp_document_done(sp_desktop_document(selection->desktop()), SP_VERB_DIALOG_TRANSFORM,
- _("Skew"));
+ DocumentUndo::done(sp_desktop_document(selection->desktop()), SP_VERB_DIALOG_TRANSFORM,
+ _("Skew"));
}
@@ -844,15 +845,15 @@ Transformation::applyPageTransform(Inkscape::Selection *selection)
if (_check_replace_matrix.get_active()) {
for (GSList const *l = selection->itemList(); l != NULL; l = l->next) {
SPItem *item = SP_ITEM(l->data);
- sp_item_set_item_transform(item, displayed);
+ item->set_item_transform(displayed);
SP_OBJECT(item)->updateRepr();
}
} else {
sp_selection_apply_affine(selection, displayed); // post-multiply each object's transform
}
- sp_document_done(sp_desktop_document(selection->desktop()), SP_VERB_DIALOG_TRANSFORM,
- _("Edit transformation matrix"));
+ DocumentUndo::done(sp_desktop_document(selection->desktop()), SP_VERB_DIALOG_TRANSFORM,
+ _("Edit transformation matrix"));
}
diff --git a/src/ui/dialog/undo-history.cpp b/src/ui/dialog/undo-history.cpp
index 111dc014d..17d032758 100644
--- a/src/ui/dialog/undo-history.cpp
+++ b/src/ui/dialog/undo-history.cpp
@@ -3,6 +3,7 @@
*/
/* Author:
* Gustav Broberg <broberg@kth.se>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Authors
* Released under GNU GPL. Read the file 'COPYING' for more information.
@@ -214,7 +215,7 @@ UndoHistory::_onListSelectionChange()
_event_log->blockNotifications();
for ( --last ; curr_event != last ; ++curr_event ) {
- sp_document_redo(_document);
+ DocumentUndo::redo(_document);
}
_event_log->blockNotifications(false);
@@ -248,7 +249,7 @@ UndoHistory::_onListSelectionChange()
while ( selected != last_selected ) {
- sp_document_undo(_document);
+ DocumentUndo::undo(_document);
if ( last_selected->parent() &&
last_selected == last_selected->parent()->children().begin() )
@@ -273,7 +274,7 @@ UndoHistory::_onListSelectionChange()
while ( selected != last_selected ) {
- sp_document_redo(_document);
+ DocumentUndo::redo(_document);
if ( !last_selected->children().empty() ) {
_event_log->setCurrEventParent(last_selected);
@@ -317,10 +318,10 @@ UndoHistory::_onCollapseEvent(const Gtk::TreeModel::iterator &iter, const Gtk::T
EventLog::const_iterator last = curr_event_parent->children().end();
_event_log->blockNotifications();
- sp_document_redo(_document);
+ DocumentUndo::redo(_document);
for ( --last ; curr_event != last ; ++curr_event ) {
- sp_document_redo(_document);
+ DocumentUndo::redo(_document);
}
_event_log->blockNotifications(false);
diff --git a/src/ui/tool/multi-path-manipulator.cpp b/src/ui/tool/multi-path-manipulator.cpp
index 82446b7b4..ef1c764bb 100644
--- a/src/ui/tool/multi-path-manipulator.cpp
+++ b/src/ui/tool/multi-path-manipulator.cpp
@@ -3,6 +3,7 @@
*/
/* Authors:
* Krzysztof Kosiński <tweenk.pl@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2009 Authors
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -706,9 +707,9 @@ void MultiPathManipulator::_commit(CommitEvent cps)
_selection.signal_update.emit();
invokeForAll(&PathManipulator::writeXML);
if (key) {
- sp_document_maybe_done(sp_desktop_document(_desktop), key, SP_VERB_CONTEXT_NODE, reason);
+ DocumentUndo::maybeDone(sp_desktop_document(_desktop), key, SP_VERB_CONTEXT_NODE, reason);
} else {
- sp_document_done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_NODE, reason);
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_NODE, reason);
}
signal_coords_changed.emit();
}
@@ -717,7 +718,7 @@ void MultiPathManipulator::_commit(CommitEvent cps)
void MultiPathManipulator::_done(gchar const *reason) {
invokeForAll(&PathManipulator::update);
invokeForAll(&PathManipulator::writeXML);
- sp_document_done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_NODE, reason);
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_NODE, reason);
signal_coords_changed.emit();
}
diff --git a/src/ui/tool/node-tool.cpp b/src/ui/tool/node-tool.cpp
index 8008d79eb..8661e7946 100644
--- a/src/ui/tool/node-tool.cpp
+++ b/src/ui/tool/node-tool.cpp
@@ -3,6 +3,7 @@
*/
/* Authors:
* Krzysztof Kosiński <tweenk@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2009 Authors
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -72,7 +73,17 @@
* is to eventually use a common class for object and control point transforms.
* - SelectableControlPoint: base for any type of selectable point. It can belong to only one
* selection.
- *
+ *
+ * @par Functionality that resides in weird places
+ * @par
+ *
+ * This list is probably incomplete.
+ * - Curve dragging: CurveDragPoint, controlled by PathManipulator
+ * - Single handle shortcuts: MultiPathManipulator::event(), ModifierTracker
+ * - Linear and spatial grow: Node, spatial grow routed to ControlPointSelection
+ * - Committing handle actions performed with the mouse: PathManipulator
+ * - Sculpting: ControlPointSelection
+ *
* @par Plans for the future
* @par
* - MultiPathManipulator should become a generic shape editor that manages all active manipulator,
@@ -355,7 +366,8 @@ void gather_items(InkNodeTool *nt, SPItem *base, SPObject *obj, Inkscape::UI::Sh
using namespace Inkscape::UI;
if (!obj) return;
- if (SP_IS_PATH(obj) && obj->repr->attribute("inkscape:original-d") != NULL) {
+ //XML Tree being used directly here while it shouldn't be.
+ if (SP_IS_PATH(obj) && obj->getRepr()->attribute("inkscape:original-d") != NULL) {
ShapeRecord r;
r.item = static_cast<SPItem*>(obj);
r.edit_transform = Geom::identity(); // TODO wrong?
@@ -370,7 +382,7 @@ void gather_items(InkNodeTool *nt, SPItem *base, SPObject *obj, Inkscape::UI::Sh
ShapeRecord r;
r.item = item;
// TODO add support for objectBoundingBox
- r.edit_transform = base ? sp_item_i2doc_affine(base) : Geom::identity();
+ r.edit_transform = base ? base->i2doc_affine() : Geom::identity();
r.role = role;
if (s.insert(r).second) {
// this item was encountered the first time
@@ -471,7 +483,7 @@ gint ink_node_tool_root_handler(SPEventContext *event_context, GdkEvent *event)
nt->flashed_item = over_item;
SPCurve *c = sp_path_get_curve_for_edit(SP_PATH(over_item));
- c->transform(sp_item_i2d_affine(over_item));
+ c->transform(over_item->i2d_affine());
SPCanvasItem *flash = sp_canvas_bpath_new(sp_desktop_tempgroup(desktop), c);
sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(flash),
prefs->getInt("/tools/nodes/highlight_color", 0xff0000ff), 1.0,
@@ -550,19 +562,24 @@ void ink_node_tool_update_tip(InkNodeTool *nt, GdkEvent *event)
unsigned sz = nt->_selected_nodes->size();
unsigned total = nt->_selected_nodes->allPoints().size();
if (sz != 0) {
+ char *nodestring = g_strdup_printf(
+ ngettext("<b>%u of %u</b> node selected.", "<b>%u of %u</b> nodes selected.", total),
+ sz, total);
if (nt->_last_over) {
+ // TRANSLATORS: The %s below is where the "%u of %u nodes selected" sentence gets put
char *dyntip = g_strdup_printf(C_("Node tool tip",
- "<b>%u of %u nodes</b> selected. "
- "Drag to select nodes, click to edit only this object (more: Shift)"), sz, total);
+ "%s Drag to select nodes, click to edit only this object (more: Shift)"),
+ nodestring);
nt->_node_message_context->set(Inkscape::NORMAL_MESSAGE, dyntip);
g_free(dyntip);
} else {
char *dyntip = g_strdup_printf(C_("Node tool tip",
- "<b>%u of %u nodes</b> selected. "
- "Drag to select nodes, click clear the selection"), sz, total);
+ "%s Drag to select nodes, click clear the selection"),
+ nodestring);
nt->_node_message_context->set(Inkscape::NORMAL_MESSAGE, dyntip);
g_free(dyntip);
}
+ g_free(nodestring);
} else if (!nt->_multipath->empty()) {
if (nt->_last_over) {
nt->_node_message_context->set(Inkscape::NORMAL_MESSAGE, C_("Node tool tip",
@@ -597,8 +614,7 @@ void ink_node_tool_select_area(InkNodeTool *nt, Geom::Rect const &sel, GdkEventB
if (nt->_multipath->empty()) {
// if multipath is empty, select rubberbanded items rather than nodes
Inkscape::Selection *selection = nt->desktop->selection;
- GSList *items = sp_document_items_in_box(
- sp_desktop_document(nt->desktop), nt->desktop->dkey, sel);
+ GSList *items = sp_desktop_document(nt->desktop)->getItemsInBox(nt->desktop->dkey, sel);
selection->setList(items);
g_slist_free(items);
} else {
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp
index 956f48a7d..5ae9c4137 100644
--- a/src/ui/tool/path-manipulator.cpp
+++ b/src/ui/tool/path-manipulator.cpp
@@ -3,6 +3,7 @@
*/
/* Authors:
* Krzysztof Kosiński <tweenk.pl@gmail.com>
+ * Abhishek Sharma
*
* Copyright (C) 2009 Authors
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -108,7 +109,7 @@ PathManipulator::PathManipulator(MultiPathManipulator &mpm, SPPath *path,
, _path(path)
, _spcurve(new SPCurve())
, _dragpoint(new CurveDragPoint(*this))
- , _observer(new PathManipulatorObserver(this, SP_OBJECT(path)->repr))
+ , /* XML Tree being used here directly while it shouldn't be*/_observer(new PathManipulatorObserver(this, SP_OBJECT(path)->getRepr()))
, _edit_transform(et)
, _num_selected(0)
, _show_handles(true)
@@ -119,7 +120,7 @@ PathManipulator::PathManipulator(MultiPathManipulator &mpm, SPPath *path,
, _lpe_key(lpe_key)
{
if (_lpe_key.empty()) {
- _i2d_transform = sp_item_i2d_affine(SP_ITEM(path));
+ _i2d_transform = SP_ITEM(path)->i2d_affine();
} else {
_i2d_transform = Geom::identity();
}
@@ -992,6 +993,8 @@ NodeList::iterator PathManipulator::extremeNode(NodeList::iterator origin, bool
/** Called by the XML observer when something else than us modifies the path. */
void PathManipulator::_externalChange(unsigned type)
{
+ hideDragPoint();
+
switch (type) {
case PATH_CHANGE_D: {
_getGeometry();
@@ -1021,7 +1024,7 @@ void PathManipulator::_externalChange(unsigned type)
} break;
case PATH_CHANGE_TRANSFORM: {
Geom::Matrix i2d_change = _d2i_transform;
- _i2d_transform = sp_item_i2d_affine(SP_ITEM(_path));
+ _i2d_transform = SP_ITEM(_path)->i2d_affine();
_d2i_transform = _i2d_transform.inverse();
i2d_change *= _i2d_transform;
for (SubpathList::iterator i = _subpaths.begin(); i != _subpaths.end(); ++i) {
@@ -1102,7 +1105,9 @@ void PathManipulator::_createControlPointsFromGeometry()
// so that pickBestType works correctly
// TODO maybe migrate to inkscape:node-types?
// TODO move this into SPPath - do not manipulate directly
- gchar const *nts_raw = _path ? _path->repr->attribute(_nodetypesKey().data()) : 0;
+
+ //XML Tree being used here directly while it shouldn't be.
+ gchar const *nts_raw = _path ? _path->getRepr()->attribute(_nodetypesKey().data()) : 0;
std::string nodetype_string = nts_raw ? nts_raw : "";
/* Calculate the needed length of the nodetype string.
* For closed paths, the entry is duplicated for the starting node,
@@ -1277,10 +1282,11 @@ void PathManipulator::_setGeometry()
LIVEPATHEFFECT(_path)->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
} else {
- if (_path->repr->attribute("inkscape:original-d"))
+ //XML Tree being used here directly while it shouldn't be.
+ if (_path->getRepr()->attribute("inkscape:original-d"))
sp_path_set_original_curve(_path, _spcurve, false, false);
else
- sp_shape_set_curve(SP_SHAPE(_path), _spcurve, false);
+ SP_SHAPE(_path)->setCurve(_spcurve, false);
}
}
@@ -1295,8 +1301,10 @@ Glib::ustring PathManipulator::_nodetypesKey()
* This method is wrong but necessary at the moment. */
Inkscape::XML::Node *PathManipulator::_getXMLNode()
{
- if (_lpe_key.empty()) return _path->repr;
- return LIVEPATHEFFECT(_path)->repr;
+ //XML Tree being used here directly while it shouldn't be.
+ if (_lpe_key.empty()) return _path->getRepr();
+ //XML Tree being used here directly while it shouldn't be.
+ return LIVEPATHEFFECT(_path)->getRepr();
}
bool PathManipulator::_nodeClicked(Node *n, GdkEventButton *event)
@@ -1414,14 +1422,14 @@ void PathManipulator::_removeNodesFromSelection()
void PathManipulator::_commit(Glib::ustring const &annotation)
{
writeXML();
- sp_document_done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_NODE, annotation.data());
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_CONTEXT_NODE, annotation.data());
}
void PathManipulator::_commit(Glib::ustring const &annotation, gchar const *key)
{
writeXML();
- sp_document_maybe_done(sp_desktop_document(_desktop), key, SP_VERB_CONTEXT_NODE,
- annotation.data());
+ DocumentUndo::maybeDone(sp_desktop_document(_desktop), key, SP_VERB_CONTEXT_NODE,
+ annotation.data());
}
/** Update the position of the curve drag point such that it is over the nearest
diff --git a/src/ui/view/view.cpp b/src/ui/view/view.cpp
index 1b498a846..f05e024d1 100644
--- a/src/ui/view/view.cpp
+++ b/src/ui/view/view.cpp
@@ -1,11 +1,10 @@
-#define __SP_VIEW_C__
-
/** \file
* View implementation
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
* Ralf Stephan <ralf@ark.in-berlin.de>
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
@@ -156,7 +155,7 @@ void View::setDocument(SPDocument *doc) {
_doc->connectURISet(sigc::bind(sigc::ptr_fun(&_onDocumentURISet), this));
_document_resized_connection =
_doc->connectResized(sigc::bind(sigc::ptr_fun(&_onDocumentResized), this));
- _document_uri_set_signal.emit (SP_DOCUMENT_URI(_doc));
+ _document_uri_set_signal.emit( _doc->getURI() );
}
}}}
diff --git a/src/ui/widget/color-picker.cpp b/src/ui/widget/color-picker.cpp
index b7a67b744..650ed10f6 100644
--- a/src/ui/widget/color-picker.cpp
+++ b/src/ui/widget/color-picker.cpp
@@ -1,5 +1,3 @@
-#define __COLOR_PICKER_C__
-
/** \file
* \brief Color picker button & window
*
@@ -7,6 +5,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Ralf Stephan <ralf@ark.in-berlin.de>
+ * Abhishek Sharma
*
* Copyright (C) Authors 2000-2005
*
@@ -132,8 +131,8 @@ sp_color_picker_color_mod(SPColorSelector *csel, GObject *cp)
(ptr->_preview).setRgba32 (rgba);
if (ptr->_undo && SP_ACTIVE_DESKTOP)
- sp_document_done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_NONE,
- /* TODO: annotate */ "color-picker.cpp:130");
+ DocumentUndo::done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_NONE,
+ /* TODO: annotate */ "color-picker.cpp:130");
ptr->on_changed (rgba);
_in_use = false;
diff --git a/src/ui/widget/dock-item.cpp b/src/ui/widget/dock-item.cpp
index 026eac8e0..72a20c385 100644
--- a/src/ui/widget/dock-item.cpp
+++ b/src/ui/widget/dock-item.cpp
@@ -42,15 +42,27 @@ DockItem::DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& l
GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER);
if (!icon_name.empty()) {
- int width = 0, height = 0;
- Gtk::IconSize::lookup(Gtk::ICON_SIZE_MENU, width, height);
- _icon_pixbuf = Gtk::IconTheme::get_default()->load_icon(icon_name, width, (Gtk::IconLookupFlags) 0);
- _gdl_dock_item =
- gdl_dock_item_new_with_pixbuf_icon(name.c_str(), long_name.c_str(),
- _icon_pixbuf->gobj(), gdl_dock_behavior);
+ Glib::RefPtr<Gtk::IconTheme> iconTheme = Gtk::IconTheme::get_default();
+ // Icon might be in the icon theme, or might be a stock item. Check the proper source:
+ if ( iconTheme->has_icon(icon_name) ) {
+ int width = 0;
+ int height = 0;
+ Gtk::IconSize::lookup(Gtk::ICON_SIZE_MENU, width, height);
+ _icon_pixbuf = iconTheme->load_icon(icon_name, width);
+ } else {
+ Gtk::StockItem item;
+ Gtk::StockID stockId(icon_name);
+ if ( Gtk::StockItem::lookup(stockId, item) ) {
+ _icon_pixbuf = _dock.getWidget().render_icon( stockId, Gtk::ICON_SIZE_MENU );
+ }
+ }
+ }
+
+ if ( _icon_pixbuf ) {
+ _gdl_dock_item = gdl_dock_item_new_with_pixbuf_icon( name.c_str(), long_name.c_str(),
+ _icon_pixbuf->gobj(), gdl_dock_behavior );
} else {
- _gdl_dock_item =
- gdl_dock_item_new(name.c_str(), long_name.c_str(), gdl_dock_behavior);
+ _gdl_dock_item = gdl_dock_item_new(name.c_str(), long_name.c_str(), gdl_dock_behavior);
}
_frame.set_shadow_type(Gtk::SHADOW_IN);
diff --git a/src/ui/widget/entity-entry.cpp b/src/ui/widget/entity-entry.cpp
index 968e35b6c..e191a9360 100644
--- a/src/ui/widget/entity-entry.cpp
+++ b/src/ui/widget/entity-entry.cpp
@@ -6,6 +6,8 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Jon Phillips <jon@rejon.org>
* Ralf Stephan <ralf@ark.in-berlin.de> (Gtkmm)
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2000 - 2005 Authors
*
@@ -20,6 +22,7 @@
#include <gtkmm/entry.h>
#include "inkscape.h"
+#include "sp-object.h"
#include "rdf.h"
#include "ui/widget/registry.h"
@@ -80,10 +83,14 @@ EntityLineEntry::~EntityLineEntry()
delete static_cast<Gtk::Entry*>(_packable);
}
-void
-EntityLineEntry::update (SPDocument *doc)
+void EntityLineEntry::update(SPDocument *doc)
{
const char *text = rdf_get_work_entity (doc, _entity);
+ // If RDF title is not set, get the document's <title> and set the RDF:
+ if ( !text && !strcmp(_entity->name, "title") && doc->root ) {
+ text = doc->root->title();
+ rdf_set_work_entity(doc, _entity, text);
+ }
static_cast<Gtk::Entry*>(_packable)->set_text (text ? text : "");
}
@@ -95,9 +102,10 @@ EntityLineEntry::on_changed()
_wr->setUpdating (true);
SPDocument *doc = SP_ACTIVE_DOCUMENT;
Glib::ustring text = static_cast<Gtk::Entry*>(_packable)->get_text();
- if (rdf_set_work_entity (doc, _entity, text.c_str()))
- sp_document_done (doc, SP_VERB_NONE,
- /* TODO: annotate */ "entity-entry.cpp:101");
+ if (rdf_set_work_entity (doc, _entity, text.c_str())) {
+ DocumentUndo::done(doc, SP_VERB_NONE,
+ /* TODO: annotate */ "entity-entry.cpp:101");
+ }
_wr->setUpdating (false);
}
@@ -121,10 +129,14 @@ EntityMultiLineEntry::~EntityMultiLineEntry()
delete static_cast<Gtk::ScrolledWindow*>(_packable);
}
-void
-EntityMultiLineEntry::update (SPDocument *doc)
+void EntityMultiLineEntry::update(SPDocument *doc)
{
const char *text = rdf_get_work_entity (doc, _entity);
+ // If RDF title is not set, get the document's <title> and set the RDF:
+ if ( !text && !strcmp(_entity->name, "title") && doc->root ) {
+ text = doc->root->title();
+ rdf_set_work_entity(doc, _entity, text);
+ }
Gtk::ScrolledWindow *s = static_cast<Gtk::ScrolledWindow*>(_packable);
Gtk::TextView *tv = static_cast<Gtk::TextView*>(s->get_child());
tv->get_buffer()->set_text (text ? text : "");
@@ -140,9 +152,10 @@ EntityMultiLineEntry::on_changed()
Gtk::ScrolledWindow *s = static_cast<Gtk::ScrolledWindow*>(_packable);
Gtk::TextView *tv = static_cast<Gtk::TextView*>(s->get_child());
Glib::ustring text = tv->get_buffer()->get_text();
- if (rdf_set_work_entity (doc, _entity, text.c_str()))
- sp_document_done (doc, SP_VERB_NONE,
- /* TODO: annotate */ "entity-entry.cpp:146");
+ if (rdf_set_work_entity (doc, _entity, text.c_str())) {
+ DocumentUndo::done(doc, SP_VERB_NONE,
+ /* TODO: annotate */ "entity-entry.cpp:146");
+ }
_wr->setUpdating (false);
}
diff --git a/src/ui/widget/imageicon.cpp b/src/ui/widget/imageicon.cpp
index 71ba4428c..c60e94ab7 100644
--- a/src/ui/widget/imageicon.cpp
+++ b/src/ui/widget/imageicon.cpp
@@ -4,6 +4,7 @@
* Authors:
* Bob Jamison
* Other dudes from The Inkscape Organization
+ * Abhishek Sharma
*
* Copyright (C) 2004 The Inkscape Organization
*
@@ -76,7 +77,7 @@ ImageIcon::ImageIcon(const ImageIcon &other)
ImageIcon::~ImageIcon()
{
if (document)
- sp_document_unref(document);
+ document->doUnref();
}
@@ -98,11 +99,11 @@ bool ImageIcon::showSvgDocument(const SPDocument *docArg)
{
if (document)
- sp_document_unref(document);
+ document->doUnref();
SPDocument *doc = (SPDocument *)docArg;
- sp_document_ref(doc);
+ doc->doRef();
document = doc;
//This should remove it from the box, and free resources
@@ -127,7 +128,7 @@ bool ImageIcon::showSvgFile(const Glib::ustring &theFileName)
fileName = Glib::filename_to_utf8(fileName);
- SPDocument *doc = sp_document_new (fileName.c_str(), 0);
+ SPDocument *doc = SPDocument::createNewDoc (fileName.c_str(), 0);
if (!doc) {
g_warning("SVGView: error loading document '%s'\n", fileName.c_str());
return false;
@@ -135,7 +136,7 @@ bool ImageIcon::showSvgFile(const Glib::ustring &theFileName)
showSvgDocument(doc);
- sp_document_unref(doc);
+ doc->doUnref();
return true;
}
@@ -148,7 +149,7 @@ bool ImageIcon::showSvgFromMemory(const char *xmlBuffer)
return false;
gint len = (gint)strlen(xmlBuffer);
- SPDocument *doc = sp_document_new_from_mem(xmlBuffer, len, 0);
+ SPDocument *doc = SPDocument::createNewDocFromMem(xmlBuffer, len, 0);
if (!doc) {
g_warning("SVGView: error loading buffer '%s'\n",xmlBuffer);
return false;
@@ -156,7 +157,7 @@ bool ImageIcon::showSvgFromMemory(const char *xmlBuffer)
showSvgDocument(doc);
- sp_document_unref(doc);
+ doc->doUnref();
return true;
}
diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp
index 5fb8089b4..6d1da0af0 100644
--- a/src/ui/widget/layer-selector.cpp
+++ b/src/ui/widget/layer-selector.cpp
@@ -3,6 +3,7 @@
*
* Authors:
* MenTaLguY <mental@rydia.net>
+ * Abhishek Sharma
*
* Copyright (C) 2004 MenTaLguY
*
@@ -583,16 +584,16 @@ void LayerSelector::_prepareLabelRenderer(
void LayerSelector::_lockLayer(bool lock) {
if ( _layer && SP_IS_ITEM(_layer) ) {
SP_ITEM(_layer)->setLocked(lock);
- sp_document_done(sp_desktop_document(_desktop), SP_VERB_NONE,
- lock? _("Lock layer") : _("Unlock layer"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_NONE,
+ lock? _("Lock layer") : _("Unlock layer"));
}
}
void LayerSelector::_hideLayer(bool hide) {
if ( _layer && SP_IS_ITEM(_layer) ) {
SP_ITEM(_layer)->setHidden(hide);
- sp_document_done(sp_desktop_document(_desktop), SP_VERB_NONE,
- hide? _("Hide layer") : _("Unhide layer"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_NONE,
+ hide? _("Hide layer") : _("Unhide layer"));
}
}
diff --git a/src/ui/widget/licensor.cpp b/src/ui/widget/licensor.cpp
index a5f1d89be..c9550bb27 100644
--- a/src/ui/widget/licensor.cpp
+++ b/src/ui/widget/licensor.cpp
@@ -6,6 +6,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Jon Phillips <jon@rejon.org>
* Ralf Stephan <ralf@ark.in-berlin.de> (Gtkmm)
+ * Abhishek Sharma
*
* Copyright (C) 2000 - 2005 Authors
*
@@ -64,8 +65,8 @@ LicenseItem::on_toggled()
_wr.setUpdating (true);
rdf_set_license (SP_ACTIVE_DOCUMENT, _lic->details ? _lic : 0);
- sp_document_done (SP_ACTIVE_DOCUMENT, SP_VERB_NONE,
- /* TODO: annotate */ "licensor.cpp:65");
+ DocumentUndo::done(SP_ACTIVE_DOCUMENT, SP_VERB_NONE,
+ /* TODO: annotate */ "licensor.cpp:65");
_wr.setUpdating (false);
static_cast<Gtk::Entry*>(_eep->_packable)->set_text (_lic->uri);
_eep->on_changed();
diff --git a/src/ui/widget/object-composite-settings.cpp b/src/ui/widget/object-composite-settings.cpp
index a9b4fe83e..1de425da3 100644
--- a/src/ui/widget/object-composite-settings.cpp
+++ b/src/ui/widget/object-composite-settings.cpp
@@ -5,6 +5,7 @@
* Bryce W. Harrington <bryce@bryceharrington.org>
* Gustav Broberg <broberg@kth.se>
* Niko Kiirala <niko@kiirala.com>
+ * Abhishek Sharma
*
* Copyright (C) 2004--2008 Authors
*
@@ -168,7 +169,7 @@ ObjectCompositeSettings::_blendBlurValueChanged()
SP_OBJECT_STYLE_MODIFIED_FLAG ));
}
- sp_document_maybe_done (document, _blur_tag.c_str(), _verb_code,
+ DocumentUndo::maybeDone(document, _blur_tag.c_str(), _verb_code,
_("Change blur"));
// resume interruptibility
@@ -208,7 +209,7 @@ ObjectCompositeSettings::_opacityValueChanged()
sp_repr_css_attr_unref (css);
- sp_document_maybe_done (sp_desktop_document (desktop), _opacity_tag.c_str(), _verb_code,
+ DocumentUndo::maybeDone(sp_desktop_document (desktop), _opacity_tag.c_str(), _verb_code,
_("Change opacity"));
// resume interruptibility
diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp
index 724848ca5..f7cb6f145 100644
--- a/src/ui/widget/page-sizer.cpp
+++ b/src/ui/widget/page-sizer.cpp
@@ -8,6 +8,7 @@
* Jon Phillips <jon@rejon.org>
* Ralf Stephan <ralf@ark.in-berlin.de> (Gtkmm)
* Bob Jamison <ishmal@users.sf.net>
+ * Abhishek Sharma
*
* Copyright (C) 2000 - 2006 Authors
*
@@ -415,14 +416,14 @@ PageSizer::setDim (double w, double h, bool changeList)
if (SP_ACTIVE_DESKTOP && !_widgetRegistry->isUpdating()) {
SPDocument *doc = sp_desktop_document(SP_ACTIVE_DESKTOP);
- double const old_height = sp_document_height(doc);
- sp_document_set_width (doc, w, &_px_unit);
- sp_document_set_height (doc, h, &_px_unit);
+ double const old_height = doc->getHeight();
+ doc->setWidth (w, &_px_unit);
+ doc->setHeight (h, &_px_unit);
// The origin for the user is in the lower left corner; this point should remain stationary when
// changing the page size. The SVG's origin however is in the upper left corner, so we must compensate for this
Geom::Translate const vert_offset(Geom::Point(0, (old_height - h)));
SP_GROUP(SP_ROOT(doc->root))->translateChildItems(vert_offset);
- sp_document_done (doc, SP_VERB_NONE, _("Set page size"));
+ DocumentUndo::done(doc, SP_VERB_NONE, _("Set page size"));
}
if ( w != h ) {
diff --git a/src/ui/widget/registered-widget.cpp b/src/ui/widget/registered-widget.cpp
index db31d08d3..04bd27285 100644
--- a/src/ui/widget/registered-widget.cpp
+++ b/src/ui/widget/registered-widget.cpp
@@ -8,6 +8,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Jon Phillips <jon@rejon.org>
* Ralf Stephan <ralf@ark.in-berlin.de> (Gtkmm)
+ * Abhishek Sharma
*
* Copyright (C) 2000 - 2007 Authors
*
@@ -349,15 +350,15 @@ RegisteredColorPicker::on_changed (guint32 rgba)
gchar c[32];
sp_svg_write_color(c, sizeof(c), rgba);
- bool saved = sp_document_get_undo_sensitive (local_doc);
- sp_document_set_undo_sensitive (local_doc, false);
+ bool saved = DocumentUndo::getUndoSensitive(local_doc);
+ DocumentUndo::setUndoSensitive(local_doc, false);
local_repr->setAttribute(_ckey.c_str(), c);
sp_repr_set_css_double(local_repr, _akey.c_str(), (rgba & 0xff) / 255.0);
- sp_document_set_undo_sensitive (local_doc, saved);
+ DocumentUndo::setUndoSensitive(local_doc, saved);
local_doc->setModifiedSinceSave();
- sp_document_done (local_doc, SP_VERB_NONE,
- /* TODO: annotate */ "registered-widget.cpp: RegisteredColorPicker::on_changed");
+ DocumentUndo::done(local_doc, SP_VERB_NONE,
+ /* TODO: annotate */ "registered-widget.cpp: RegisteredColorPicker::on_changed");
_wr->setUpdating (false);
}
diff --git a/src/ui/widget/registered-widget.h b/src/ui/widget/registered-widget.h
index 7aefbb90e..efb5eb70e 100644
--- a/src/ui/widget/registered-widget.h
+++ b/src/ui/widget/registered-widget.h
@@ -4,6 +4,7 @@
* Authors:
* Ralf Stephan <ralf@ark.in-berlin.de>
* Johan Engelen <j.b.c.engelen@utwente.nl>
+ * Abhishek Sharma
*
* Copyright (C) 2005-2008 Authors
*
@@ -104,16 +105,18 @@ protected:
local_doc = sp_desktop_document(dt);
}
- bool saved = sp_document_get_undo_sensitive (local_doc);
- sp_document_set_undo_sensitive (local_doc, false);
- if (!write_undo) local_repr->setAttribute(_key.c_str(), svgstr);
- sp_document_set_undo_sensitive (local_doc, saved);
+ bool saved = DocumentUndo::getUndoSensitive(local_doc);
+ DocumentUndo::setUndoSensitive(local_doc, false);
+ if (!write_undo) {
+ local_repr->setAttribute(_key.c_str(), svgstr);
+ }
+ DocumentUndo::setUndoSensitive(local_doc, saved);
local_doc->setModifiedSinceSave();
if (write_undo) {
local_repr->setAttribute(_key.c_str(), svgstr);
- sp_document_done (local_doc, event_type, event_description);
+ DocumentUndo::done(local_doc, event_type, event_description);
}
}
diff --git a/src/ui/widget/ruler.cpp b/src/ui/widget/ruler.cpp
index 7f260680b..107f4e8c6 100644
--- a/src/ui/widget/ruler.cpp
+++ b/src/ui/widget/ruler.cpp
@@ -6,6 +6,8 @@
* Authors:
* Ralf Stephan <ralf@ark.in-berlin.de>
* Lauris Kaplinski
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2005 Ralf Stephan
*
@@ -145,15 +147,15 @@ Ruler::on_button_release_event(GdkEventButton *evb)
_dragging = false;
if ( (_horiz_f ? wy : wx ) >= 0 ) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(_dt->doc());
+ Inkscape::XML::Document *xml_doc = _dt->doc()->getReprDoc();
Inkscape::XML::Node *repr = xml_doc->createElement("sodipodi:guide");
repr->setAttribute("orientation", _horiz_f ? "horizontal" : "vertical");
double const guide_pos_dt = event_dt[ _horiz_f ? Geom::Y : Geom::X ];
sp_repr_set_svg_double(repr, "position", guide_pos_dt);
SP_OBJECT_REPR(_dt->namedview)->appendChild(repr);
Inkscape::GC::release(repr);
- sp_document_done(sp_desktop_document(_dt), SP_VERB_NONE,
- /* TODO: annotate */ "ruler.cpp:157");
+ DocumentUndo::done(sp_desktop_document(_dt), SP_VERB_NONE,
+ /* TODO: annotate */ "ruler.cpp:157");
}
_dt->set_coordinate_status(event_dt);
}
diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp
index 8e11c8308..e7d8ac5a3 100644
--- a/src/ui/widget/selected-style.cpp
+++ b/src/ui/widget/selected-style.cpp
@@ -3,6 +3,7 @@
*
* Author:
* buliabyak@gmail.com
+ * Abhishek Sharma
*
* Copyright (C) 2005 author
*
@@ -464,8 +465,8 @@ void SelectedStyle::dragDataReceived( GtkWidget */*widget*/,
sp_repr_css_set_property( css, (tracker->item == SS_FILL) ? "fill":"stroke", c );
sp_desktop_set_style( tracker->parent->_desktop, css );
sp_repr_css_attr_unref( css );
- sp_document_done( sp_desktop_document(tracker->parent->_desktop) , SP_VERB_NONE,
- _("Drop color"));
+ DocumentUndo::done( sp_desktop_document(tracker->parent->_desktop) , SP_VERB_NONE,
+ _("Drop color"));
}
}
break;
@@ -477,8 +478,8 @@ void SelectedStyle::on_fill_remove() {
sp_repr_css_set_property (css, "fill", "none");
sp_desktop_set_style (_desktop, css, true, true);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Remove fill"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Remove fill"));
}
void SelectedStyle::on_stroke_remove() {
@@ -486,8 +487,8 @@ void SelectedStyle::on_stroke_remove() {
sp_repr_css_set_property (css, "stroke", "none");
sp_desktop_set_style (_desktop, css, true, true);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Remove stroke"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Remove stroke"));
}
void SelectedStyle::on_fill_unset() {
@@ -495,8 +496,8 @@ void SelectedStyle::on_fill_unset() {
sp_repr_css_unset_property (css, "fill");
sp_desktop_set_style (_desktop, css, true, true);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Unset fill"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Unset fill"));
}
void SelectedStyle::on_stroke_unset() {
@@ -511,8 +512,8 @@ void SelectedStyle::on_stroke_unset() {
sp_repr_css_unset_property (css, "stroke-dasharray");
sp_desktop_set_style (_desktop, css, true, true);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Unset stroke"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Unset stroke"));
}
void SelectedStyle::on_fill_opaque() {
@@ -520,8 +521,8 @@ void SelectedStyle::on_fill_opaque() {
sp_repr_css_set_property (css, "fill-opacity", "1");
sp_desktop_set_style (_desktop, css, true);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Make fill opaque"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Make fill opaque"));
}
void SelectedStyle::on_stroke_opaque() {
@@ -529,8 +530,8 @@ void SelectedStyle::on_stroke_opaque() {
sp_repr_css_set_property (css, "stroke-opacity", "1");
sp_desktop_set_style (_desktop, css, true);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Make fill opaque"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Make fill opaque"));
}
void SelectedStyle::on_fill_lastused() {
@@ -541,8 +542,8 @@ void SelectedStyle::on_fill_lastused() {
sp_repr_css_set_property (css, "fill", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Apply last set color to fill"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Apply last set color to fill"));
}
void SelectedStyle::on_stroke_lastused() {
@@ -553,8 +554,8 @@ void SelectedStyle::on_stroke_lastused() {
sp_repr_css_set_property (css, "stroke", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Apply last set color to stroke"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Apply last set color to stroke"));
}
void SelectedStyle::on_fill_lastselected() {
@@ -564,8 +565,8 @@ void SelectedStyle::on_fill_lastselected() {
sp_repr_css_set_property (css, "fill", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Apply last selected color to fill"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Apply last selected color to fill"));
}
void SelectedStyle::on_stroke_lastselected() {
@@ -575,8 +576,8 @@ void SelectedStyle::on_stroke_lastselected() {
sp_repr_css_set_property (css, "stroke", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Apply last selected color to stroke"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Apply last selected color to stroke"));
}
void SelectedStyle::on_fill_invert() {
@@ -595,8 +596,8 @@ void SelectedStyle::on_fill_invert() {
sp_repr_css_set_property (css, "fill", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Invert fill"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Invert fill"));
}
void SelectedStyle::on_stroke_invert() {
@@ -615,8 +616,8 @@ void SelectedStyle::on_stroke_invert() {
sp_repr_css_set_property (css, "stroke", c);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Invert stroke"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Invert stroke"));
}
void SelectedStyle::on_fill_white() {
@@ -627,8 +628,8 @@ void SelectedStyle::on_fill_white() {
sp_repr_css_set_property (css, "fill-opacity", "1");
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("White fill"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("White fill"));
}
void SelectedStyle::on_stroke_white() {
@@ -639,8 +640,8 @@ void SelectedStyle::on_stroke_white() {
sp_repr_css_set_property (css, "stroke-opacity", "1");
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("White stroke"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("White stroke"));
}
void SelectedStyle::on_fill_black() {
@@ -651,8 +652,8 @@ void SelectedStyle::on_fill_black() {
sp_repr_css_set_property (css, "fill-opacity", "1.0");
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Black fill"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Black fill"));
}
void SelectedStyle::on_stroke_black() {
@@ -663,8 +664,8 @@ void SelectedStyle::on_stroke_black() {
sp_repr_css_set_property (css, "stroke-opacity", "1.0");
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Black stroke"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Black stroke"));
}
void SelectedStyle::on_fill_copy() {
@@ -706,8 +707,8 @@ void SelectedStyle::on_fill_paste() {
sp_repr_css_set_property (css, "fill", text.c_str());
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Paste fill"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Paste fill"));
}
}
@@ -724,8 +725,8 @@ void SelectedStyle::on_stroke_paste() {
sp_repr_css_set_property (css, "stroke", text.c_str());
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Paste stroke"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Paste stroke"));
}
}
@@ -778,8 +779,8 @@ void SelectedStyle::on_fillstroke_swap() {
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Swap fill and stroke"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Swap fill and stroke"));
}
void SelectedStyle::on_fill_edit() {
@@ -853,8 +854,8 @@ SelectedStyle::on_opacity_click(GdkEventButton *event)
sp_repr_css_set_property (css, "opacity", opacity);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document (_desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Change opacity"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Change opacity"));
return true;
}
@@ -888,8 +889,8 @@ void SelectedStyle::on_popup_preset(int i) {
// FIXME: update dash patterns!
sp_desktop_set_style (_desktop, css, true);
sp_repr_css_attr_unref (css);
- sp_document_done (sp_desktop_document(_desktop), SP_VERB_DIALOG_SWATCHES,
- _("Change stroke width"));
+ DocumentUndo::done(sp_desktop_document(_desktop), SP_VERB_DIALOG_SWATCHES,
+ _("Change stroke width"));
}
void
@@ -1147,8 +1148,8 @@ void SelectedStyle::on_opacity_changed () {
sp_canvas_force_full_redraw_after_interruptions(sp_desktop_canvas(_desktop), 0);
sp_desktop_set_style (_desktop, css);
sp_repr_css_attr_unref (css);
- sp_document_maybe_done (sp_desktop_document (_desktop), "fillstroke:opacity", SP_VERB_DIALOG_FILL_STROKE,
- _("Change opacity"));
+ DocumentUndo::maybeDone(sp_desktop_document(_desktop), "fillstroke:opacity", SP_VERB_DIALOG_FILL_STROKE,
+ _("Change opacity"));
// resume interruptibility
sp_canvas_end_forced_full_redraws(sp_desktop_canvas(_desktop));
spinbutton_defocus(GTK_OBJECT(_opacity_sb.gobj()));
@@ -1274,19 +1275,19 @@ RotateableSwatch::do_motion(double by, guint modifier) {
if (modifier == 3) { // Alt, do nothing
} else if (modifier == 2) { // saturation
- sp_document_maybe_done (sp_desktop_document(parent->getDesktop()), undokey,
+ DocumentUndo::maybeDone(sp_desktop_document(parent->getDesktop()), undokey,
SP_VERB_DIALOG_FILL_STROKE, (_("Adjust saturation")));
double ch = hsl[1];
parent->getDesktop()->event_context->_message_context->setF(Inkscape::IMMEDIATE_MESSAGE, _("Adjusting <b>saturation</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with <b>Ctrl</b> to adjust lightness, without modifiers to adjust hue"), ch - diff, ch, diff);
} else if (modifier == 1) { // lightness
- sp_document_maybe_done (sp_desktop_document(parent->getDesktop()), undokey,
+ DocumentUndo::maybeDone(sp_desktop_document(parent->getDesktop()), undokey,
SP_VERB_DIALOG_FILL_STROKE, (_("Adjust lightness")));
double ch = hsl[2];
parent->getDesktop()->event_context->_message_context->setF(Inkscape::IMMEDIATE_MESSAGE, _("Adjusting <b>lightness</b>: was %.3g, now <b>%.3g</b> (diff %.3g); with <b>Shift</b> to adjust saturation, without modifiers to adjust hue"), ch - diff, ch, diff);
} else { // hue
- sp_document_maybe_done (sp_desktop_document(parent->getDesktop()), undokey,
+ DocumentUndo::maybeDone(sp_desktop_document(parent->getDesktop()), undokey,
SP_VERB_DIALOG_FILL_STROKE, (_("Adjust hue")));
double ch = hsl[0];
parent->getDesktop()->event_context->_message_context->setF(Inkscape::IMMEDIATE_MESSAGE, _("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"), ch - diff, ch, diff);
@@ -1315,15 +1316,15 @@ RotateableSwatch::do_release(double by, guint modifier) {
if (modifier == 3) { // Alt, do nothing
} else if (modifier == 2) { // saturation
- sp_document_maybe_done (sp_desktop_document(parent->getDesktop()), undokey,
+ DocumentUndo::maybeDone(sp_desktop_document(parent->getDesktop()), undokey,
SP_VERB_DIALOG_FILL_STROKE, ("Adjust saturation"));
} else if (modifier == 1) { // lightness
- sp_document_maybe_done (sp_desktop_document(parent->getDesktop()), undokey,
+ DocumentUndo::maybeDone(sp_desktop_document(parent->getDesktop()), undokey,
SP_VERB_DIALOG_FILL_STROKE, ("Adjust lightness"));
} else { // hue
- sp_document_maybe_done (sp_desktop_document(parent->getDesktop()), undokey,
+ DocumentUndo::maybeDone(sp_desktop_document(parent->getDesktop()), undokey,
SP_VERB_DIALOG_FILL_STROKE, ("Adjust hue"));
}
@@ -1397,7 +1398,7 @@ RotateableStrokeWidth::do_motion(double by, guint modifier) {
if (modifier == 3) { // Alt, do nothing
} else {
double diff = value_adjust(startvalue, by, modifier, false);
- sp_document_maybe_done (sp_desktop_document(parent->getDesktop()), undokey,
+ DocumentUndo::maybeDone(sp_desktop_document(parent->getDesktop()), undokey,
SP_VERB_DIALOG_FILL_STROKE, (_("Adjust stroke width")));
parent->getDesktop()->event_context->_message_context->setF(Inkscape::IMMEDIATE_MESSAGE, _("Adjusting <b>stroke width</b>: was %.3g, now <b>%.3g</b> (diff %.3g)"), startvalue, startvalue + diff, diff);
}
@@ -1411,7 +1412,7 @@ RotateableStrokeWidth::do_release(double by, guint modifier) {
} else {
value_adjust(startvalue, by, modifier, true);
startvalue_set = false;
- sp_document_maybe_done (sp_desktop_document(parent->getDesktop()), undokey,
+ DocumentUndo::maybeDone(sp_desktop_document(parent->getDesktop()), undokey,
SP_VERB_DIALOG_FILL_STROKE, (_("Adjust stroke width")));
}
diff --git a/src/ui/widget/style-subject.cpp b/src/ui/widget/style-subject.cpp
index 09001a993..f4780896b 100644
--- a/src/ui/widget/style-subject.cpp
+++ b/src/ui/widget/style-subject.cpp
@@ -2,6 +2,7 @@
* \brief Abstraction for different style widget operands
*
* Copyright (C) 2007 MenTaLguY <mental@rydia.net>
+ * Abhishek Sharma
*
* Released under GNU GPL. Read the file 'COPYING' for more information.
*/
@@ -146,7 +147,7 @@ StyleSubject::iterator StyleSubject::CurrentLayer::begin() {
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);
+ return SP_ITEM(layer)->getBboxDesktop(type);
} else {
return Geom::OptRect();
}
diff --git a/src/ui/widget/tolerance-slider.cpp b/src/ui/widget/tolerance-slider.cpp
index 3a36127f4..cc179ddbc 100644
--- a/src/ui/widget/tolerance-slider.cpp
+++ b/src/ui/widget/tolerance-slider.cpp
@@ -4,6 +4,7 @@
*
* Authors:
* Ralf Stephan <ralf@ark.in-berlin.de>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Authors
*
@@ -186,11 +187,11 @@ ToleranceSlider::update (double val)
_wr->setUpdating (true);
SPDocument *doc = sp_desktop_document(dt);
- bool saved = sp_document_get_undo_sensitive (doc);
- sp_document_set_undo_sensitive (doc, false);
+ bool saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false);
Inkscape::XML::Node *repr = SP_OBJECT_REPR (sp_desktop_namedview(dt));
repr->setAttribute(_key.c_str(), os.str().c_str());
- sp_document_set_undo_sensitive (doc, saved);
+ DocumentUndo::setUndoSensitive(doc, saved);
doc->setModifiedSinceSave();
diff --git a/src/unclump.cpp b/src/unclump.cpp
index 3226160dc..1039351a3 100644
--- a/src/unclump.cpp
+++ b/src/unclump.cpp
@@ -3,6 +3,8 @@
*/
/* Authors:
* bulia byak
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2005 Authors
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -31,7 +33,7 @@ unclump_center (SPItem *item)
return i->second;
}
- Geom::OptRect r = item->getBounds(sp_item_i2d_affine(item));
+ Geom::OptRect r = item->getBounds(item->i2d_affine());
if (r) {
Geom::Point const c = r->midpoint();
c_cache[item->getId()] = c;
@@ -50,7 +52,7 @@ unclump_wh (SPItem *item)
if ( i != wh_cache.end() ) {
wh = i->second;
} else {
- Geom::OptRect r = item->getBounds(sp_item_i2d_affine(item));
+ Geom::OptRect r = item->getBounds(item->i2d_affine());
if (r) {
wh = r->dimensions();
wh_cache[item->getId()] = wh;
@@ -292,10 +294,10 @@ unclump_push (SPItem *from, SPItem *what, double dist)
i->second *= move;
}
- //g_print ("push %s at %g,%g from %g,%g by %g,%g, dist %g\n", SP_OBJECT_ID(what), it[Geom::X],it[Geom::Y], p[Geom::X],p[Geom::Y], by[Geom::X],by[Geom::Y], dist);
+ //g_print ("push %s at %g,%g from %g,%g by %g,%g, dist %g\n", what->getId(), it[Geom::X],it[Geom::Y], p[Geom::X],p[Geom::Y], by[Geom::X],by[Geom::Y], dist);
- sp_item_set_i2d_affine(what, sp_item_i2d_affine(what) * move);
- sp_item_write_transform(what, SP_OBJECT_REPR(what), what->transform, NULL);
+ what->set_i2d_affine(what->i2d_affine() * move);
+ what->doWriteTransform(SP_OBJECT_REPR(what), what->transform, NULL);
}
/**
@@ -315,10 +317,10 @@ unclump_pull (SPItem *to, SPItem *what, double dist)
i->second *= move;
}
- //g_print ("pull %s at %g,%g to %g,%g by %g,%g, dist %g\n", SP_OBJECT_ID(what), it[Geom::X],it[Geom::Y], p[Geom::X],p[Geom::Y], by[Geom::X],by[Geom::Y], dist);
+ //g_print ("pull %s at %g,%g to %g,%g by %g,%g, dist %g\n", what->getId(), it[Geom::X],it[Geom::Y], p[Geom::X],p[Geom::Y], by[Geom::X],by[Geom::Y], dist);
- sp_item_set_i2d_affine(what, sp_item_i2d_affine(what) * move);
- sp_item_write_transform(what, SP_OBJECT_REPR(what), what->transform, NULL);
+ what->set_i2d_affine(what->i2d_affine() * move);
+ what->doWriteTransform(SP_OBJECT_REPR(what), what->transform, NULL);
}
@@ -364,7 +366,7 @@ unclump (GSList *items)
double dist_closest = unclump_dist (closest, item);
double dist_farest = unclump_dist (farest, item);
- //g_print ("NEI %d for item %s closest %s at %g farest %s at %g ave %g\n", g_slist_length(nei), SP_OBJECT_ID(item), SP_OBJECT_ID(closest), dist_closest, SP_OBJECT_ID(farest), dist_farest, ave);
+ //g_print ("NEI %d for item %s closest %s at %g farest %s at %g ave %g\n", g_slist_length(nei), item->getId(), closest->getId(), dist_closest, farest->getId(), dist_farest, ave);
if (fabs (ave) < 1e6 && fabs (dist_closest) < 1e6 && fabs (dist_farest) < 1e6) { // otherwise the items are bogus
// increase these coefficients to make unclumping more aggressive and less stable
diff --git a/src/uri-references.h b/src/uri-references.h
index a98c84153..c0f9190b1 100644
--- a/src/uri-references.h
+++ b/src/uri-references.h
@@ -6,6 +6,7 @@
*
* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Abhishek Sharma
*
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
@@ -18,6 +19,7 @@
#include "bad-uri-exception.h"
#include "forward.h"
+#include "sp-object.h"
namespace Inkscape {
diff --git a/src/vanishing-point.cpp b/src/vanishing-point.cpp
index d8e27debd..f8e991623 100644
--- a/src/vanishing-point.cpp
+++ b/src/vanishing-point.cpp
@@ -1,5 +1,3 @@
-#define __VANISHING_POINT_C__
-
/*
* Vanishing point for 3D perspectives
*
@@ -7,6 +5,7 @@
* bulia byak <buliabyak@users.sf.net>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
* Maximilian Albert <Anhalter42@gmx.de>
+ * Abhishek Sharma
*
* Copyright (C) 2005-2007 authors
*
@@ -25,6 +24,8 @@
#include "snap.h"
#include "sp-namedview.h"
+using Inkscape::DocumentUndo;
+
namespace Box3D {
#define VP_KNOT_COLOR_NORMAL 0xffffff00
@@ -121,8 +122,8 @@ vp_knot_moved_handler (SPKnot *knot, Geom::Point const *ppointer, guint state, g
}
// FIXME: Do we need to create a new dragger as well?
dragger->updateZOrders ();
- sp_document_done (sp_desktop_document (inkscape_active_desktop()), SP_VERB_CONTEXT_3DBOX,
- _("Split vanishing points"));
+ DocumentUndo::done(sp_desktop_document (inkscape_active_desktop()), SP_VERB_CONTEXT_3DBOX,
+ _("Split vanishing points"));
return;
}
}
@@ -166,8 +167,8 @@ vp_knot_moved_handler (SPKnot *knot, Geom::Point const *ppointer, guint state, g
// deleted according to changes in the svg representation, not based on any user input
// as is currently the case.
- sp_document_done (sp_desktop_document (inkscape_active_desktop()), SP_VERB_CONTEXT_3DBOX,
- _("Merge vanishing points"));
+ DocumentUndo::done(sp_desktop_document (inkscape_active_desktop()), SP_VERB_CONTEXT_3DBOX,
+ _("Merge vanishing points"));
return;
}
@@ -232,8 +233,8 @@ vp_knot_ungrabbed_handler (SPKnot *knot, guint /*state*/, gpointer data)
// TODO: Undo machinery!!
g_return_if_fail (dragger->parent);
g_return_if_fail (dragger->parent->document);
- sp_document_done(dragger->parent->document, SP_VERB_CONTEXT_3DBOX,
- _("3D box: Move vanishing point"));
+ DocumentUndo::done(dragger->parent->document, SP_VERB_CONTEXT_3DBOX,
+ _("3D box: Move vanishing point"));
}
unsigned int VanishingPoint::global_counter = 0;
diff --git a/src/verbs.cpp b/src/verbs.cpp
index 8b5ec9b3b..a218e85db 100644
--- a/src/verbs.cpp
+++ b/src/verbs.cpp
@@ -1,4 +1,3 @@
-#define __SP_VERBS_C__
/**
* \file verbs.cpp
*
@@ -17,6 +16,7 @@
* David Turner <novalis@gnu.org>
* bulia byak <buliabyak@users.sf.net>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
* Copyright (C) (date unspecified) Authors
@@ -82,6 +82,8 @@
#include "ui/icon-names.h"
#include "ui/tool/node-tool.h"
+using Inkscape::DocumentUndo;
+
//#ifdef WITH_INKBOARD
//#include "jabber_whiteboard/session-manager.h"
//#endif
@@ -655,7 +657,7 @@ gchar const *Verb::get_tip(void)
g_free(shortcutString);
shortcutString = 0;
} else {
- _full_tip = g_strdup(_(_tip));
+ _full_tip = g_strdup(_(_tip));
}
}
result = _full_tip;
@@ -1128,8 +1130,8 @@ LayerVerb::perform(SPAction *action, void *data, void */*pdata*/)
SPObject *next=Inkscape::next_layer(dt->currentRoot(), dt->currentLayer());
if (next) {
dt->setCurrentLayer(next);
- sp_document_done(sp_desktop_document(dt), SP_VERB_LAYER_NEXT,
- _("Switch to next layer"));
+ DocumentUndo::done(sp_desktop_document(dt), SP_VERB_LAYER_NEXT,
+ _("Switch to next layer"));
dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Switched to next layer."));
} else {
dt->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot go past last layer."));
@@ -1140,8 +1142,8 @@ LayerVerb::perform(SPAction *action, void *data, void */*pdata*/)
SPObject *prev=Inkscape::previous_layer(dt->currentRoot(), dt->currentLayer());
if (prev) {
dt->setCurrentLayer(prev);
- sp_document_done(sp_desktop_document(dt), SP_VERB_LAYER_PREV,
- _("Switch to previous layer"));
+ DocumentUndo::done(sp_desktop_document(dt), SP_VERB_LAYER_PREV,
+ _("Switch to previous layer"));
dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Switched to previous layer."));
} else {
dt->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot go before first layer."));
@@ -1168,7 +1170,7 @@ LayerVerb::perform(SPAction *action, void *data, void */*pdata*/)
SPItem *layer=SP_ITEM(dt->currentLayer());
g_return_if_fail(layer != NULL);
- SPObject *old_pos=SP_OBJECT_NEXT(layer);
+ SPObject *old_pos = layer->getNext();
switch (verb) {
case SP_VERB_LAYER_TO_TOP:
@@ -1185,7 +1187,7 @@ LayerVerb::perform(SPAction *action, void *data, void */*pdata*/)
break;
}
- if ( SP_OBJECT_NEXT(layer) != old_pos ) {
+ if ( layer->getNext() != old_pos ) {
char const *message = NULL;
Glib::ustring description = "";
switch (verb) {
@@ -1206,7 +1208,7 @@ LayerVerb::perform(SPAction *action, void *data, void */*pdata*/)
description = _("Lower layer");
break;
};
- sp_document_done(sp_desktop_document(dt), verb, description);
+ DocumentUndo::done(sp_desktop_document(dt), verb, description);
if (message) {
dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, message);
g_free((void *) message);
@@ -1237,7 +1239,8 @@ LayerVerb::perform(SPAction *action, void *data, void */*pdata*/)
sp_edit_select_all(dt);
#else
// Copies everything, regardless of locks, visibility, sublayers.
- Inkscape::XML::Node *selected = dt->currentLayer()->repr;
+ //XML Tree being directly used here while it shouldn't be.
+ Inkscape::XML::Node *selected = dt->currentLayer()->getRepr();
Inkscape::XML::Node *parent = sp_repr_parent(selected);
Inkscape::XML::Node *dup = selected->duplicate(parent->document());
parent->addChild(dup, selected);
@@ -1251,8 +1254,8 @@ LayerVerb::perform(SPAction *action, void *data, void */*pdata*/)
dt->setCurrentLayer(new_layer);
}
#endif
- sp_document_done(sp_desktop_document(dt), SP_VERB_LAYER_DUPLICATE,
- _("Duplicate layer"));
+ DocumentUndo::done(sp_desktop_document(dt), SP_VERB_LAYER_DUPLICATE,
+ _("Duplicate layer"));
// TRANSLATORS: this means "The layer has been duplicated."
dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Duplicated layer."));
@@ -1283,8 +1286,8 @@ LayerVerb::perform(SPAction *action, void *data, void */*pdata*/)
dt->setCurrentLayer(survivor);
}
- sp_document_done(sp_desktop_document(dt), SP_VERB_LAYER_DELETE,
- _("Delete layer"));
+ DocumentUndo::done(sp_desktop_document(dt), SP_VERB_LAYER_DELETE,
+ _("Delete layer"));
// TRANSLATORS: this means "The layer has been deleted."
dt->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Deleted layer."));
@@ -1298,7 +1301,7 @@ LayerVerb::perform(SPAction *action, void *data, void */*pdata*/)
dt->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("No current layer."));
} else {
dt->toggleLayerSolo( dt->currentLayer() );
- sp_document_maybe_done(sp_desktop_document(dt), "layer:solo", SP_VERB_LAYER_SOLO, _("Toggle layer solo"));
+ DocumentUndo::maybeDone(sp_desktop_document(dt), "layer:solo", SP_VERB_LAYER_SOLO, _("Toggle layer solo"));
}
break;
}
@@ -1358,13 +1361,13 @@ ObjectVerb::perform( SPAction *action, void *data, void */*pdata*/ )
break;
case SP_VERB_OBJECT_FLIP_HORIZONTAL:
sp_selection_scale_relative(sel, center, Geom::Scale(-1.0, 1.0));
- sp_document_done(sp_desktop_document(dt), SP_VERB_OBJECT_FLIP_HORIZONTAL,
- _("Flip horizontally"));
+ DocumentUndo::done(sp_desktop_document(dt), SP_VERB_OBJECT_FLIP_HORIZONTAL,
+ _("Flip horizontally"));
break;
case SP_VERB_OBJECT_FLIP_VERTICAL:
sp_selection_scale_relative(sel, center, Geom::Scale(1.0, -1.0));
- sp_document_done(sp_desktop_document(dt), SP_VERB_OBJECT_FLIP_VERTICAL,
- _("Flip vertically"));
+ DocumentUndo::done(sp_desktop_document(dt), SP_VERB_OBJECT_FLIP_VERTICAL,
+ _("Flip vertically"));
break;
case SP_VERB_OBJECT_SET_MASK:
sp_selection_set_mask(dt, false, false);
@@ -2192,19 +2195,19 @@ LockAndHideVerb::perform(SPAction *action, void *data, void */*pdata*/)
switch (reinterpret_cast<std::size_t>(data)) {
case SP_VERB_UNLOCK_ALL:
unlock_all(dt);
- sp_document_done(doc, SP_VERB_UNLOCK_ALL, _("Unlock all objects in the current layer"));
+ DocumentUndo::done(doc, SP_VERB_UNLOCK_ALL, _("Unlock all objects in the current layer"));
break;
case SP_VERB_UNLOCK_ALL_IN_ALL_LAYERS:
unlock_all_in_all_layers(dt);
- sp_document_done(doc, SP_VERB_UNLOCK_ALL_IN_ALL_LAYERS, _("Unlock all objects in all layers"));
+ DocumentUndo::done(doc, SP_VERB_UNLOCK_ALL_IN_ALL_LAYERS, _("Unlock all objects in all layers"));
break;
case SP_VERB_UNHIDE_ALL:
unhide_all(dt);
- sp_document_done(doc, SP_VERB_UNHIDE_ALL, _("Unhide all objects in the current layer"));
+ DocumentUndo::done(doc, SP_VERB_UNHIDE_ALL, _("Unhide all objects in the current layer"));
break;
case SP_VERB_UNHIDE_ALL_IN_ALL_LAYERS:
unhide_all_in_all_layers(dt);
- sp_document_done(doc, SP_VERB_UNHIDE_ALL_IN_ALL_LAYERS, _("Unhide all objects in all layers"));
+ DocumentUndo::done(doc, SP_VERB_UNHIDE_ALL_IN_ALL_LAYERS, _("Unhide all objects in all layers"));
break;
default:
return;
diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt
index 9af325926..f3c0e70fa 100644
--- a/src/widgets/CMakeLists.txt
+++ b/src/widgets/CMakeLists.txt
@@ -21,7 +21,6 @@ sp-color-preview.cpp
sp-color-scales.cpp
sp-color-selector.cpp
sp-color-slider.cpp
-sp-color-wheel.cpp
sp-color-wheel-selector.cpp
spinbutton-events.cpp
sp-widget.cpp
diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert
index 968bbf073..86046b918 100644
--- a/src/widgets/Makefile_insert
+++ b/src/widgets/Makefile_insert
@@ -48,8 +48,6 @@ ink_common_sources += \
widgets/sp-color-selector.h \
widgets/sp-color-slider.cpp \
widgets/sp-color-slider.h \
- widgets/sp-color-wheel.cpp \
- widgets/sp-color-wheel.h \
widgets/sp-color-wheel-selector.cpp \
widgets/sp-color-wheel-selector.h \
widgets/spinbutton-events.cpp \
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
index d447abf2e..7a3e337de 100644
--- a/src/widgets/desktop-widget.cpp
+++ b/src/widgets/desktop-widget.cpp
@@ -1,5 +1,3 @@
-#define __SP_DESKTOP_WIDGET_C__
-
/** \file
* Desktop widget implementation
*/
@@ -10,6 +8,8 @@
* Ralf Stephan <ralf@ark.in-berlin.de>
* John Bintz <jcoswell@coswellproductions.org>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Johan Engelen
* Copyright (C) 2006 John Bintz
@@ -709,8 +709,8 @@ sp_desktop_widget_realize (GtkWidget *widget)
NRRect d;
d.x0 = 0.0;
d.y0 = 0.0;
- d.x1 = sp_document_width (dtw->desktop->doc());
- d.y1 = sp_document_height (dtw->desktop->doc());
+ d.x1 = (dtw->desktop->doc())->getWidth ();
+ d.y1 = (dtw->desktop->doc())->getHeight ();
if ((fabs (d.x1 - d.x0) < 1.0) || (fabs (d.y1 - d.y0) < 1.0)) return;
@@ -731,7 +731,7 @@ void SPDesktopWidget::updateNamedview()
modified_connection = desktop->namedview->connectModified(sigc::mem_fun(*this, &SPDesktopWidget::namedviewModified));
namedviewModified(desktop->namedview, SP_OBJECT_MODIFIED_FLAG);
- updateTitle(SP_DOCUMENT_NAME (desktop->doc()));
+ updateTitle( desktop->doc()->getName() );
}
/**
@@ -858,7 +858,7 @@ SPDesktopWidget::shutdown()
GTK_BUTTONS_NONE,
_("<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."),
- SP_DOCUMENT_NAME(doc));
+ doc->getName());
// fix for bug 1767940:
GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(GTK_MESSAGE_DIALOG(dialog)->label), GTK_CAN_FOCUS);
@@ -880,12 +880,12 @@ SPDesktopWidget::shutdown()
{
Gtk::Window *window = (Gtk::Window*)gtk_object_get_data (GTK_OBJECT(this), "window");
- sp_document_ref(doc);
+ doc->doRef();
sp_namedview_document_from_window(desktop);
if (sp_file_save_document(*window, doc)) {
- sp_document_unref(doc);
+ doc->doUnref();
} else { // save dialog cancelled or save failed
- sp_document_unref(doc);
+ doc->doUnref();
return TRUE;
}
@@ -900,7 +900,7 @@ SPDesktopWidget::shutdown()
}
/* Code to check data loss */
bool allow_data_loss = FALSE;
- while (sp_document_repr_root(doc)->attribute("inkscape:dataloss") != NULL && allow_data_loss == FALSE) {
+ while (doc->getReprRoot()->attribute("inkscape:dataloss") != NULL && allow_data_loss == FALSE) {
GtkWidget *dialog;
/** \todo
@@ -914,7 +914,7 @@ SPDesktopWidget::shutdown()
GTK_BUTTONS_NONE,
_("<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 Inkscape SVG?"),
- SP_DOCUMENT_NAME(doc)? SP_DOCUMENT_NAME(doc) : "Unnamed",
+ doc->getName() ? doc->getName() : "Unnamed",
SP_MODULE_KEY_OUTPUT_SVG_INKSCAPE);
// fix for bug 1767940:
GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(GTK_MESSAGE_DIALOG(dialog)->label), GTK_CAN_FOCUS);
@@ -938,14 +938,14 @@ SPDesktopWidget::shutdown()
switch (response) {
case GTK_RESPONSE_YES:
{
- sp_document_ref(doc);
+ doc->doRef();
Gtk::Window *window = (Gtk::Window*)gtk_object_get_data (GTK_OBJECT(this), "window");
if (sp_file_save_dialog(*window, doc, Inkscape::Extension::FILE_SAVE_METHOD_INKSCAPE_SVG)) {
- sp_document_unref(doc);
+ doc->doUnref();
} else { // save dialog cancelled or save failed
- sp_document_unref(doc);
+ doc->doUnref();
return TRUE;
}
@@ -1575,7 +1575,7 @@ bool SPDesktopWidget::onFocusInEvent(GdkEventFocus*)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (prefs->getBool("/options/bitmapautoreload/value", true)) {
- GSList const *imageList = sp_document_get_resource_list(desktop->doc(), "image");
+ GSList const *imageList = (desktop->doc())->getResourceList("image");
for (GSList const *p = imageList; p; p = p->next) {
SPImage* image = SP_IMAGE(p->data);
sp_image_refresh_if_outdated( image );
@@ -1837,11 +1837,11 @@ sp_desktop_widget_update_scrollbars (SPDesktopWidget *dtw, double scale)
/* The desktop region we always show unconditionally */
SPDocument *doc = dtw->desktop->doc();
- Geom::Rect darea ( Geom::Point(-sp_document_width(doc), -sp_document_height(doc)),
- Geom::Point(2 * sp_document_width(doc), 2 * sp_document_height(doc)) );
+ Geom::Rect darea ( Geom::Point(-doc->getWidth(), -doc->getHeight()),
+ Geom::Point(2 * doc->getWidth(), 2 * doc->getHeight()) );
SPObject* root = doc->root;
SPItem* item = SP_ITEM(root);
- Geom::OptRect deskarea = Geom::unify(darea, sp_item_bbox_desktop(item));
+ Geom::OptRect deskarea = Geom::unify(darea, item->getBboxDesktop());
/* Canvas region we always show unconditionally */
Geom::Rect carea( Geom::Point(deskarea->min()[Geom::X] * scale - 64, deskarea->max()[Geom::Y] * -scale - 64),
diff --git a/src/widgets/desktop-widget.h b/src/widgets/desktop-widget.h
index 33f2a6ae7..4edd434af 100644
--- a/src/widgets/desktop-widget.h
+++ b/src/widgets/desktop-widget.h
@@ -8,6 +8,7 @@
* Jon A. Cruz <jon@joncruz.org> (c) 2010
* John Bintz <jcoswell@coswellproductions.org> (c) 2006
* Ralf Stephan <ralf@ark.in-berlin.de> (c) 2005, distrib. under GPL2
+ * Abhishek Sharma
* ? -2004
*/
@@ -17,6 +18,7 @@
#include "display/display-forward.h"
#include "libnr/nr-point.h"
#include "forward.h"
+#include "sp-object.h"
#include "message.h"
#include "ui/view/view-widget.h"
#include "ui/view/edit-widget-interface.h"
diff --git a/src/widgets/ege-paint-def.cpp b/src/widgets/ege-paint-def.cpp
index cab675b29..2fc6927df 100644
--- a/src/widgets/ege-paint-def.cpp
+++ b/src/widgets/ege-paint-def.cpp
@@ -50,6 +50,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
+#include <glibmm/stringutils.h>
#if !defined(_)
#define _(s) gettext(s)
@@ -64,8 +65,6 @@ static std::string mimeTEXT("text/plain");
static std::string mimeX_COLOR("application/x-color");
static std::string mimeOSWB_COLOR("application/x-oswb-color");
-static std::string doubleToStr(double d);
-
PaintDef::PaintDef() :
descr(_("none")),
type(NONE),
@@ -183,11 +182,11 @@ void PaintDef::getMIMEData(std::string const & type, char*& dest, int& len, int&
{
tmp += std::string("<color name=\"") + descr + "\">";
tmp += "<sRGB r=\"";
- tmp += doubleToStr(getR()/255.0);
+ tmp += Glib::Ascii::dtostr(getR()/255.0);
tmp += "\" g=\"";
- tmp += doubleToStr(getG()/255.0);
+ tmp += Glib::Ascii::dtostr(getG()/255.0);
tmp += "\" b=\"";
- tmp += doubleToStr(getB()/255.0);
+ tmp += Glib::Ascii::dtostr(getB()/255.0);
tmp += "\"/>";
tmp += "</color>";
}
@@ -233,20 +232,17 @@ bool PaintDef::fromMIMEData(std::string const & type, char const * data, int len
this->type = ege::PaintDef::RGB;
size_t numPos = srgb.find("r=");
if (numPos != std::string::npos) {
- char* endPtr = 0;
- double dbl = strtod(srgb.c_str() + numPos + 3, &endPtr);
+ double dbl = Glib::Ascii::strtod(srgb.substr(numPos + 3));
this->r = static_cast<int>(255 * dbl);
}
numPos = srgb.find("g=");
if (numPos != std::string::npos) {
- char* endPtr = 0;
- double dbl = strtod(srgb.c_str() + numPos + 3, &endPtr);
+ double dbl = Glib::Ascii::strtod(srgb.substr(numPos + 3));
this->g = static_cast<int>(255 * dbl);
}
numPos = srgb.find("b=");
if (numPos != std::string::npos) {
- char* endPtr = 0;
- double dbl = strtod(srgb.c_str() + numPos + 3, &endPtr);
+ double dbl = Glib::Ascii::strtod(srgb.substr(numPos + 3));
this->b = static_cast<int>(255 * dbl);
}
@@ -307,13 +303,6 @@ void PaintDef::removeCallback( ColorCallback /*cb*/, void* /*data*/ )
{
}
-static std::string doubleToStr(double d)
-{
- // TODO ensure "." is used for decimal separator.
- std::stringstream out;
- out << d;
- return out.str();
-}
} // namespace ege
diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp
index b70c8f47d..b4272a3a4 100644
--- a/src/widgets/fill-style.cpp
+++ b/src/widgets/fill-style.cpp
@@ -6,6 +6,7 @@
* Frank Felfe <innerspace@iname.com>
* bulia byak <buliabyak@users.sf.net>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 1999-2005 authors
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -332,8 +333,8 @@ void FillNStroke::setFillrule( SPPaintSelector::FillRule mode )
sp_repr_css_attr_unref(css);
css = 0;
- sp_document_done(desktop->doc(), SP_VERB_DIALOG_FILL_STROKE,
- _("Change fill rule"));
+ DocumentUndo::done(desktop->doc(), SP_VERB_DIALOG_FILL_STROKE,
+ _("Change fill rule"));
}
}
@@ -417,8 +418,8 @@ void FillNStroke::dragFromPaint()
// local change, do not update from selection
dragId = g_timeout_add_full(G_PRIORITY_DEFAULT, 100, dragDelayCB, this, 0);
psel->setFlatColor( desktop, (kind == FILL) ? "fill" : "stroke", (kind == FILL) ? "fill-opacity" : "stroke-opacity" );
- sp_document_maybe_done(desktop->doc(), (kind == FILL) ? undo_F_label : undo_S_label, SP_VERB_DIALOG_FILL_STROKE,
- (kind == FILL) ? _("Set fill color") : _("Set stroke color"));
+ DocumentUndo::maybeDone(desktop->doc(), (kind == FILL) ? undo_F_label : undo_S_label, SP_VERB_DIALOG_FILL_STROKE,
+ (kind == FILL) ? _("Set fill color") : _("Set stroke color"));
break;
}
@@ -480,8 +481,8 @@ void FillNStroke::updateFromPaint()
sp_repr_css_attr_unref(css);
css = 0;
- sp_document_done(document, SP_VERB_DIALOG_FILL_STROKE,
- (kind == FILL) ? _("Remove fill") : _("Remove stroke"));
+ DocumentUndo::done(document, SP_VERB_DIALOG_FILL_STROKE,
+ (kind == FILL) ? _("Remove fill") : _("Remove stroke"));
break;
}
@@ -496,8 +497,8 @@ void FillNStroke::updateFromPaint()
psel->setFlatColor( desktop,
(kind == FILL) ? "fill" : "stroke",
(kind == FILL) ? "fill-opacity" : "stroke-opacity" );
- sp_document_maybe_done(sp_desktop_document(desktop), (kind == FILL) ? undo_F_label : undo_S_label, SP_VERB_DIALOG_FILL_STROKE,
- (kind == FILL) ? _("Set fill color") : _("Set stroke color"));
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), (kind == FILL) ? undo_F_label : undo_S_label, SP_VERB_DIALOG_FILL_STROKE,
+ (kind == FILL) ? _("Set fill color") : _("Set stroke color"));
if (kind == FILL) {
// resume interruptibility
@@ -556,7 +557,7 @@ void FillNStroke::updateFromPaint()
for (GSList const *i = items; i != NULL; i = i->next) {
//FIXME: see above
if (kind == FILL) {
- sp_repr_css_change_recursive(reinterpret_cast<SPObject*>(i->data)->repr, css, "style");
+ sp_repr_css_change_recursive(reinterpret_cast<SPObject*>(i->data)->getRepr(), css, "style");
}
if (!vector) {
@@ -578,7 +579,7 @@ void FillNStroke::updateFromPaint()
for (GSList const *i = items; i != NULL; i = i->next) {
//FIXME: see above
if (kind == FILL) {
- sp_repr_css_change_recursive(reinterpret_cast<SPObject*>(i->data)->repr, css, "style");
+ sp_repr_css_change_recursive(reinterpret_cast<SPObject*>(i->data)->getRepr(), css, "style");
}
SPGradient *gr = sp_item_set_gradient(SP_ITEM(i->data), vector, gradient_type, kind == FILL);
@@ -591,8 +592,8 @@ void FillNStroke::updateFromPaint()
css = 0;
}
- sp_document_done(document, SP_VERB_DIALOG_FILL_STROKE,
- (kind == FILL) ? _("Set gradient on fill") : _("Set gradient on stroke"));
+ DocumentUndo::done(document, SP_VERB_DIALOG_FILL_STROKE,
+ (kind == FILL) ? _("Set gradient on fill") : _("Set gradient on stroke"));
}
break;
@@ -608,7 +609,7 @@ void FillNStroke::updateFromPaint()
*/
} else {
- Inkscape::XML::Node *patrepr = pattern->repr;
+ Inkscape::XML::Node *patrepr = pattern->getRepr();
SPCSSAttr *css = sp_repr_css_attr_new();
gchar *urltext = g_strdup_printf("url(#%s)", patrepr->attribute("id"));
sp_repr_css_set_property(css, (kind == FILL) ? "fill" : "stroke", urltext);
@@ -622,7 +623,7 @@ void FillNStroke::updateFromPaint()
// objects who already have the same root pattern but through a different href
// chain. FIXME: move this to a sp_item_set_pattern
for (GSList const *i = items; i != NULL; i = i->next) {
- Inkscape::XML::Node *selrepr = reinterpret_cast<SPObject*>(i->data)->repr;
+ Inkscape::XML::Node *selrepr = reinterpret_cast<SPObject*>(i->data)->getRepr();
if ( (kind == STROKE) && !selrepr) {
continue;
}
@@ -651,9 +652,9 @@ void FillNStroke::updateFromPaint()
} // end if
- sp_document_done(document, SP_VERB_DIALOG_FILL_STROKE,
- (kind == FILL) ? _("Set pattern on fill") :
- _("Set pattern on stroke"));
+ DocumentUndo::done(document, SP_VERB_DIALOG_FILL_STROKE,
+ (kind == FILL) ? _("Set pattern on fill") :
+ _("Set pattern on stroke"));
} // end if
break;
@@ -678,8 +679,8 @@ void FillNStroke::updateFromPaint()
sp_repr_css_attr_unref(css);
css = 0;
- sp_document_done(document, SP_VERB_DIALOG_FILL_STROKE,
- (kind == FILL) ? _("Unset fill") : _("Unset stroke"));
+ DocumentUndo::done(document, SP_VERB_DIALOG_FILL_STROKE,
+ (kind == FILL) ? _("Unset fill") : _("Unset stroke"));
}
break;
diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp
index 5b663c493..49549de1c 100644
--- a/src/widgets/gradient-selector.cpp
+++ b/src/widgets/gradient-selector.cpp
@@ -340,7 +340,7 @@ sp_gradient_selector_add_vector_clicked (GtkWidget */*w*/, SPGradientSelector *s
SPGradient *gr = sp_gradient_vector_selector_get_gradient(
SP_GRADIENT_VECTOR_SELECTOR (sel->vectors));
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc);
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
Inkscape::XML::Node *repr = NULL;
diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp
index ce5f5fb8f..e7596ead4 100644
--- a/src/widgets/gradient-toolbar.cpp
+++ b/src/widgets/gradient-toolbar.cpp
@@ -4,6 +4,7 @@
* Authors:
* bulia byak <bulia@dr.com>
* Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
+ * Abhishek Sharma
*
* Copyright (C) 2007 Johan Engelen
* Copyright (C) 2005 authors
@@ -42,6 +43,7 @@
#include "toolbox.h"
+using Inkscape::DocumentUndo;
//########################
//## Gradient ##
@@ -150,8 +152,8 @@ gr_item_activate (GtkMenuItem *menuitem, gpointer data)
gr_apply_gradient (selection, ev? ev->get_drag() : NULL, gr);
- sp_document_done (sp_desktop_document (desktop), SP_VERB_CONTEXT_GRADIENT,
- _("Assign gradient to object"));
+ DocumentUndo::done(sp_desktop_document (desktop), SP_VERB_CONTEXT_GRADIENT,
+ _("Assign gradient to object"));
}
gchar *
@@ -171,7 +173,7 @@ GtkWidget *gr_vector_list(SPDesktop *desktop, bool selection_empty, SPGradient *
GtkWidget *m = gtk_menu_new ();
GSList *gl = NULL;
- const GSList *gradients = sp_document_get_resource_list (document, "gradient");
+ const GSList *gradients = document->getResourceList("gradient");
for (const GSList *i = gradients; i != NULL; i = i->next) {
SPGradient *grad = SP_GRADIENT(i->data);
if ( grad->hasStops() && !grad->isSolid() ) {
diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp
index 06ba7b908..dbb934fb1 100644
--- a/src/widgets/gradient-vector.cpp
+++ b/src/widgets/gradient-vector.cpp
@@ -6,6 +6,7 @@
* bulia byak <buliabyak@users.sf.net>
* MenTaLguY <mental@rydia.net>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2001-2002 Lauris Kaplinski
* Copyright (C) 2001 Ximian, Inc.
@@ -43,6 +44,8 @@
#include <sigc++/functors/ptr_fun.h>
#include <sigc++/adaptors/bind.h>
+using Inkscape::DocumentUndo;
+
enum {
VECTOR_SET,
LAST_SIGNAL
@@ -253,7 +256,7 @@ static void sp_gvs_rebuild_gui_full(SPGradientVectorSelector *gvs)
/* Pick up all gradients with vectors */
GSList *gl = NULL;
if (gvs->gr) {
- const GSList *gradients = sp_document_get_resource_list(SP_OBJECT_DOCUMENT(gvs->gr), "gradient");
+ const GSList *gradients = SP_OBJECT_DOCUMENT(gvs->gr)->getResourceList("gradient");
for (const GSList *curr = gradients; curr; curr = curr->next) {
SPGradient* grad = SP_GRADIENT(curr->data);
if ( grad->hasStops() && (grad->isSwatch() == gvs->swatched) ) {
@@ -340,12 +343,12 @@ static void sp_gvs_gradient_activate(GtkMenuItem *mi, SPGradientVectorSelector *
/* Namely - menuitems etc. will be fucked up */
/* Hmmm - probably we can just re-set it as menuitem data (Lauris) */
- //g_print("SPGradientVectorSelector: gradient %s activated\n", SP_OBJECT_ID(gr));
+ //g_print("SPGradientVectorSelector: gradient %s activated\n", gr->getId());
//g_message("Setting to gradient %p swatch:%d solid:%d", gr, gr->isSwatch(), gr->isSolid());
norm = sp_gradient_ensure_vector_normalized(gr);
if (norm != gr) {
- //g_print("SPGradientVectorSelector: become %s after normalization\n", SP_OBJECT_ID(norm));
+ //g_print("SPGradientVectorSelector: become %s after normalization\n", norm->getId());
/* But be careful that we do not have gradient saved anywhere else */
g_object_set_data(G_OBJECT(mi), "gradient", norm);
}
@@ -368,8 +371,8 @@ static void sp_gvs_gradient_activate(GtkMenuItem *mi, SPGradientVectorSelector *
/* We do extra undo push here */
/* If handler has already done it, it is just NOP */
// FIXME: looks like this is never a valid undo step, consider removing this
- sp_document_done(SP_OBJECT_DOCUMENT(norm), SP_VERB_CONTEXT_GRADIENT,
- /* TODO: annotate */ "gradient-vector.cpp:350");
+ DocumentUndo::done(SP_OBJECT_DOCUMENT(norm), SP_VERB_CONTEXT_GRADIENT,
+ /* TODO: annotate */ "gradient-vector.cpp:350");
}
}
@@ -468,7 +471,7 @@ static void verify_grad(SPGradient *gradient)
int i = 0;
SPStop *stop = NULL;
/* count stops */
- for ( SPObject *ochild = sp_object_first_child(SP_OBJECT(gradient)) ; ochild != NULL ; ochild = SP_OBJECT_NEXT(ochild) ) {
+ for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) {
if (SP_IS_STOP(ochild)) {
i++;
stop = SP_STOP(ochild);
@@ -508,7 +511,7 @@ static void verify_grad(SPGradient *gradient)
static void select_stop_in_list( GtkWidget *mnu, SPGradient *gradient, SPStop *new_stop)
{
int i = 0;
- for ( SPObject *ochild = sp_object_first_child(SP_OBJECT(gradient)) ; ochild != NULL ; ochild = SP_OBJECT_NEXT(ochild) ) {
+ for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) {
if (SP_IS_STOP(ochild)) {
if (SP_OBJECT(ochild) == SP_OBJECT(new_stop)) {
gtk_option_menu_set_history(GTK_OPTION_MENU(mnu), i);
@@ -538,7 +541,7 @@ static void update_stop_list( GtkWidget *mnu, SPGradient *gradient, SPStop *new_
gtk_widget_show(m);
GSList *sl = NULL;
if ( gradient->hasStops() ) {
- for ( SPObject *ochild = sp_object_first_child(SP_OBJECT(gradient)) ; ochild != NULL ; ochild = SP_OBJECT_NEXT(ochild) ) {
+ for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) {
if (SP_IS_STOP(ochild)) {
sl = g_slist_append(sl, ochild);
}
@@ -659,8 +662,8 @@ static void offadjustmentChanged( GtkAdjustment *adjustment, GtkWidget *vb)
stop->offset = adjustment->value;
sp_repr_set_css_double(SP_OBJECT_REPR(stop), "offset", stop->offset);
- sp_document_maybe_done(SP_OBJECT_DOCUMENT(stop), "gradient:stop:offset", SP_VERB_CONTEXT_GRADIENT,
- _("Change gradient stop offset"));
+ DocumentUndo::maybeDone(SP_OBJECT_DOCUMENT(stop), "gradient:stop:offset", SP_VERB_CONTEXT_GRADIENT,
+ _("Change gradient stop offset"));
blocked = FALSE;
}
@@ -734,8 +737,8 @@ static void sp_grd_ed_add_stop(GtkWidget */*widget*/, GtkWidget *vb)
GtkWidget *offslide =GTK_WIDGET(g_object_get_data(G_OBJECT(vb), "offslide"));
gtk_widget_set_sensitive(offslide, TRUE);
gtk_widget_set_sensitive(GTK_WIDGET(offspin), TRUE);
- sp_document_done(SP_OBJECT_DOCUMENT(gradient), SP_VERB_CONTEXT_GRADIENT,
- _("Add gradient stop"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT(gradient), SP_VERB_CONTEXT_GRADIENT,
+ _("Add gradient stop"));
}
static void sp_grd_ed_del_stop(GtkWidget */*widget*/, GtkWidget *vb)
@@ -765,8 +768,8 @@ static void sp_grd_ed_del_stop(GtkWidget */*widget*/, GtkWidget *vb)
SP_OBJECT_REPR(gradient)->removeChild(SP_OBJECT_REPR(stop));
sp_gradient_vector_widget_load_gradient(vb, gradient);
update_stop_list(GTK_WIDGET(mnu), gradient, NULL);
- sp_document_done(SP_OBJECT_DOCUMENT(gradient), SP_VERB_CONTEXT_GRADIENT,
- _("Delete gradient stop"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT(gradient), SP_VERB_CONTEXT_GRADIENT,
+ _("Delete gradient stop"));
}
}
@@ -1031,10 +1034,10 @@ static void sp_gradient_vector_widget_load_gradient(GtkWidget *widget, SPGradien
// Once the user edits a gradient, it stops being auto-collectable
if (SP_OBJECT_REPR(gradient)->attribute("inkscape:collect")) {
SPDocument *document = SP_OBJECT_DOCUMENT(gradient);
- bool saved = sp_document_get_undo_sensitive(document);
- sp_document_set_undo_sensitive(document, false);
+ bool saved = DocumentUndo::getUndoSensitive(document);
+ DocumentUndo::setUndoSensitive(document, false);
SP_OBJECT_REPR(gradient)->setAttribute("inkscape:collect", NULL);
- sp_document_set_undo_sensitive(document, saved);
+ DocumentUndo::setUndoSensitive(document, saved);
}
} else { // no gradient, disable everything
gtk_widget_set_sensitive(widget, FALSE);
@@ -1183,8 +1186,8 @@ static void sp_gradient_vector_color_changed(SPColorSelector *csel, GtkObject *o
// g_snprintf(c, 256, "stop-color:#%06x;stop-opacity:%g;", rgb >> 8, static_cast<gdouble>(alpha));
//SP_OBJECT_REPR(stop)->setAttribute("style", c);
- sp_document_done(SP_OBJECT_DOCUMENT(ngr), SP_VERB_CONTEXT_GRADIENT,
- _("Change gradient stop color"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT(ngr), SP_VERB_CONTEXT_GRADIENT,
+ _("Change gradient stop color"));
blocked = FALSE;
diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp
index d039dd2de..1b6878c32 100644
--- a/src/widgets/icon.cpp
+++ b/src/widgets/icon.cpp
@@ -5,6 +5,7 @@
* Author:
* Lauris Kaplinski <lauris@kaplinski.com>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2002 Lauris Kaplinski
*
@@ -220,7 +221,7 @@ void sp_icon_fetch_pixbuf( SPIcon *icon )
}
}
-static GdkPixbuf* renderup( gchar const* name, Inkscape::IconSize lsize, unsigned psize ) {
+GdkPixbuf* renderup( gchar const* name, Inkscape::IconSize lsize, unsigned psize ) {
GtkIconTheme *theme = gtk_icon_theme_get_default();
GdkPixbuf *pb = 0;
@@ -920,13 +921,13 @@ sp_icon_doc_icon( SPDocument *doc, NRArenaItem *root,
SPObject *object = doc->getObjectById(name);
if (object && SP_IS_ITEM(object)) {
/* Find bbox in document */
- Geom::Matrix const i2doc(sp_item_i2doc_affine(SP_ITEM(object)));
+ Geom::Matrix const i2doc(SP_ITEM(object)->i2doc_affine());
Geom::OptRect dbox = SP_ITEM(object)->getBounds(i2doc);
if ( SP_OBJECT_PARENT(object) == NULL )
{
dbox = Geom::Rect(Geom::Point(0, 0),
- Geom::Point(sp_document_width(doc), sp_document_height(doc)));
+ Geom::Point(doc->getWidth(), doc->getHeight()));
}
/* This is in document coordinates, i.e. pixels */
@@ -1113,15 +1114,15 @@ static guchar *load_svg_pixels(gchar const *name, unsigned psize, unsigned &stri
/* Try to load from document. */
if (!info &&
Inkscape::IO::file_test( doc_filename, G_FILE_TEST_IS_REGULAR ) &&
- (doc = sp_document_new( doc_filename, FALSE )) ) {
+ (doc = SPDocument::createNewDoc( doc_filename, FALSE )) ) {
//g_message("Loaded icon file %s", doc_filename);
// prep the document
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
/* Create new arena */
NRArena *arena = NRArena::create();
/* Create ArenaItem and set transform */
- unsigned visionkey = sp_item_display_key_new(1);
+ unsigned visionkey = SPItem::display_key_new(1);
/* fixme: Memory manage root if needed (Lauris) */
// This needs to be fixed indeed; this leads to a memory leak of a few megabytes these days
// because shapes are being rendered which are not being freed
@@ -1143,8 +1144,7 @@ static guchar *load_svg_pixels(gchar const *name, unsigned psize, unsigned &stri
==7014== by 0x5E9DDE: nr_arena_group_render(_cairo*, NRArenaItem*, NRRectL*, NRPixBlock*, unsigned int) (nr-arena-group.cpp:228)
==7014== by 0x5E72FB: nr_arena_item_invoke_render(_cairo*, NRArenaItem*, NRRectL const*, NRPixBlock*, unsigned int) (nr-arena-item.cpp:578)
*/
- root = sp_item_invoke_show( SP_ITEM(SP_DOCUMENT_ROOT(doc)),
- arena, visionkey, SP_ITEM_SHOW_DISPLAY );
+ root = SP_ITEM(doc->getRoot())->invoke_show(arena, visionkey, SP_ITEM_SHOW_DISPLAY );
// store into the cache
info = new svg_doc_cache_t;
@@ -1192,7 +1192,8 @@ void Inkscape::queueIconPrerender( Glib::ustring const &name, Inkscape::IconSize
{
GtkStockItem stock;
gboolean stockFound = gtk_stock_lookup( name.c_str(), &stock );
- if (!stockFound && !gtk_icon_theme_has_icon(gtk_icon_theme_get_default(), name.c_str()) ) {
+ gboolean themedFound = gtk_icon_theme_has_icon(gtk_icon_theme_get_default(), name.c_str());
+ if (!stockFound && !themedFound ) {
gint trySize = CLAMP( static_cast<gint>(lsize), 0, static_cast<gint>(G_N_ELEMENTS(iconSizeLookup) - 1) );
if ( !sizeMapDone ) {
injectCustomSize();
@@ -1359,7 +1360,9 @@ static void addPreRender( GtkIconSize lsize, gchar const *name )
}
gboolean icon_prerender_task(gpointer /*data*/) {
- if (!pendingRenders.empty()) {
+ if ( inkscapeIsCrashing() ) {
+ // stop
+ } else if (!pendingRenders.empty()) {
bool workDone = false;
do {
preRenderItem single = pendingRenders.front();
@@ -1369,7 +1372,7 @@ gboolean icon_prerender_task(gpointer /*data*/) {
} while (!pendingRenders.empty() && !workDone);
}
- if (!pendingRenders.empty()) {
+ if (!inkscapeIsCrashing() && !pendingRenders.empty()) {
return TRUE;
} else {
callbackHooked = false;
diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp
index a7bed9e94..1d8acb40a 100644
--- a/src/widgets/paint-selector.cpp
+++ b/src/widgets/paint-selector.cpp
@@ -8,6 +8,7 @@
* bulia byak <buliabyak@users.sf.net>
* John Cliff <simarilius@yahoo.com>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) Lauris Kaplinski 2002
* Copyright (C) 2010 Authors
@@ -784,7 +785,7 @@ ink_pattern_list_get (SPDocument *source)
return NULL;
GSList *pl = NULL;
- GSList const *patterns = sp_document_get_resource_list(source, "pattern");
+ GSList const *patterns = source->getResourceList("pattern");
for (GSList *l = (GSList *) patterns; l != NULL; l = l->next) {
if (SP_PATTERN(l->data) == pattern_getroot(SP_PATTERN(l->data))) { // only if this is a root pattern
pl = g_slist_prepend(pl, l->data);
@@ -875,7 +876,7 @@ ink_pattern_menu_populate_menu(GtkWidget *m, SPDocument *doc)
if (patterns_doc == NULL) {
char *patterns_source = g_build_filename(INKSCAPE_PATTERNSDIR, "patterns.svg", NULL);
if (Inkscape::IO::file_test(patterns_source, G_FILE_TEST_IS_REGULAR)) {
- patterns_doc = sp_document_new(patterns_source, FALSE);
+ patterns_doc = SPDocument::createNewDoc(patterns_source, FALSE);
}
g_free(patterns_source);
}
@@ -894,7 +895,7 @@ ink_pattern_menu_populate_menu(GtkWidget *m, SPDocument *doc)
// suck in from patterns.svg
if (patterns_doc) {
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
sp_pattern_list_from_doc ( m, doc, patterns_doc, NULL );
}
diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp
index ed54857f8..a0ec248ca 100644
--- a/src/widgets/select-toolbar.cpp
+++ b/src/widgets/select-toolbar.cpp
@@ -5,6 +5,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* bulia byak <buliabyak@users.sf.net>
* Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2003-2005 authors
*
@@ -52,6 +53,7 @@
#include "ui/icon-names.h"
using Inkscape::UnitTracker;
+using Inkscape::DocumentUndo;
static void
sp_selection_layout_widget_update(SPWidget *spw, Inkscape::Selection *sel)
@@ -155,7 +157,7 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, SPWidget *spw)
Inkscape::Selection *selection = sp_desktop_selection(desktop);
SPDocument *document = sp_desktop_document(desktop);
- sp_document_ensure_up_to_date (document);
+ document->ensureUpToDate ();
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
int prefs_bbox = prefs->getInt("/tools/bounding_box");
SPItem::BBoxType bbox_type = (prefs_bbox ==0)?
@@ -243,7 +245,7 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, SPWidget *spw)
Geom::Matrix scaler = get_scale_transform_with_stroke (*bbox, strokewidth, transform_stroke, x0, y0, x1, y1);
sp_selection_apply_affine(selection, scaler);
- sp_document_maybe_done (document, actionkey, SP_VERB_CONTEXT_SELECT,
+ DocumentUndo::maybeDone(document, actionkey, SP_VERB_CONTEXT_SELECT,
_("Transform by toolbar"));
// resume interruptibility
diff --git a/src/widgets/sp-attribute-widget.cpp b/src/widgets/sp-attribute-widget.cpp
index 3473d8f31..0c31c2f74 100644
--- a/src/widgets/sp-attribute-widget.cpp
+++ b/src/widgets/sp-attribute-widget.cpp
@@ -3,6 +3,7 @@
*/
/* Authors:
* Lauris Kaplinski <lauris@ximian.com>
+ * Abhishek Sharma
*
* Copyright (C) 2001 Ximian, Inc.
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -21,6 +22,8 @@
#include "sp-attribute-widget.h"
+using Inkscape::DocumentUndo;
+
static void sp_attribute_widget_class_init (SPAttributeWidgetClass *klass);
static void sp_attribute_widget_init (SPAttributeWidget *widget);
static void sp_attribute_widget_destroy (GtkObject *object);
@@ -154,8 +157,8 @@ sp_attribute_widget_changed (GtkEditable *editable)
if (spaw->hasobj && spaw->src.object) {
SP_OBJECT_REPR (spaw->src.object)->setAttribute(spaw->attribute, text, false);
- sp_document_done (SP_OBJECT_DOCUMENT (spaw->src.object), SP_VERB_NONE,
- _("Set attribute"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT (spaw->src.object), SP_VERB_NONE,
+ _("Set attribute"));
} else if (spaw->src.repr) {
@@ -761,8 +764,8 @@ sp_attribute_table_entry_changed ( GtkEditable *editable,
if (spat->hasobj && spat->src.object) {
SP_OBJECT_REPR (spat->src.object)->setAttribute(spat->attributes[i], text, false);
- sp_document_done (SP_OBJECT_DOCUMENT (spat->src.object), SP_VERB_NONE,
- _("Set attribute"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT (spat->src.object), SP_VERB_NONE,
+ _("Set attribute"));
} else if (spat->src.repr) {
diff --git a/src/widgets/sp-color-icc-selector.cpp b/src/widgets/sp-color-icc-selector.cpp
index 4b565d1a3..12467041c 100644
--- a/src/widgets/sp-color-icc-selector.cpp
+++ b/src/widgets/sp-color-icc-selector.cpp
@@ -581,7 +581,7 @@ void ColorICCSelector::_profilesChanged( std::string const & name )
gtk_combo_box_set_active( combo, 0 );
int index = 1;
- const GSList *current = sp_document_get_resource_list( SP_ACTIVE_DOCUMENT, "iccprofile" );
+ const GSList *current = SP_ACTIVE_DOCUMENT->getResourceList( "iccprofile" );
while ( current ) {
SPObject* obj = SP_OBJECT(current->data);
Inkscape::ColorProfile* prof = reinterpret_cast<Inkscape::ColorProfile*>(obj);
diff --git a/src/widgets/sp-color-wheel-selector.cpp b/src/widgets/sp-color-wheel-selector.cpp
index 5ba2c347b..2e36a024e 100644
--- a/src/widgets/sp-color-wheel-selector.cpp
+++ b/src/widgets/sp-color-wheel-selector.cpp
@@ -108,6 +108,47 @@ void sp_color_wheel_selector_init (SPColorWheelSelector *cs)
}
}
+static void resizeHSVWheel( GtkHSV *hsv, GtkAllocation *allocation )
+{
+ gint diam = std::min(allocation->width, allocation->height);
+
+ // drop a little for resizing
+ diam -= 4;
+
+ GtkStyle *style = gtk_widget_get_style( GTK_WIDGET(hsv) );
+ if ( style ) {
+ gint thick = std::max(style->xthickness, style->ythickness);
+ if (thick > 0) {
+ diam -= thick * 2;
+ }
+ }
+ gint padding = -1;
+ gtk_widget_style_get( GTK_WIDGET(hsv),
+ "focus-padding", &padding,
+ NULL );
+ if (padding > 0) {
+ diam -= padding * 2;
+ }
+
+ diam = std::max(20, diam);
+ gint ring = static_cast<gint>( static_cast<gdouble>(diam) / (4.0 * 1.618) );
+ gtk_hsv_set_metrics( hsv, diam, ring );
+}
+
+#if GTK_CHECK_VERSION(2,18,0)
+static void handleWheelStyleSet(GtkHSV *hsv, GtkStyle* /*previous*/, gpointer /*userData*/)
+{
+ GtkAllocation allocation = {0, 0, 0, 0};
+ gtk_widget_get_allocation( GTK_WIDGET(hsv), &allocation );
+ resizeHSVWheel( hsv, &allocation );
+}
+#endif // GTK_CHECK_VERSION(2,18,0)
+
+static void handleWheelAllocation(GtkHSV *hsv, GtkAllocation *allocation, gpointer /*userData*/)
+{
+ resizeHSVWheel( hsv, allocation );
+}
+
void ColorWheelSelector::init()
{
GtkWidget *t;
@@ -125,9 +166,10 @@ void ColorWheelSelector::init()
/* Create components */
row = 0;
- _wheel = sp_color_wheel_new ();
- gtk_widget_show (_wheel);
- gtk_table_attach (GTK_TABLE (t), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), XPAD, YPAD);
+ _wheel = gtk_hsv_new();
+ gtk_hsv_set_metrics( GTK_HSV(_wheel), 48, 8 );
+ gtk_widget_show( _wheel );
+ gtk_table_attach( GTK_TABLE(t), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), XPAD, YPAD);
row++;
@@ -171,8 +213,17 @@ void ColorWheelSelector::init()
gtk_signal_connect (GTK_OBJECT (_slider), "changed",
GTK_SIGNAL_FUNC (_sliderChanged), _csel);
- gtk_signal_connect (GTK_OBJECT(_wheel), "changed",
- GTK_SIGNAL_FUNC (_wheelChanged), _csel);
+ gtk_signal_connect( GTK_OBJECT(_wheel), "changed",
+ GTK_SIGNAL_FUNC(_wheelChanged), _csel );
+
+
+ // GTK does not automatically scale the color wheel, so we have to add that in:
+ gtk_signal_connect( GTK_OBJECT(_wheel), "size-allocate",
+ GTK_SIGNAL_FUNC(handleWheelAllocation), _csel );
+#if GTK_CHECK_VERSION(2,18,0)
+ gtk_signal_connect( GTK_OBJECT(_wheel), "style-set",
+ GTK_SIGNAL_FUNC(handleWheelStyleSet), _csel );
+#endif // GTK_CHECK_VERSION(2,18,0)
}
static void
@@ -217,7 +268,13 @@ void ColorWheelSelector::_colorChanged()
g_message("ColorWheelSelector::_colorChanged( this=%p, %f, %f, %f, %f)", this, color.v.c[0], color.v.c[1], color.v.c[2], alpha );
#endif
_updating = TRUE;
- sp_color_wheel_set_color( SP_COLOR_WHEEL( _wheel ), &_color );
+ {
+ gdouble h = 0;
+ gdouble s = 0;
+ gdouble v = 0;
+ gtk_rgb_to_hsv( _color.v.c[0], _color.v.c[1], _color.v.c[2], &h, &s, &v );
+ gtk_hsv_set_color( GTK_HSV(_wheel), h, s, v );
+ }
guint32 start = _color.toRGBA32( 0x00 );
guint32 mid = _color.toRGBA32( 0x7f );
@@ -284,12 +341,21 @@ void ColorWheelSelector::_sliderChanged( SPColorSlider *slider, SPColorWheelSele
wheelSelector->_updateInternals( wheelSelector->_color, ColorScales::getScaled( wheelSelector->_adj ), wheelSelector->_dragging );
}
-void ColorWheelSelector::_wheelChanged( SPColorWheel *wheel, SPColorWheelSelector *cs )
+void ColorWheelSelector::_wheelChanged( GtkHSV *hsv, SPColorWheelSelector *cs )
{
- ColorWheelSelector* wheelSelector = (ColorWheelSelector*)(SP_COLOR_SELECTOR(cs)->base);
- SPColor color;
+ ColorWheelSelector* wheelSelector = static_cast<ColorWheelSelector*>(SP_COLOR_SELECTOR(cs)->base);
+
+ gdouble h = 0;
+ gdouble s = 0;
+ gdouble v = 0;
+ gtk_hsv_get_color( hsv, &h, &s, &v );
+
+ gdouble r = 0;
+ gdouble g = 0;
+ gdouble b = 0;
+ gtk_hsv_to_rgb(h, s, v, &r, &g, &b);
- sp_color_wheel_get_color( wheel, &color );
+ SPColor color(r, g, b);
guint32 start = color.toRGBA32( 0x00 );
guint32 mid = color.toRGBA32( 0x7f );
@@ -298,7 +364,7 @@ void ColorWheelSelector::_wheelChanged( SPColorWheel *wheel, SPColorWheelSelecto
sp_color_slider_set_colors (SP_COLOR_SLIDER(wheelSelector->_slider), start, mid, end);
preserve_icc(&color, cs);
- wheelSelector->_updateInternals( color, wheelSelector->_alpha, sp_color_wheel_is_adjusting( wheel ) );
+ wheelSelector->_updateInternals( color, wheelSelector->_alpha, gtk_hsv_is_adjusting( hsv ) );
}
diff --git a/src/widgets/sp-color-wheel-selector.h b/src/widgets/sp-color-wheel-selector.h
index 1adbb65a7..34a5f4cd0 100644
--- a/src/widgets/sp-color-wheel-selector.h
+++ b/src/widgets/sp-color-wheel-selector.h
@@ -6,16 +6,15 @@
#include <gtk/gtkvbox.h>
#include "../color.h"
-#include "sp-color-wheel.h"
#include "sp-color-slider.h"
#include "sp-color-selector.h"
+typedef struct _GtkHSV GtkHSV;
struct SPColorWheelSelector;
struct SPColorWheelSelectorClass;
-
class ColorWheelSelector: public ColorSelector
{
public:
@@ -32,7 +31,7 @@ protected:
static void _sliderGrabbed( SPColorSlider *slider, SPColorWheelSelector *cs );
static void _sliderReleased( SPColorSlider *slider, SPColorWheelSelector *cs );
static void _sliderChanged( SPColorSlider *slider, SPColorWheelSelector *cs );
- static void _wheelChanged( SPColorWheel* wheel, SPColorWheelSelector *cs );
+ static void _wheelChanged( GtkHSV *hsv, SPColorWheelSelector *cs );
static void _fooChanged( GtkWidget foo, SPColorWheelSelector *cs );
diff --git a/src/widgets/sp-color-wheel.cpp b/src/widgets/sp-color-wheel.cpp
deleted file mode 100644
index ade226c0f..000000000
--- a/src/widgets/sp-color-wheel.cpp
+++ /dev/null
@@ -1,1161 +0,0 @@
-#define __SP_COLOR_WHEEL_C__
-
-/*
- * A wheel color widget
- *
- * Authors:
- * Lauris Kaplinski <lauris@kaplinski.com>
- * Jon A. Cruz <jon@joncruz.org>
- * John Bintz <jcoswell@coswellproductions.org>
- *
- * Copyright (C) 2001-2002 Lauris Kaplinski
- * Copyright (C) 2003-2004 Authors
- *
- * This code is in public domain
- */
-
-#include <cstring>
-#include <string>
-
-#include <gtk/gtksignal.h>
-#include "sp-color-wheel.h"
-
-#include <2geom/transforms.h>
-
-#define WHEEL_SIZE 96
-
-enum {
- CHANGED,
- LAST_SIGNAL
-};
-
-#define noDUMP_CHANGE_INFO
-#define FOO_NAME(x) g_type_name( G_TYPE_FROM_INSTANCE(x) )
-
-static void sp_color_wheel_class_init (SPColorWheelClass *klass);
-static void sp_color_wheel_init (SPColorWheel *wheel);
-static void sp_color_wheel_destroy (GtkObject *object);
-
-static void sp_color_wheel_realize (GtkWidget *widget);
-static void sp_color_wheel_size_request (GtkWidget *widget, GtkRequisition *requisition);
-static void sp_color_wheel_size_allocate (GtkWidget *widget, GtkAllocation *allocation);
-
-static gint sp_color_wheel_expose (GtkWidget *widget, GdkEventExpose *event);
-static gint sp_color_wheel_button_press (GtkWidget *widget, GdkEventButton *event);
-static gint sp_color_wheel_button_release (GtkWidget *widget, GdkEventButton *event);
-static gint sp_color_wheel_motion_notify (GtkWidget *widget, GdkEventMotion *event);
-
-static void sp_color_wheel_set_hue(SPColorWheel *wheel, gdouble hue);
-static void sp_color_wheel_set_sv( SPColorWheel *wheel, gdouble sat, gdouble value );
-static void sp_color_wheel_recalc_triangle(SPColorWheel *wheel);
-
-static void sp_color_wheel_paint (SPColorWheel *wheel, GdkRectangle *area);
-static void sp_color_wheel_render_hue_wheel (SPColorWheel *wheel);
-static void sp_color_wheel_render_triangle (SPColorWheel *wheel);
-
-
-static gboolean sp_color_wheel_focus(GtkWidget *widget,
- GtkDirectionType direction);
-
-static void sp_color_wheel_process_in_triangle( SPColorWheel *wheel, gdouble x, gdouble y );
-
-static GtkWidgetClass *parent_class;
-static guint wheel_signals[LAST_SIGNAL] = {0};
-
-/*
-static double
-get_time (void)
-{
- GTimeVal tv;
- g_get_current_time (&tv);
- return tv.tv_sec + 1e-6 * tv.tv_usec;
-}
-*/
-
-GType sp_color_wheel_get_type(void)
-{
- static GType type = 0;
- if (!type) {
- GTypeInfo info = {
- sizeof(SPColorWheelClass),
- 0, // base_init
- 0, // base_finalize
- (GClassInitFunc)sp_color_wheel_class_init,
- 0, // class_finalize
- 0, // class_data
- sizeof(SPColorWheel),
- 0, // n_preallocs
- (GInstanceInitFunc)sp_color_wheel_init,
- 0 // value_table
- };
- type = g_type_register_static(GTK_TYPE_WIDGET, "SPColorWheel", &info, static_cast<GTypeFlags>(0));
- }
- return type;
-}
-
-static void
-sp_color_wheel_class_init (SPColorWheelClass *klass)
-{
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
-
- object_class = (GtkObjectClass *) klass;
- widget_class = (GtkWidgetClass *) klass;
-
- parent_class = (GtkWidgetClass*)gtk_type_class (GTK_TYPE_WIDGET);
-
- wheel_signals[CHANGED] = gtk_signal_new ("changed",
- (GtkSignalRunType)(GTK_RUN_FIRST | GTK_RUN_NO_RECURSE),
- GTK_CLASS_TYPE(object_class),
- GTK_SIGNAL_OFFSET (SPColorWheelClass, changed),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
-
- object_class->destroy = sp_color_wheel_destroy;
-
- widget_class->realize = sp_color_wheel_realize;
- widget_class->size_request = sp_color_wheel_size_request;
- widget_class->size_allocate = sp_color_wheel_size_allocate;
-
- widget_class->focus = sp_color_wheel_focus;
-
- widget_class->expose_event = sp_color_wheel_expose;
- widget_class->button_press_event = sp_color_wheel_button_press;
- widget_class->button_release_event = sp_color_wheel_button_release;
- widget_class->motion_notify_event = sp_color_wheel_motion_notify;
-}
-
-static void
-sp_color_wheel_init (SPColorWheel *wheel)
-{
- /* We are widget with window */
- GTK_WIDGET_UNSET_FLAGS (wheel, GTK_NO_WINDOW);
- GTK_WIDGET_SET_FLAGS (wheel, GTK_CAN_FOCUS );
-
- wheel->dragging = FALSE;
-
- wheel->_inTriangle = FALSE;
- wheel->_triDirty = TRUE;
- wheel->_triangle = NULL;
- for ( guint i = 0; i < G_N_ELEMENTS(wheel->_triPoints); i++ )
- {
- wheel->_triPoints[i].x = 0;
- wheel->_triPoints[i].y = 0;
- }
- wheel->_triImage = NULL;
- wheel->_triBs = 0;
-
- wheel->_image = NULL;
- wheel->_bs = 0;
- wheel->_hue = 0.0;
- wheel->_sat = 0.9;
- wheel->_value = 0.25;
- wheel->_inner = 0;
- wheel->_center = 0;
- wheel->_spotValue = 1.0;
-}
-
-static void
-sp_color_wheel_destroy (GtkObject *object)
-{
- SPColorWheel *wheel;
-
- wheel = SP_COLOR_WHEEL (object);
-
- if ( wheel->_image )
- {
- g_free( wheel->_image );
- wheel->_image = NULL;
- wheel->_bs = 0;
- }
-
- if ( wheel->_triImage )
- {
- g_free( wheel->_triImage );
- wheel->_triImage = NULL;
- wheel->_triBs = 0;
- }
-
- if (((GtkObjectClass *) (parent_class))->destroy)
- (* ((GtkObjectClass *) (parent_class))->destroy) (object);
-}
-
-
-void sp_color_wheel_get_color( SPColorWheel *wheel, SPColor* color )
-{
- float rgb[3];
- gint i;
- g_return_if_fail (SP_IS_COLOR_WHEEL (wheel));
- g_return_if_fail (wheel != NULL);
- g_return_if_fail (color != NULL);
-
- sp_color_hsv_to_rgb_floatv (rgb, wheel->_hue, 1.0, 1.0);
- for ( i = 0; i < 3; i++ )
- {
- rgb[i] = (rgb[i] * wheel->_sat) + (wheel->_value * (1.0 - wheel->_sat));
- }
-
- color->set( rgb[0], rgb[1], rgb[2] );
-}
-
-void sp_color_wheel_set_color( SPColorWheel *wheel, const SPColor* color )
-{
-#ifdef DUMP_CHANGE_INFO
- g_message("sp_color_wheel_set_color( wheel=%p, %f, %f, %f)", wheel, color->v.c[0], color->v.c[1], color->v.c[2] );
-#endif
- g_return_if_fail (SP_IS_COLOR_WHEEL (wheel));
- g_return_if_fail (wheel != NULL);
- g_return_if_fail (color != NULL);
-
- float hue;
- float scratch[3];
- float rgb[3];
-
- sp_color_get_rgb_floatv (color, rgb);
- sp_color_rgb_to_hsv_floatv (scratch, rgb[0], rgb[1], rgb[2]);
- hue = scratch[0];
-
- sp_color_hsv_to_rgb_floatv (scratch, hue, 1.0, 1.0);
-
- gint lowInd = 0;
- gint hiInd = 0;
- for ( int i = 1; i < 3; i++ )
- {
- if ( scratch[i] < scratch[lowInd] )
- {
- lowInd = i;
- }
- if ( scratch[i] > scratch[hiInd] )
- {
- hiInd = i;
- }
- }
- // scratch[lowInd] should always be 0
- gdouble sat = (rgb[hiInd] - rgb[lowInd])/(scratch[hiInd]-scratch[lowInd]);
- gdouble val = sat < 1.0 ? (rgb[hiInd] - sat * scratch[hiInd])/(1.0-sat) : 0.0;
-
-
- sp_color_wheel_set_hue(wheel, hue);
- sp_color_wheel_set_sv(wheel, sat, val);
-}
-
-gboolean sp_color_wheel_is_adjusting( SPColorWheel *wheel )
-{
- g_return_val_if_fail( SP_IS_COLOR_WHEEL(wheel), FALSE );
- return wheel->dragging;
-}
-
-static void
-sp_color_wheel_realize (GtkWidget *widget)
-{
- SPColorWheel *wheel;
- GdkWindowAttr attributes;
- gint attributes_mask;
-
- wheel = SP_COLOR_WHEEL (widget);
-
- GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED);
-
- attributes.window_type = GDK_WINDOW_CHILD;
- attributes.x = widget->allocation.x;
- attributes.y = widget->allocation.y;
- attributes.width = widget->allocation.width;
- attributes.height = widget->allocation.height;
- attributes.wclass = GDK_INPUT_OUTPUT;
- attributes.visual = gdk_rgb_get_visual ();
- attributes.colormap = gdk_rgb_get_cmap ();
- attributes.event_mask = gtk_widget_get_events (widget);
- attributes.event_mask |= (GDK_EXPOSURE_MASK |
- GDK_BUTTON_PRESS_MASK |
- GDK_BUTTON_RELEASE_MASK |
- GDK_POINTER_MOTION_MASK |
- GDK_ENTER_NOTIFY_MASK |
- GDK_LEAVE_NOTIFY_MASK |
- GDK_FOCUS_CHANGE_MASK );
- attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-
- widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask);
- gdk_window_set_user_data (widget->window, widget);
-
- widget->style = gtk_style_attach (widget->style, widget->window);
-}
-
-static void
-sp_color_wheel_size_request (GtkWidget *widget, GtkRequisition *requisition)
-{
- SPColorWheel *wheel;
-
- wheel = SP_COLOR_WHEEL (widget);
-
- requisition->width = WHEEL_SIZE + widget->style->xthickness * 2;
- requisition->height = WHEEL_SIZE + widget->style->ythickness * 2;
-}
-
-static void
-sp_color_wheel_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
-{
- SPColorWheel *wheel;
-
- wheel = SP_COLOR_WHEEL (widget);
-
- widget->allocation = *allocation;
-
- wheel->_center = MIN(allocation->width, allocation->height)/2;
- wheel->_inner = (3 * wheel->_center)/4;
- if ( wheel->_image )
- {
- g_free( wheel->_image );
- wheel->_image = NULL;
- wheel->_bs = 0;
- }
-
- // Need to render the gradient before we do the triangle over
- sp_color_wheel_render_hue_wheel(wheel);
- sp_color_wheel_recalc_triangle(wheel);
- sp_color_wheel_render_triangle(wheel);
-
- if (GTK_WIDGET_REALIZED (widget)) {
- /* Resize GdkWindow */
- gdk_window_move_resize (widget->window, allocation->x, allocation->y, allocation->width, allocation->height);
- }
-}
-
-static gint
-sp_color_wheel_expose (GtkWidget *widget, GdkEventExpose *event)
-{
- SPColorWheel *wheel;
-
- wheel = SP_COLOR_WHEEL (widget);
-
- if (GTK_WIDGET_DRAWABLE (widget)) {
- gint width, height;
- width = widget->allocation.width;
- height = widget->allocation.height;
- sp_color_wheel_paint (wheel, &event->area);
- }
-
- return TRUE;
-}
-
-static gint
-sp_color_wheel_button_press (GtkWidget *widget, GdkEventButton *event)
-{
- SPColorWheel *wheel;
-
- wheel = SP_COLOR_WHEEL (widget);
-
- if (event->button == 1) {
- gint cx, cw;
- cx = widget->style->xthickness;
- cw = widget->allocation.width - 2 * cx;
- gboolean grabbed = FALSE;
-
- {
- double dx = event->x - wheel->_center;
- double dy = event->y - wheel->_center;
- gint hyp = static_cast<gint>(ABS(dx*dx) + ABS(dy*dy));
- if ( hyp <= (wheel->_center*wheel->_center) )
- {
- if ( hyp >= (wheel->_inner*wheel->_inner) )
- {
- gdouble rot = atan2( dy, -dx );
- sp_color_wheel_set_hue (wheel, (rot + M_PI) / (2.0 * M_PI));
-
- wheel->_inTriangle = FALSE;
- grabbed = TRUE;
- }
- else if ( wheel->_triangle && gdk_region_point_in( wheel->_triangle, (gint)event->x, (gint)event->y ) )
- {
- wheel->_inTriangle = TRUE;
- sp_color_wheel_process_in_triangle( wheel, event->x, event->y );
- grabbed = TRUE;
- }
- }
- }
-
- if ( grabbed )
- {
- gtk_widget_queue_draw( widget );
- gtk_widget_grab_focus( widget );
-
- wheel->dragging = TRUE;
-#ifdef DUMP_CHANGE_INFO
- {
- SPColor color;
- sp_color_wheel_get_color( wheel, &color );
- g_message( "%s:%d: About to signal %s to color %08x in %s", __FILE__, __LINE__,
- "CHANGED",
- color.toRGBA32( 0 ), FOO_NAME(wheel));
- }
-#endif
- gtk_signal_emit (GTK_OBJECT (wheel), wheel_signals[CHANGED]);
- gdk_pointer_grab (widget->window, FALSE,
- (GdkEventMask)(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK),
- NULL, NULL, event->time);
- }
- }
-
- return TRUE;
-}
-
-static gint
-sp_color_wheel_button_release (GtkWidget *widget, GdkEventButton *event)
-{
- SPColorWheel *wheel;
-
- wheel = SP_COLOR_WHEEL (widget);
-
- if (event->button == 1) {
- gdk_pointer_ungrab (event->time);
- wheel->dragging = FALSE;
-
-#ifdef DUMP_CHANGE_INFO
- {
- SPColor color;
- sp_color_wheel_get_color( wheel, &color );
- g_message( "%s:%d: About to signal %s to color %08x in %s", __FILE__, __LINE__,
- "CHANGED",
- color.toRGBA32( 0 ), FOO_NAME(wheel));
- }
-#endif
- gtk_signal_emit (GTK_OBJECT (wheel), wheel_signals[CHANGED]);
- }
-
- return TRUE;
-}
-
-static gint
-sp_color_wheel_motion_notify (GtkWidget *widget, GdkEventMotion *event)
-{
- SPColorWheel *wheel;
-
- wheel = SP_COLOR_WHEEL (widget);
-
- if (wheel->dragging) {
- double dx = event->x - wheel->_center;
- double dy = event->y - wheel->_center;
- if ( !wheel->_inTriangle )
- {
- gdouble rot = atan2( dy, -dx );
- sp_color_wheel_set_hue (wheel, (rot + M_PI) / (2.0 * M_PI));
- }
- else
- {
- sp_color_wheel_process_in_triangle( wheel, event->x, event->y );
- }
-
-#ifdef DUMP_CHANGE_INFO
- {
- SPColor color;
- sp_color_wheel_get_color( wheel, &color );
- g_message( "%s:%d: About to signal %s to color %08x in %s", __FILE__, __LINE__,
- "CHANGED",
- color.toRGBA32( 0 ), FOO_NAME(wheel));
- }
-#endif
- gtk_signal_emit (GTK_OBJECT (wheel), wheel_signals[CHANGED]);
- }
-
- return TRUE;
-}
-
-GtkWidget *
-sp_color_wheel_new ()
-{
- SPColorWheel *wheel;
-
- wheel = (SPColorWheel*)gtk_type_new (SP_TYPE_COLOR_WHEEL);
-
- return GTK_WIDGET (wheel);
-}
-
-static void sp_color_wheel_set_hue(SPColorWheel *wheel, gdouble hue)
-{
- g_return_if_fail (SP_IS_COLOR_WHEEL (wheel));
-
- if ( wheel->_hue != hue )
- {
- wheel->_hue = hue;
-
- sp_color_wheel_recalc_triangle(wheel);
-
- SPColor color;
- gfloat rgb[3];
- sp_color_wheel_get_color( wheel, &color );
- sp_color_get_rgb_floatv (&color, rgb);
-
- wheel->_spotValue = ( (0.299 * rgb[0]) + (0.587 * rgb[1]) + (0.114 * rgb[2]) );
-
- gtk_widget_queue_draw (GTK_WIDGET (wheel));
- }
-}
-
-
-static void sp_color_wheel_set_sv( SPColorWheel *wheel, gdouble sat, gdouble value )
-{
- static gdouble epsilon = 1e-6;
- gboolean changed = FALSE;
-
- if ( ABS( wheel->_sat - sat ) > epsilon )
- {
- wheel->_sat = sat;
- changed = TRUE;
- }
- if ( ABS( wheel->_value - value ) > epsilon )
- {
- wheel->_value = value;
- changed = TRUE;
- }
-
- if ( changed )
- {
- SPColor color;
- gfloat rgb[3];
- sp_color_wheel_get_color( wheel, &color );
- sp_color_get_rgb_floatv (&color, rgb);
-
- wheel->_spotValue = ( (0.299 * rgb[0]) + (0.587 * rgb[1]) + (0.114 * rgb[2]) );
-
-#ifdef DUMP_CHANGE_INFO
- {
- SPColor color;
- sp_color_wheel_get_color( wheel, &color );
- g_message( "%s:%d: About to signal %s to color %08x in %s", __FILE__, __LINE__,
- "CHANGED",
- color.toRGBA32( 0 ), FOO_NAME(wheel));
- }
-#endif
- gtk_signal_emit (GTK_OBJECT (wheel), wheel_signals[CHANGED]);
- }
- gtk_widget_queue_draw (GTK_WIDGET (wheel));
-}
-
-static void sp_color_wheel_recalc_triangle(SPColorWheel *wheel)
-{
- if ( wheel->_triangle )
- {
- gdk_region_destroy( wheel->_triangle );
- wheel->_triangle = NULL;
- }
- wheel->_triDirty = TRUE;
-
- if ( wheel->_center > 0 && wheel->_inner > 0 )
- {
- gdouble dx = cos( M_PI * 2 * wheel->_hue );
- gdouble dy = -sin( M_PI * 2 * wheel->_hue );
-
- wheel->_triPoints[0].x = wheel->_center + static_cast<gint>(dx * wheel->_inner);
- wheel->_triPoints[0].y = wheel->_center + static_cast<gint>(dy * wheel->_inner);
-
- dx = cos( M_PI * 2 * wheel->_hue + ((M_PI * 2)/ 3) );
- dy = -sin( M_PI * 2 * wheel->_hue + ((M_PI * 2) / 3) );
- wheel->_triPoints[1].x = wheel->_center + static_cast<gint>(dx * wheel->_inner);
- wheel->_triPoints[1].y = wheel->_center + static_cast<gint>(dy * wheel->_inner);
-
- dx = cos( M_PI * 2 * wheel->_hue - ((M_PI*2) / 3) );
- dy = -sin( M_PI * 2 * wheel->_hue - ((M_PI*2) / 3) );
- wheel->_triPoints[2].x = wheel->_center + static_cast<gint>(dx * wheel->_inner);
- wheel->_triPoints[2].y = wheel->_center + static_cast<gint>(dy * wheel->_inner);
-
-
- wheel->_triangle = gdk_region_polygon( wheel->_triPoints,
- 3,
- GDK_EVEN_ODD_RULE );
- }
-}
-
-#define VERT_SWAP( X, Y ) { \
- gfloat tmpF; \
- \
- tmpF = point##X.x; \
- point##X.x = point##Y.x; \
- point##Y.x = tmpF; \
- \
- tmpF = point##X.y; \
- point##X.y = point##Y.y; \
- point##Y.y = tmpF; \
- \
- tmpF = rgb##X[0]; \
- rgb##X[0] = rgb##Y[0]; \
- rgb##Y[0] = tmpF; \
- \
- tmpF = rgb##X[1]; \
- rgb##X[1] = rgb##Y[1]; \
- rgb##Y[1] = tmpF; \
- \
- tmpF = rgb##X[2]; \
- rgb##X[2] = rgb##Y[2]; \
- rgb##Y[2] = tmpF; \
-}
-
-#define VERT_COPY( dst, src ) { \
- point##dst.x = point##src.x; \
- \
- point##dst.y = point##src.y; \
- \
- rgb##dst[0] = rgb##src[0]; \
- rgb##dst[1] = rgb##src[1]; \
- rgb##dst[2] = rgb##src[2]; \
-}
-
-typedef struct {
- gfloat x;
- gfloat y;
-} PointF;
-
-/**
- * Render the provided color wheel information as a triangle.
- */
-static void sp_color_wheel_render_triangle (SPColorWheel *wheel)
-{
- if ( wheel->_image )
- {
- if ( wheel->_triBs < wheel->_bs )
- {
- g_free( wheel->_triImage );
- wheel->_triImage = NULL;
- }
-
- if (wheel->_triDirty || !wheel->_triImage)
- {
- if ( !wheel->_triImage )
- {
- wheel->_triBs = wheel->_bs;
- wheel->_triImage = g_new (guchar, wheel->_triBs * 3);
- //g_message( "just allocated %fKB for tri", ((wheel->_triBs * 3.0)/1024.0) );
- }
-
- memcpy( wheel->_triImage, wheel->_image, wheel->_bs * 3 );
-
- PointF pointA, pointB, pointC;
- pointA.x = wheel->_triPoints[0].x;
- pointA.y = wheel->_triPoints[0].y;
- pointB.x = wheel->_triPoints[1].x;
- pointB.y = wheel->_triPoints[1].y;
- pointC.x = wheel->_triPoints[2].x;
- pointC.y = wheel->_triPoints[2].y;
-
- gfloat rgbA[3];
- gfloat rgbB[3] = {0.0, 0.0, 0.0};
- gfloat rgbC[3] = {1.0, 1.0, 1.0};
-
- sp_color_hsv_to_rgb_floatv (rgbA, wheel->_hue, 1.0, 1.0);
-
-// Start of Gouraud fill ============================================================
- gint rowStride = wheel->_center * 2 * 3;
- guchar* dst = wheel->_triImage;
-
- if ( pointC.y < pointB.y )
- VERT_SWAP( C, B );
-
- if ( pointC.y < pointA.y )
- VERT_SWAP( C, A );
-
- if ( pointB.y < pointA.y )
- VERT_SWAP( B, A );
-
- if ( pointA.y == pointB.y && pointB.x < pointA.x )
- VERT_SWAP( A, B );
-
- gfloat dr, dg, db;
-
- gfloat dx1,dx2,dx3;
- gfloat dr1,dr2,dr3;
- gfloat dg1,dg2,dg3;
- gfloat db1,db2,db3;
-
-
- PointF pointS;
- PointF pointE;
- PointF pointP;
- gfloat rgbS[3];
- gfloat rgbE[3];
- gfloat rgbP[3];
-
-
- if (pointB.y-pointA.y > 0)
- {
- dx1=(pointB.x-pointA.x)/(pointB.y-pointA.y);
- dr1=(rgbB[0]-rgbA[0])/(pointB.y-pointA.y);
- dg1=(rgbB[1]-rgbA[1])/(pointB.y-pointA.y);
- db1=(rgbB[2]-rgbA[2])/(pointB.y-pointA.y);
- }
- else
- {
- dx1=dr1=dg1=db1=0;
- }
-
- if (pointC.y-pointA.y > 0)
- {
- dx2=(pointC.x-pointA.x)/(pointC.y-pointA.y);
- dr2=(rgbC[0]-rgbA[0])/(pointC.y-pointA.y);
- dg2=(rgbC[1]-rgbA[1])/(pointC.y-pointA.y);
- db2=(rgbC[2]-rgbA[2])/(pointC.y-pointA.y);
- }
- else
- {
- dx2=dr2=dg2=db2=0;
- }
-
- if (pointC.y-pointB.y > 0)
- {
- dx3=(pointC.x-pointB.x)/(pointC.y-pointB.y);
- dr3=(rgbC[0]-rgbB[0])/(pointC.y-pointB.y);
- dg3=(rgbC[1]-rgbB[1])/(pointC.y-pointB.y);
- db3=(rgbC[2]-rgbB[2])/(pointC.y-pointB.y);
- }
- else
- {
- dx3=dr3=dg3=db3=0;
- }
-
- VERT_COPY(S, A);
- VERT_COPY(E, A);
-
- int runs = 1; int fill_mode = 0;
-
- if ( dx1 == 0 )
- {
- fill_mode = 0;
- }
- else if ( dx1 > dx2 )
- {
- fill_mode = 1; runs = 2;
- }
- else if ( dx1 )
- {
- fill_mode = 2; runs = 2;
- }
-
- gfloat targetY = 0;
- int fill_direction_mode = 0;
-
- for (int current_run = 0; current_run < runs; current_run++)
- {
- targetY = pointC.y;
- switch (fill_mode)
- {
- case 0:
- VERT_COPY(E,B);
- fill_direction_mode = 0;
- break;
- case 1:
- if (current_run == 0) {
- targetY = pointB.y;
- fill_direction_mode = 1;
- } else {
- VERT_COPY(E,B);
- fill_direction_mode = 0;
- }
- break;
- case 2:
- if (current_run == 0) {
- targetY = pointB.y;
- fill_direction_mode = 2;
- } else {
- VERT_COPY(S,B);
- fill_direction_mode = 3;
- }
- break;
- }
-
- for(;pointS.y <= targetY; pointS.y++,pointE.y++)
- {
- if (pointE.x-pointS.x > 0)
- {
- dr=(rgbE[0]-rgbS[0])/(pointE.x-pointS.x);
- dg=(rgbE[1]-rgbS[1])/(pointE.x-pointS.x);
- db=(rgbE[2]-rgbS[2])/(pointE.x-pointS.x);
- }
- else
- {
- dr=dg=db=0;
- }
- VERT_COPY(P,S);
- dst = wheel->_triImage + (static_cast<gint>(pointP.y) * rowStride);
- dst += static_cast<gint>(pointP.x) * 3;
- for(;pointP.x < pointE.x;pointP.x++)
- {
- //putpixel(P);
- dst[0] = SP_COLOR_F_TO_U(rgbP[0]);
- dst[1] = SP_COLOR_F_TO_U(rgbP[1]);
- dst[2] = SP_COLOR_F_TO_U(rgbP[2]);
- dst += 3;
- rgbP[0]+=dr; rgbP[1]+=dg; rgbP[2]+=db;
- }
-
- switch (fill_direction_mode) {
- case 0:
- pointS.x+=dx2; rgbS[0]+=dr2; rgbS[1]+=dg2; rgbS[2]+=db2;
- pointE.x+=dx3; rgbE[0]+=dr3; rgbE[1]+=dg3; rgbE[2]+=db3;
- break;
- case 1:
- pointS.x+=dx2; rgbS[0]+=dr2; rgbS[1]+=dg2; rgbS[2]+=db2;
- pointE.x+=dx1; rgbE[0]+=dr1; rgbE[1]+=dg1; rgbE[2]+=db1;
- break;
- case 2:
- pointS.x+=dx1; rgbS[0]+=dr1; rgbS[1]+=dg1; rgbS[2]+=db1;
- pointE.x+=dx2; rgbE[0]+=dr2; rgbE[1]+=dg2; rgbE[2]+=db2;
- break;
- case 3:
- pointS.x+=dx3; rgbS[0]+=dr3; rgbS[1]+=dg3; rgbS[2]+=db3;
- pointE.x+=dx2; rgbE[0]+=dr2; rgbE[1]+=dg2; rgbE[2]+=db2;
- break;
- }
- }
- }
-
-
-// End of Gouraud fill ============================================================
-
- wheel->_triDirty = FALSE;
- //g_message( "Just updated triangle" );
- }
- }
-}
-
-static void
-sp_color_wheel_paint (SPColorWheel *wheel, GdkRectangle *area)
-{
- GtkWidget *widget;
- GdkRectangle warea, carea;
- GdkRectangle wpaint, cpaint;
-
- widget = GTK_WIDGET (wheel);
-
- /* Widget area */
- warea.x = 0;
- warea.y = 0;
- warea.width = widget->allocation.width;
- warea.height = widget->allocation.height;
-
- /* Color gradient area */
- carea.x = widget->style->xthickness;
- carea.y = widget->style->ythickness;
- carea.width = widget->allocation.width - 2 * carea.x;
- carea.height = widget->allocation.height - 2 * carea.y;
-
- /* Actual paintable area */
- if (!gdk_rectangle_intersect (area, &warea, &wpaint)) return;
-
- //g_message( "Painted as state %d", widget->state );
-
- /* Paintable part of color gradient area */
- if (gdk_rectangle_intersect (area, &carea, &cpaint)) {
- sp_color_wheel_render_hue_wheel (wheel);
- sp_color_wheel_render_triangle (wheel);
- }
-
-/*
- gtk_draw_box (widget->style,
- widget->window,
- (GtkStateType)widget->state,
- GTK_SHADOW_NONE,
- warea.x,
- warea.y,
- warea.width,
- warea.height);
-*/
-
- gtk_style_apply_default_background( widget->style,
- widget->window,
- TRUE,
- (GtkStateType)widget->state,
- NULL,
- 0,
- 0,
- warea.width,
- warea.height);
-
-
- /* Draw shadow */
-/*
- gtk_paint_shadow (widget->style, widget->window,
- (GtkStateType)widget->state, GTK_SHADOW_IN,
- NULL, widget, "colorwheel",
- 0, 0,
- warea.width, warea.height);
-*/
-
-
- /* Draw pixelstore */
- if (wheel->_triImage != NULL) {
- //gdouble start, end;
- //start = get_time();
- gdk_draw_rgb_image (widget->window, widget->style->black_gc,
- 0, 0,//cpaint.x, cpaint.y,
- //cpaint.width, cpaint.height,
- wheel->_center * 2, wheel->_center * 2,
- GDK_RGB_DITHER_MAX,
- wheel->_triImage, wheel->_center * 6);
-
- //end = get_time();
- //g_message( "blits took %f", (end-start) );
- }
-
- {
- gdouble dx = cos( M_PI * 2 * wheel->_hue );
- gdouble dy = -sin( M_PI * 2 * wheel->_hue );
-
- gfloat rgb[3];
- sp_color_hsv_to_rgb_floatv (rgb, wheel->_hue, 1.0, 1.0);
-
- GdkGC *line_gc = (( (0.299 * rgb[0]) + (0.587 * rgb[1]) + (0.114 * rgb[2]) ) < 0.5) ? widget->style->white_gc : widget->style->black_gc;
-
- gint inx = wheel->_center + static_cast<gint>(dx * wheel->_inner);
- gint iny = wheel->_center + static_cast<gint>(dy * wheel->_inner);
-
-
- gdk_draw_line (widget->window, line_gc,
- inx, iny,
- wheel->_center + static_cast<gint>(dx * wheel->_center), wheel->_center + static_cast<gint>(dy * wheel->_center) );
-
-
- GdkGCValues values;
-
- if ( GTK_WIDGET_HAS_FOCUS(wheel) )
- {
- line_gc = widget->style->black_gc;
-
- gdk_gc_get_values ( line_gc, &values );
-
- gdk_gc_set_line_attributes ( line_gc,
- 3, // Line width
- values.line_style, //GDK_LINE_SOLID,
- values.cap_style, //GDK_CAP_BUTT,
- values.join_style ); //GDK_JOIN_MITER );
-
- if ( wheel->_inTriangle )
- {
- gdk_draw_line (widget->window, line_gc,
- wheel->_triPoints[0].x, wheel->_triPoints[0].y,
- wheel->_triPoints[1].x, wheel->_triPoints[1].y );
-
- gdk_draw_line (widget->window, line_gc,
- wheel->_triPoints[1].x, wheel->_triPoints[1].y,
- wheel->_triPoints[2].x, wheel->_triPoints[2].y );
-
- gdk_draw_line (widget->window, line_gc,
- wheel->_triPoints[2].x, wheel->_triPoints[2].y,
- wheel->_triPoints[0].x, wheel->_triPoints[0].y );
- }
- else
- {
- gdk_draw_arc (widget->window, line_gc,
- FALSE, // filled
- 0, 0,
- wheel->_center * 2, wheel->_center * 2,
- 0, 64 * 360 );
-
- gint diff = wheel->_center - wheel->_inner;
-
- gdk_draw_arc (widget->window, line_gc,
- FALSE, // filled
- diff, diff,
- wheel->_inner * 2, wheel->_inner * 2,
- 0, 64 * 360 );
-
- }
- gdk_gc_set_line_attributes ( line_gc,
- values.line_width, // Line width
- values.line_style, //GDK_LINE_SOLID,
- values.cap_style, //GDK_CAP_BUTT,
- values.join_style ); //GDK_JOIN_MITER );
- }
-// ==========
-
-// line_gc = (p[3] < 0x80) ? widget->style->white_gc : widget->style->black_gc;
- line_gc = (wheel->_spotValue < 0.5) ? widget->style->white_gc : widget->style->black_gc;
-
- gdk_gc_get_values ( line_gc, &values );
-
- gdk_gc_set_line_attributes ( line_gc,
- 2, // Line width
- values.line_style, //GDK_LINE_SOLID,
- values.cap_style, //GDK_CAP_BUTT,
- values.join_style ); //GDK_JOIN_MITER );
-
- gint pointX = (gint)( (1.0 - wheel->_sat) * ((1.0-wheel->_value)*(gdouble)wheel->_triPoints[1].x + wheel->_value*(gdouble)wheel->_triPoints[2].x)
- + (wheel->_sat * wheel->_triPoints[0].x) );
-
- gint pointY = (gint)( (1.0 - wheel->_sat) * ((1.0-wheel->_value)*(gdouble)wheel->_triPoints[1].y + wheel->_value*(gdouble)wheel->_triPoints[2].y)
- + (wheel->_sat * wheel->_triPoints[0].y) );
-
-
- gdk_gc_set_line_attributes ( line_gc,
- values.line_width, // Line width
- values.line_style, //GDK_LINE_SOLID,
- values.cap_style, //GDK_CAP_BUTT,
- values.join_style ); //GDK_JOIN_MITER );
-
- gdk_draw_arc (widget->window, line_gc,
- FALSE, // filled
- pointX - 4, pointY - 4,
- 8, 8,
- 0, 64 * 360 );
-
- gdk_draw_arc (widget->window, line_gc,
- FALSE, // filled
- pointX - 3, pointY - 3,
- 6, 6,
- 0, 64 * 360 );
-
-
-
- }
-}
-
-/* Colors are << 16 */
-
-static void
-sp_color_wheel_render_hue_wheel (SPColorWheel *wheel)
-{
- guchar *dp;
- gint x, y;
- guint r, g, b;
- gint size = wheel->_center * 2;
- gboolean dirty = FALSE;
-
- if (wheel->_image && (wheel->_bs < (size * size) )) {
- g_free (wheel->_image);
- wheel->_image = NULL;
- wheel->_bs = 0;
-
- if ( wheel->_triImage )
- {
- g_free( wheel->_triImage );
- wheel->_triImage = NULL;
- wheel->_triBs = 0;
- wheel->_triDirty = TRUE;
- }
- }
-
- if (!wheel->_image) {
- wheel->_image = g_new (guchar, size * size * 3);
- wheel->_bs = size * size;
- dirty = TRUE;
- //g_message( "just allocated %fKB for hue", ((wheel->_bs * 3.0)/1024.0) );
- }
-
- if ( dirty )
- {
- GtkWidget* widget = GTK_WIDGET (wheel);
- dp = wheel->_image;
- r = widget->style->bg[widget->state].red >> 8;
- g = widget->style->bg[widget->state].green >> 8;
- b = widget->style->bg[widget->state].blue >> 8;
- //g_message( "Rendered as state %d", widget->state );
-
- gint offset = wheel->_center;
- gint inner = wheel->_inner * wheel->_inner;
- gint rad = wheel->_center * wheel->_center;
-
- for (x = 0; x < size; x++) {
- guchar *d = dp;
- for (y = 0; y < size; y++) {
- gint dx = x - offset;
- gint dy = y - offset;
- gint hyp = (ABS(dx*dx) + ABS(dy*dy));
- if ( hyp >= inner && hyp <= rad)
- {
- gdouble rot = atan2( static_cast<gdouble>(dy), static_cast<gdouble>(-dx) );
-
- gfloat rgb[3];
- sp_color_hsv_to_rgb_floatv (rgb, (rot + M_PI) / (2.0 * M_PI), 1.0, 1.0);
-
- d[0] = SP_COLOR_F_TO_U (rgb[0]);
- d[1] = SP_COLOR_F_TO_U (rgb[1]);
- d[2] = SP_COLOR_F_TO_U (rgb[2]);
- }
- else
- {
- /* Background value */
- d[0] = r;
- d[1] = g;
- d[2] = b;
- }
-
- d += 3 * size;
- }
- dp += 3;
- }
- }
-}
-
-static gboolean sp_color_wheel_focus(GtkWidget *widget,
- GtkDirectionType direction)
-{
- gboolean focusKept = FALSE;
- gboolean wasFocused = GTK_WIDGET_HAS_FOCUS(widget);
- SPColorWheel* wheel = SP_COLOR_WHEEL(widget);
- gboolean goingUp = FALSE;
-
- switch ( direction )
- {
- case GTK_DIR_TAB_FORWARD:
- case GTK_DIR_UP:
- case GTK_DIR_LEFT:
- goingUp = TRUE;
- break;
-
- case GTK_DIR_TAB_BACKWARD:
- case GTK_DIR_DOWN:
- case GTK_DIR_RIGHT:
- goingUp = FALSE;
- break;
- default:
- ;
- }
-
- if ( !wasFocused )
- {
- wheel->_inTriangle = !goingUp;
- gtk_widget_grab_focus (widget);
- focusKept = TRUE;
- }
- else if ( (!wheel->_inTriangle) == (!goingUp) )
- {
- focusKept = FALSE;
- }
- else
- {
- wheel->_inTriangle = !wheel->_inTriangle;
- gtk_widget_queue_draw( widget );
- focusKept = TRUE;
- }
-
- return focusKept;
-}
-
-static void sp_color_wheel_process_in_triangle( SPColorWheel *wheel, gdouble x, gdouble y )
-{
-// njh: dot(rot90(B-C), x) = saturation
-// njh: dot(B-C, x) = value
- Geom::Point delta( x - (((gdouble)(wheel->_triPoints[1].x + wheel->_triPoints[2].x)) / 2.0),
- y - (((gdouble)(wheel->_triPoints[1].y + wheel->_triPoints[2].y)) / 2.0) );
-
- gdouble rot = (M_PI * 2 * wheel->_hue );
-
- Geom::Point result = delta * Geom::Rotate(rot);
-
- gdouble sat = CLAMP( result[Geom::X] / (wheel->_inner * 1.5), 0.0, 1.0 );
-
- gdouble halfHeight = (wheel->_inner * sin(M_PI/3.0)) * (1.0 - sat);
- gdouble value = CLAMP( ((result[Geom::Y]+ halfHeight) / (2.0*halfHeight)), 0.0, 1.0 );
-
- wheel->_triDirty = TRUE;
-
- sp_color_wheel_set_sv( wheel, sat, value );
-}
-
-
-/*
- 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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/widgets/sp-color-wheel.h b/src/widgets/sp-color-wheel.h
deleted file mode 100644
index d62c26782..000000000
--- a/src/widgets/sp-color-wheel.h
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef __SP_COLOR_WHEEL_H__
-#define __SP_COLOR_WHEEL_H__
-
-/*
- * A wheel color widget
- *
- * Authors:
- * Lauris Kaplinski <lauris@kaplinski.com>
- * Jon A. Cruz <jon@joncruz.org>
- *
- * Copyright (C) 2001-2002 Lauris Kaplinski
- * Copyright (C) 2001-2004 Authors
- *
- * This code is in public domain
- */
-
-#include <gtk/gtkwidget.h>
-
-#include <glib.h>
-#include "color.h"
-
-
-#define SP_TYPE_COLOR_WHEEL (sp_color_wheel_get_type ())
-#define SP_COLOR_WHEEL(o) (GTK_CHECK_CAST ((o), SP_TYPE_COLOR_WHEEL, SPColorWheel))
-#define SP_COLOR_WHEEL_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_COLOR_WHEEL, SPColorWheelClass))
-#define SP_IS_COLOR_WHEEL(o) (GTK_CHECK_TYPE ((o), SP_TYPE_COLOR_WHEEL))
-#define SP_IS_COLOR_WHEEL_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_COLOR_WHEEL))
-
-struct SPColorWheel {
- GtkWidget widget;
-
- gboolean dragging : 1;
-
- gboolean _inTriangle;
- gboolean _triDirty;
- GdkRegion* _triangle;
- GdkPoint _triPoints[3];
- guchar *_triImage;
- gint _triBs;
-
- guchar *_image;
- gint _bs;
-
- gdouble _spotValue;
-
- gdouble _hue;
- gdouble _sat;
- gdouble _value;
-
- gint _inner;
- gint _center;
-};
-
-struct SPColorWheelClass {
- GtkWidgetClass parent_class;
-
- void (* changed) (SPColorWheel *wheel);
-};
-
-GType sp_color_wheel_get_type(void);
-
-GtkWidget *sp_color_wheel_new ();
-
-void sp_color_wheel_get_color( SPColorWheel *wheel, SPColor* color );
-void sp_color_wheel_set_color( SPColorWheel *wheel, const SPColor* color );
-
-gboolean sp_color_wheel_is_adjusting( SPColorWheel *wheel );
-
-#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:fileencoding=utf-8:textwidth=99 :
diff --git a/src/widgets/sp-xmlview-content.cpp b/src/widgets/sp-xmlview-content.cpp
index 7150b07fd..75d68d25c 100644
--- a/src/widgets/sp-xmlview-content.cpp
+++ b/src/widgets/sp-xmlview-content.cpp
@@ -1,5 +1,3 @@
-#define __SP_XMLVIEW_CONTENT_C__
-
/*
* Specialization of GtkTextView for the XML tree view
*
@@ -7,6 +5,7 @@
* MenTaLguY <mental@rydia.net>
*
* Copyright (C) 2002 MenTaLguY
+ * Abhishek Sharma
*
* Released under the GNU GPL; see COPYING for details
*/
@@ -20,6 +19,8 @@
#include "document-private.h"
#include "inkscape.h"
+using Inkscape::DocumentUndo;
+
static void sp_xmlview_content_class_init (SPXMLViewContentClass * klass);
static void sp_xmlview_content_init (SPXMLViewContent * text);
static void sp_xmlview_content_destroy (GtkObject * object);
@@ -165,7 +166,7 @@ sp_xmlview_content_changed (GtkTextBuffer *tb, SPXMLViewContent *text)
text->repr->setContent(data);
g_free (data);
text->blocked = FALSE;
- sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_DIALOG_XML_EDITOR,
- _("Type text in a text node"));
+ DocumentUndo::done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_DIALOG_XML_EDITOR,
+ _("Type text in a text node"));
}
}
diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp
index 43bc5fc07..7226b970e 100644
--- a/src/widgets/stroke-style.cpp
+++ b/src/widgets/stroke-style.cpp
@@ -7,6 +7,8 @@
* bulia byak <buliabyak@users.sf.net>
* Maximilian Albert <maximilian.albert@gmail.com>
* Josh Andler <scislac@users.sf.net>
+ * Jon A. Cruz <jon@joncruz.org>
+ * Abhishek Sharma
*
* Copyright (C) 2001-2005 authors
* Copyright (C) 2001 Ximian, Inc.
@@ -59,6 +61,8 @@
#include "fill-style.h" // to get sp_fill_style_widget_set_desktop
#include "fill-n-stroke-factory.h"
+using Inkscape::DocumentUndo;
+
/** Marker selection option menus */
static Gtk::OptionMenu * marker_start_menu = NULL;
static Gtk::OptionMenu * marker_mid_menu = NULL;
@@ -156,7 +160,7 @@ sp_marker_prev_new(unsigned psize, gchar const *mname,
return NULL;
// Create a copy repr of the marker with id="sample"
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(sandbox);
+ Inkscape::XML::Document *xml_doc = sandbox->getReprDoc();
Inkscape::XML::Node *mrepr = SP_OBJECT_REPR (marker)->duplicate(xml_doc);
mrepr->setAttribute("id", "sample");
@@ -170,19 +174,19 @@ sp_marker_prev_new(unsigned psize, gchar const *mname,
// Uncomment this to get the sandbox documents saved (useful for debugging)
//FILE *fp = fopen (g_strconcat(menu_id, mname, ".svg", NULL), "w");
- //sp_repr_save_stream (sp_document_repr_doc (sandbox), fp);
+ //sp_repr_save_stream(sandbox->getReprDoc(), fp);
//fclose (fp);
// object to render; note that the id is the same as that of the menu we're building
SPObject *object = sandbox->getObjectById(menu_id);
- sp_document_root (sandbox)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
- sp_document_ensure_up_to_date(sandbox);
+ sandbox->getRoot()->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ sandbox->ensureUpToDate();
if (object == NULL || !SP_IS_ITEM(object))
return NULL; // sandbox broken?
// Find object's bbox in document
- Geom::Matrix const i2doc(sp_item_i2doc_affine(SP_ITEM(object)));
+ Geom::Matrix const i2doc(SP_ITEM(object)->i2doc_affine());
Geom::OptRect dbox = SP_ITEM(object)->getBounds(i2doc);
if (!dbox) {
@@ -193,7 +197,7 @@ sp_marker_prev_new(unsigned psize, gchar const *mname,
double sf = 0.8;
gchar *cache_name = g_strconcat(menu_id, mname, NULL);
- Glib::ustring key = svg_preview_cache.cache_key(source->uri, cache_name, psize);
+ Glib::ustring key = svg_preview_cache.cache_key(source->getURI(), cache_name, psize);
g_free (cache_name);
// TODO: is this correct?
Glib::RefPtr<Gdk::Pixbuf> pixbuf = Glib::wrap(svg_preview_cache.get_preview_from_cache(key));
@@ -221,9 +225,7 @@ ink_marker_list_get (SPDocument *source)
GSList *ml = NULL;
SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS (source);
- for ( SPObject *child = sp_object_first_child(SP_OBJECT(defs));
- child != NULL;
- child = SP_OBJECT_NEXT (child) )
+ for ( SPObject *child = SP_OBJECT(defs)->firstChild(); child; child = child->getNext() )
{
if (SP_IS_MARKER(child)) {
ml = g_slist_prepend (ml, child);
@@ -242,8 +244,8 @@ sp_marker_menu_build (Gtk::Menu *m, GSList *marker_list, SPDocument *source, SPD
{
// Do this here, outside of loop, to speed up preview generation:
NRArena const *arena = NRArena::create();
- unsigned const visionkey = sp_item_display_key_new(1);
- NRArenaItem *root = sp_item_invoke_show(SP_ITEM(SP_DOCUMENT_ROOT (sandbox)), (NRArena *) arena, visionkey, SP_ITEM_SHOW_DISPLAY);
+ unsigned const visionkey = SPItem::display_key_new(1);
+ NRArenaItem *root = SP_ITEM(sandbox->getRoot())->invoke_show((NRArena *) arena, visionkey, SP_ITEM_SHOW_DISPLAY);
for (; marker_list != NULL; marker_list = marker_list->next) {
Inkscape::XML::Node *repr = SP_OBJECT_REPR((SPItem *) marker_list->data);
@@ -280,7 +282,7 @@ sp_marker_menu_build (Gtk::Menu *m, GSList *marker_list, SPDocument *source, SPD
m->append(*i);
}
- sp_item_invoke_hide(SP_ITEM(sp_document_root(sandbox)), visionkey);
+ SP_ITEM(sandbox->getRoot())->invoke_hide(visionkey);
nr_object_unref((NRObject *) arena);
}
@@ -342,7 +344,7 @@ gchar const *buffer = "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:sodipodi=
"</svg>";
- return sp_document_new_from_mem (buffer, strlen(buffer), FALSE);
+ return SPDocument::createNewDocFromMem (buffer, strlen(buffer), FALSE);
}
static void
@@ -373,7 +375,7 @@ ink_marker_menu_create_menu(Gtk::Menu *m, gchar const *menu_id, SPDocument *doc,
if (markers_doc == NULL) {
char *markers_source = g_build_filename(INKSCAPE_MARKERSDIR, "markers.svg", NULL);
if (Inkscape::IO::file_test(markers_source, G_FILE_TEST_IS_REGULAR)) {
- markers_doc = sp_document_new(markers_source, FALSE);
+ markers_doc = SPDocument::createNewDoc(markers_source, FALSE);
}
g_free(markers_source);
}
@@ -391,7 +393,7 @@ ink_marker_menu_create_menu(Gtk::Menu *m, gchar const *menu_id, SPDocument *doc,
// suck in from markers.svg
if (markers_doc) {
- sp_document_ensure_up_to_date(doc);
+ doc->ensureUpToDate();
sp_marker_list_from_doc(m, doc, markers_doc, NULL, sandbox, menu_id);
}
@@ -498,8 +500,8 @@ sp_marker_select(Gtk::OptionMenu *mnu, Gtk::Container *spw, SPMarkerLoc const wh
sp_repr_css_attr_unref(css);
css = 0;
- sp_document_done(document, SP_VERB_DIALOG_FILL_STROKE,
- _("Set markers"));
+ DocumentUndo::done(document, SP_VERB_DIALOG_FILL_STROKE,
+ _("Set markers"));
};
@@ -1200,8 +1202,8 @@ sp_stroke_style_scale_line(Gtk::Container *spw)
sp_repr_css_attr_unref(css);
css = 0;
- sp_document_done(document, SP_VERB_DIALOG_FILL_STROKE,
- _("Set stroke style"));
+ DocumentUndo::done(document, SP_VERB_DIALOG_FILL_STROKE,
+ _("Set stroke style"));
spw->set_data("update", GINT_TO_POINTER(FALSE));
}
@@ -1297,8 +1299,8 @@ sp_stroke_style_any_toggled(Gtk::ToggleButton *tb, Gtk::Container *spw)
sp_repr_css_attr_unref(css);
css = 0;
- sp_document_done(sp_desktop_document(desktop), SP_VERB_DIALOG_FILL_STROKE,
- _("Set stroke style"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_DIALOG_FILL_STROKE,
+ _("Set stroke style"));
}
}
diff --git a/src/widgets/swatch-selector.cpp b/src/widgets/swatch-selector.cpp
index 3c209a45d..935282a3a 100644
--- a/src/widgets/swatch-selector.cpp
+++ b/src/widgets/swatch-selector.cpp
@@ -135,8 +135,8 @@ void SwatchSelector::_changedCb(SPColorSelector */*csel*/, void *data)
os << "stop-color:" << c << ";stop-opacity:" << static_cast<gdouble>(alpha) <<";";
SP_OBJECT_REPR(stop)->setAttribute("style", os.str().c_str());
- sp_document_done(SP_OBJECT_DOCUMENT(ngr), SP_VERB_CONTEXT_GRADIENT,
- _("Change swatch color"));
+ DocumentUndo::done(SP_OBJECT_DOCUMENT(ngr), SP_VERB_CONTEXT_GRADIENT,
+ _("Change swatch color"));
}
}
}
diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp
index 0c94f5d68..28b4c9fb2 100644
--- a/src/widgets/toolbox.cpp
+++ b/src/widgets/toolbox.cpp
@@ -13,6 +13,7 @@
* Jon A. Cruz <jon@joncruz.org>
* Maximilian Albert <maximilian.albert@gmail.com>
* Tavmjong Bah <tavmjong@free.fr>
+ * Abhishek Sharma
*
* Copyright (C) 2004 David Turner
* Copyright (C) 2003 MenTaLguY
@@ -112,6 +113,7 @@
using Inkscape::UnitTracker;
using Inkscape::UI::UXManager;
+using Inkscape::DocumentUndo;
typedef void (*SetupFunction)(GtkWidget *toolbox, SPDesktop *desktop);
typedef void (*UpdateFunction)(SPDesktop *desktop, SPEventContext *eventcontext, GtkWidget *toolbox);
@@ -1271,7 +1273,7 @@ static void sp_node_path_value_changed(GtkAdjustment *adj, GObject *tbl, Geom::D
UnitTracker* tracker = reinterpret_cast<UnitTracker*>(g_object_get_data( tbl, "tracker" ));
SPUnit const *unit = tracker->getActiveUnit();
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
prefs->setDouble(Glib::ustring("/tools/nodes/") + (d == Geom::X ? "x" : "y"),
sp_units_get_pixels(adj->value, *unit));
}
@@ -2053,8 +2055,8 @@ static void toggle_snap_callback(GtkToggleAction *act, gpointer data) //data poi
return;
}
- bool saved = sp_document_get_undo_sensitive(doc);
- sp_document_set_undo_sensitive(doc, false);
+ bool saved = DocumentUndo::getUndoSensitive(doc);
+ DocumentUndo::setUndoSensitive(doc, false);
bool v = false;
SPAttributeEnum attr = (SPAttributeEnum) GPOINTER_TO_INT(g_object_get_data(G_OBJECT(act), "SP_ATTR_INKSCAPE"));
@@ -2139,7 +2141,7 @@ static void toggle_snap_callback(GtkToggleAction *act, gpointer data) //data poi
// The snapping preferences are stored in the document, and therefore toggling makes the document dirty
doc->setModifiedSinceSave();
- sp_document_set_undo_sensitive(doc, saved);
+ DocumentUndo::setUndoSensitive(doc, saved);
}
void setup_snap_toolbox(GtkWidget *toolbox, SPDesktop *desktop)
@@ -2498,7 +2500,7 @@ static void sp_stb_magnitude_value_changed( GtkAdjustment *adj, GObject *dataKlu
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" );
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
// do not remember prefs if this call is initiated by an undo change, because undoing object
// creation sets bogus values to its attributes before it is deleted
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -2529,8 +2531,8 @@ static void sp_stb_magnitude_value_changed( GtkAdjustment *adj, GObject *dataKlu
}
}
if (modmade) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
- _("Star: Change number of corners"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ _("Star: Change number of corners"));
}
g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) );
@@ -2540,7 +2542,7 @@ static void sp_stb_proportion_value_changed( GtkAdjustment *adj, GObject *dataKl
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" );
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
if (!IS_NAN(adj->value)) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setDouble("/tools/shapes/star/proportion", adj->value);
@@ -2576,8 +2578,8 @@ static void sp_stb_proportion_value_changed( GtkAdjustment *adj, GObject *dataKl
}
if (modmade) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
- _("Star: Change spoke ratio"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ _("Star: Change spoke ratio"));
}
g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) );
@@ -2588,7 +2590,7 @@ static void sp_stb_sides_flat_state_changed( EgeSelectOneAction *act, GObject *d
SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" );
bool flat = ege_select_one_action_get_active( act ) == 0;
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setBool( "/tools/shapes/star/isflatsided", flat);
}
@@ -2620,8 +2622,8 @@ static void sp_stb_sides_flat_state_changed( EgeSelectOneAction *act, GObject *d
}
if (modmade) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
- flat ? _("Make polygon") : _("Make star"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ flat ? _("Make polygon") : _("Make star"));
}
g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) );
@@ -2631,7 +2633,7 @@ static void sp_stb_rounded_value_changed( GtkAdjustment *adj, GObject *dataKludg
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" );
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setDouble("/tools/shapes/star/rounded", (gdouble) adj->value);
}
@@ -2657,8 +2659,8 @@ static void sp_stb_rounded_value_changed( GtkAdjustment *adj, GObject *dataKludg
}
}
if (modmade) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
- _("Star: Change rounding"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ _("Star: Change rounding"));
}
g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) );
@@ -2668,7 +2670,7 @@ static void sp_stb_randomized_value_changed( GtkAdjustment *adj, GObject *dataKl
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data( dataKludge, "desktop" );
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setDouble("/tools/shapes/star/randomized", (gdouble) adj->value);
}
@@ -2694,8 +2696,8 @@ static void sp_stb_randomized_value_changed( GtkAdjustment *adj, GObject *dataKl
}
}
if (modmade) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
- _("Star: Change randomization"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_STAR,
+ _("Star: Change randomization"));
}
g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) );
@@ -3033,7 +3035,7 @@ static void sp_rtb_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *
UnitTracker* tracker = reinterpret_cast<UnitTracker*>(g_object_get_data( tbl, "tracker" ));
SPUnit const *unit = tracker->getActiveUnit();
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setDouble(Glib::ustring("/tools/shapes/rect/") + value_name, sp_units_get_pixels(adj->value, *unit));
}
@@ -3062,8 +3064,8 @@ static void sp_rtb_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *
sp_rtb_sensitivize( tbl );
if (modmade) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_RECT,
- _("Change rectangle"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_RECT,
+ _("Change rectangle"));
}
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
@@ -3430,7 +3432,7 @@ static void box3d_persp_tb_event_attr_changed(Inkscape::XML::Node *repr,
}
// set freeze so that it can be caught in box3d_angle_z_value_changed() (to avoid calling
- // sp_document_maybe_done() when the document is undo insensitive)
+ // SPDocumentUndo::maybeDone() when the document is undo insensitive)
g_object_set_data(G_OBJECT(tbl), "freeze", GINT_TO_POINTER(TRUE));
// TODO: Only update the appropriate part of the toolbar
@@ -3514,7 +3516,7 @@ static void box3d_angle_value_changed(GtkAdjustment *adj, GObject *dataKludge, P
SP_OBJECT(persp)->updateRepr();
// TODO: use the correct axis here, too
- sp_document_maybe_done(document, "perspangle", SP_VERB_CONTEXT_3DBOX, _("3D Box: Change perspective (angle of infinite axis)"));
+ DocumentUndo::maybeDone(document, "perspangle", SP_VERB_CONTEXT_3DBOX, _("3D Box: Change perspective (angle of infinite axis)"));
g_object_set_data( dataKludge, "freeze", GINT_TO_POINTER(FALSE) );
}
@@ -3709,7 +3711,7 @@ static void sp_spl_tb_value_changed(GtkAdjustment *adj, GObject *tbl, Glib::ustr
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setDouble("/tools/shapes/spiral/" + value_name, adj->value);
}
@@ -3740,8 +3742,8 @@ static void sp_spl_tb_value_changed(GtkAdjustment *adj, GObject *tbl, Glib::ustr
g_free(namespaced_name);
if (modmade) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SPIRAL,
- _("Change spiral"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SPIRAL,
+ _("Change spiral"));
}
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
@@ -5303,7 +5305,7 @@ sp_arctb_startend_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *v
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setDouble(Glib::ustring("/tools/shapes/arc/") + value_name, adj->value);
}
@@ -5351,8 +5353,8 @@ sp_arctb_startend_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *v
sp_arctb_sensitivize( tbl, adj->value, other->value );
if (modmade) {
- sp_document_maybe_done(sp_desktop_document(desktop), value_name, SP_VERB_CONTEXT_ARC,
- _("Arc: Change start/end"));
+ DocumentUndo::maybeDone(sp_desktop_document(desktop), value_name, SP_VERB_CONTEXT_ARC,
+ _("Arc: Change start/end"));
}
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
@@ -5373,7 +5375,7 @@ static void sp_arctb_end_value_changed(GtkAdjustment *adj, GObject *tbl)
static void sp_arctb_open_state_changed( EgeSelectOneAction *act, GObject *tbl )
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setBool("/tools/shapes/arc/open", ege_select_one_action_get_active(act) != 0);
}
@@ -5415,8 +5417,8 @@ static void sp_arctb_open_state_changed( EgeSelectOneAction *act, GObject *tbl )
}
if (modmade) {
- sp_document_done(sp_desktop_document(desktop), SP_VERB_CONTEXT_ARC,
- _("Arc: Change open/closed"));
+ DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_ARC,
+ _("Arc: Change open/closed"));
}
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
@@ -5746,7 +5748,7 @@ static void sp_lpetool_mode_changed(EgeSelectOneAction *act, GObject *tbl)
SP_LPETOOL_CONTEXT(desktop->event_context)->mode = type;
}
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setInt( "/tools/lpetool/mode", mode );
}
@@ -6083,7 +6085,7 @@ static void sp_erasertb_mode_changed( EgeSelectOneAction *act, GObject *tbl )
{
SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
bool eraserMode = ege_select_one_action_get_active( act ) != 0;
- if (sp_document_get_undo_sensitive(sp_desktop_document(desktop))) {
+ if (DocumentUndo::getUndoSensitive(sp_desktop_document(desktop))) {
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
prefs->setBool( "/tools/eraser/mode", eraserMode );
}
@@ -6383,8 +6385,8 @@ static void sp_text_fontfamily_value_changed( Ink_ComboBoxEntry_Action *act, GOb
g_free (family);
// Save for undo
- sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
- _("Text: Change font family"));
+ DocumentUndo::done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
+ _("Text: Change font family"));
sp_repr_css_attr_unref (css);
// unfreeze
@@ -6430,8 +6432,8 @@ static void sp_text_fontsize_value_changed( Ink_ComboBoxEntry_Action *act, GObje
sp_desktop_set_style (desktop, css, true, true);
// Save for undo
- sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "ttb:size", SP_VERB_NONE,
- _("Text: Change font size"));
+ DocumentUndo::maybeDone(sp_desktop_document(SP_ACTIVE_DESKTOP), "ttb:size", SP_VERB_NONE,
+ _("Text: Change font size"));
// If no selected objects, set default.
SPStyle *query = sp_style_new (SP_ACTIVE_DOCUMENT);
@@ -6576,8 +6578,8 @@ static void sp_text_style_changed( InkToggleAction* act, GObject *tbl )
// Do we need to update other CSS values?
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
sp_desktop_set_style (desktop, css, true, true);
- sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
- _("Text: Change font style"));
+ DocumentUndo::done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
+ _("Text: Change font style"));
sp_repr_css_attr_unref (css);
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
@@ -6653,8 +6655,8 @@ static void sp_text_script_changed( InkToggleAction* act, GObject *tbl )
sp_desktop_set_style (desktop, css, true, false);
// Save for undo
- sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "ttb:script", SP_VERB_NONE,
- _("Text: Change superscript or subscript"));
+ DocumentUndo::maybeDone(sp_desktop_document(SP_ACTIVE_DESKTOP), "ttb:script", SP_VERB_NONE,
+ _("Text: Change superscript or subscript"));
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
}
@@ -6797,8 +6799,8 @@ static void sp_text_align_mode_changed( EgeSelectOneAction *act, GObject *tbl )
sp_style_unref(query);
sp_desktop_set_style (desktop, css, true, true);
- sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
- _("Text: Change alignment"));
+ DocumentUndo::done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
+ _("Text: Change alignment"));
sp_repr_css_attr_unref (css);
gtk_widget_grab_focus (GTK_WIDGET(desktop->canvas));
@@ -6836,8 +6838,8 @@ static void sp_text_lineheight_value_changed( GtkAdjustment *adj, GObject *tbl )
}
// Save for undo
- sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "ttb:line-height", SP_VERB_NONE,
- _("Text: Change line-height"));
+ DocumentUndo::maybeDone(sp_desktop_document(SP_ACTIVE_DESKTOP), "ttb:line-height", SP_VERB_NONE,
+ _("Text: Change line-height"));
// If no selected objects, set default.
SPStyle *query = sp_style_new (SP_ACTIVE_DOCUMENT);
@@ -6875,8 +6877,8 @@ static void sp_text_wordspacing_value_changed( GtkAdjustment *adj, GObject *tbl
sp_desktop_set_style (desktop, css, true, false);
// Save for undo
- sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "ttb:word-spacing", SP_VERB_NONE,
- _("Text: Change word-spacing"));
+ DocumentUndo::maybeDone(sp_desktop_document(SP_ACTIVE_DESKTOP), "ttb:word-spacing", SP_VERB_NONE,
+ _("Text: Change word-spacing"));
// If no selected objects, set default.
SPStyle *query = sp_style_new (SP_ACTIVE_DOCUMENT);
@@ -6914,8 +6916,8 @@ static void sp_text_letterspacing_value_changed( GtkAdjustment *adj, GObject *tb
sp_desktop_set_style (desktop, css, true, false);
// Save for undo
- sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "ttb:letter-spacing", SP_VERB_NONE,
- _("Text: Change letter-spacing"));
+ DocumentUndo::maybeDone(sp_desktop_document(SP_ACTIVE_DESKTOP), "ttb:letter-spacing", SP_VERB_NONE,
+ _("Text: Change letter-spacing"));
// If no selected objects, set default.
SPStyle *query = sp_style_new (SP_ACTIVE_DOCUMENT);
@@ -6959,8 +6961,8 @@ static void sp_text_dx_value_changed( GtkAdjustment *adj, GObject *tbl )
}
// Save for undo
- sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "ttb:dx", SP_VERB_NONE,
- _("Text: Change dx (kern)"));
+ DocumentUndo::maybeDone(sp_desktop_document(SP_ACTIVE_DESKTOP), "ttb:dx", SP_VERB_NONE,
+ _("Text: Change dx (kern)"));
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
}
@@ -6990,8 +6992,8 @@ static void sp_text_dy_value_changed( GtkAdjustment *adj, GObject *tbl )
}
// Save for undo
- sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "ttb:dy", SP_VERB_NONE,
- _("Text: Change dy"));
+ DocumentUndo::maybeDone(sp_desktop_document(SP_ACTIVE_DESKTOP), "ttb:dy", SP_VERB_NONE,
+ _("Text: Change dy"));
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
}
@@ -7021,8 +7023,8 @@ static void sp_text_rotation_value_changed( GtkAdjustment *adj, GObject *tbl )
}
// Save for undo
- sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "ttb:rotate", SP_VERB_NONE,
- _("Text: Change rotate"));
+ DocumentUndo::maybeDone(sp_desktop_document(SP_ACTIVE_DESKTOP), "ttb:rotate", SP_VERB_NONE,
+ _("Text: Change rotate"));
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
}
@@ -7066,8 +7068,8 @@ static void sp_text_orientation_mode_changed( EgeSelectOneAction *act, GObject *
}
sp_desktop_set_style (SP_ACTIVE_DESKTOP, css, true, true);
- sp_document_done (sp_desktop_document (SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
- _("Text: Change orientation"));
+ DocumentUndo::done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_CONTEXT_TEXT,
+ _("Text: Change orientation"));
sp_repr_css_attr_unref (css);
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
@@ -7093,7 +7095,7 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/
items != NULL;
items = items->next)
{
- const gchar* id = SP_OBJECT_ID((SPItem *) items->data);
+ const gchar* id = reinterpret_cast<SPItem *>(items->data)->getId();
std::cout << " " << id << std::endl;
}
Glib::ustring selected_text = sp_text_get_selected_text((SP_ACTIVE_DESKTOP)->event_context);
@@ -7118,7 +7120,7 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/
for (GSList const *items = sp_desktop_selection(SP_ACTIVE_DESKTOP)->itemList();
items != NULL;
items = items->next) {
- // const gchar* id = SP_OBJECT_ID((SPItem *) items->data);
+ // const gchar* id = reinterpret_cast<SPItem *>(items->data)->getId();
// std::cout << " " << id << std::endl;
if( SP_IS_FLOWTEXT(( SPItem *) items->data )) {
isFlow = true;
@@ -7876,7 +7878,7 @@ static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl
Inkscape::Selection * selection = sp_desktop_selection(desktop);
SPDocument *doc = sp_desktop_document(desktop);
- if (!sp_document_get_undo_sensitive(doc)) {
+ if (!DocumentUndo::getUndoSensitive(doc)) {
return;
}
@@ -7900,7 +7902,7 @@ static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl
SPItem *item = (SPItem *) l->data;
if (cc_item_is_connector(item)) {
- sp_object_setAttribute(item, "inkscape:connector-type",
+ item->setAttribute( "inkscape:connector-type",
value, false);
item->avoidRef->handleSettingChange();
modmade = true;
@@ -7913,8 +7915,8 @@ static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl
prefs->setBool("/tools/connector/orthogonal", is_orthog);
}
- sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
- is_orthog ? _("Set connector type: orthogonal"): _("Set connector type: polyline"));
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_CONNECTOR,
+ is_orthog ? _("Set connector type: orthogonal"): _("Set connector type: polyline"));
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
}
@@ -7925,7 +7927,7 @@ static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl)
Inkscape::Selection * selection = sp_desktop_selection(desktop);
SPDocument *doc = sp_desktop_document(desktop);
- if (!sp_document_get_undo_sensitive(doc)) {
+ if (!DocumentUndo::getUndoSensitive(doc)) {
return;
}
@@ -7948,7 +7950,7 @@ static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl)
SPItem *item = (SPItem *) l->data;
if (cc_item_is_connector(item)) {
- sp_object_setAttribute(item, "inkscape:connector-curvature",
+ item->setAttribute( "inkscape:connector-curvature",
value, false);
item->avoidRef->handleSettingChange();
modmade = true;
@@ -7961,8 +7963,8 @@ static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl)
prefs->setDouble(Glib::ustring("/tools/connector/curvature"), newValue);
}
- sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
- _("Change connector curvature"));
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_CONNECTOR,
+ _("Change connector curvature"));
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
}
@@ -7973,7 +7975,7 @@ static void connector_spacing_changed(GtkAdjustment *adj, GObject* tbl)
SPDesktop *desktop = (SPDesktop *) g_object_get_data( tbl, "desktop" );
SPDocument *doc = sp_desktop_document(desktop);
- if (!sp_document_get_undo_sensitive(doc)) {
+ if (!DocumentUndo::getUndoSensitive(doc)) {
return;
}
@@ -8009,8 +8011,8 @@ static void connector_spacing_changed(GtkAdjustment *adj, GObject* tbl)
g_slist_free(items);
}
- sp_document_done(doc, SP_VERB_CONTEXT_CONNECTOR,
- _("Change connector spacing"));
+ DocumentUndo::done(doc, SP_VERB_CONTEXT_CONNECTOR,
+ _("Change connector spacing"));
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
}
@@ -8030,7 +8032,7 @@ static void sp_connector_graph_layout(void)
prefs->setInt("/options/clonecompensation/value", saved_compensation);
- sp_document_done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_DIALOG_ALIGN_DISTRIBUTE, _("Arrange connector network"));
+ DocumentUndo::done(sp_desktop_document(SP_ACTIVE_DESKTOP), SP_VERB_DIALOG_ALIGN_DISTRIBUTE, _("Arrange connector network"));
}
static void sp_directed_graph_layout_toggled( GtkToggleAction* act, GtkObject * /*tbl*/ )
@@ -8060,21 +8062,17 @@ static void connector_tb_event_attr_changed(Inkscape::XML::Node *repr,
{
GtkWidget *tbl = GTK_WIDGET(data);
- if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
- return;
- }
- if (strcmp(name, "inkscape:connector-spacing") == 0)
- {
- GtkAdjustment *adj = (GtkAdjustment*)
- gtk_object_get_data(GTK_OBJECT(tbl), "spacing");
+ if ( !g_object_get_data(G_OBJECT(tbl), "freeze")
+ && (strcmp(name, "inkscape:connector-spacing") == 0) ) {
+ GtkAdjustment *adj = static_cast<GtkAdjustment*>(gtk_object_get_data(GTK_OBJECT(tbl), "spacing"));
gdouble spacing = defaultConnSpacing;
sp_repr_get_double(repr, "inkscape:connector-spacing", &spacing);
gtk_adjustment_set_value(adj, spacing);
gtk_adjustment_value_changed(adj);
- }
- spinbutton_defocus(GTK_OBJECT(tbl));
+ spinbutton_defocus(GTK_OBJECT(tbl));
+ }
}
static void sp_connector_new_connection_point(GtkWidget *, GObject *tbl)
diff --git a/src/xml/helper-observer.cpp b/src/xml/helper-observer.cpp
index 620a88d8c..ce902ba75 100644
--- a/src/xml/helper-observer.cpp
+++ b/src/xml/helper-observer.cpp
@@ -11,10 +11,12 @@ SignalObserver::SignalObserver()
// Add this observer to the SPObject and remove it from any previous object
void SignalObserver::set(SPObject* o)
{
- if(_oldsel && _oldsel->repr)
- _oldsel->repr->removeObserver(*this);
- if(o && o->repr)
- o->repr->addObserver(*this);
+ // XML Tree being used direcly in this function in the following code
+ // while it shouldn't be
+ if(_oldsel && _oldsel->getRepr())
+ _oldsel->getRepr()->removeObserver(*this);
+ if(o && o->getRepr())
+ o->getRepr()->addObserver(*this);
_oldsel = o;
}
diff --git a/src/xml/node-iterators.h b/src/xml/node-iterators.h
index 3d09dfd1b..389d70be0 100644
--- a/src/xml/node-iterators.h
+++ b/src/xml/node-iterators.h
@@ -23,6 +23,7 @@ struct NodeSiblingIteratorStrategy {
return ( node ? node->next() : NULL );
}
};
+
struct NodeParentIteratorStrategy {
static Node const *next(Node const *node) {
return ( node ? node->parent() : NULL );
diff --git a/src/xml/rebase-hrefs.cpp b/src/xml/rebase-hrefs.cpp
index c3876725d..065517160 100644
--- a/src/xml/rebase-hrefs.cpp
+++ b/src/xml/rebase-hrefs.cpp
@@ -201,10 +201,11 @@ Inkscape::XML::calc_abs_doc_base(gchar const *const doc_base)
*/
void Inkscape::XML::rebase_hrefs(SPDocument *const doc, gchar const *const new_base, bool const spns)
{
- if (!doc->base)
+ if (!doc->getBase()) {
return;
+ }
- gchar *const old_abs_base = calc_abs_doc_base(doc->base);
+ gchar *const old_abs_base = calc_abs_doc_base(doc->getBase());
gchar *const new_abs_base = calc_abs_doc_base(new_base);
/* TODO: Should handle not just image but also:
@@ -227,7 +228,7 @@ void Inkscape::XML::rebase_hrefs(SPDocument *const doc, gchar const *const new_b
*
* Note also that Inkscape only supports fragment hrefs (href="#pattern257") for many of these
* cases. */
- GSList const *images = sp_document_get_resource_list(doc, "image");
+ GSList const *images = doc->getResourceList("image");
for (GSList const *l = images; l != NULL; l = l->next) {
Inkscape::XML::Node *ir = SP_OBJECT_REPR(l->data);
diff --git a/src/xml/repr-io.cpp b/src/xml/repr-io.cpp
index b1320a4a3..5f7654ba8 100644
--- a/src/xml/repr-io.cpp
+++ b/src/xml/repr-io.cpp
@@ -1,5 +1,3 @@
-#define __SP_REPR_IO_C__
-
/*
* Dirty DOM-like tree
*
diff --git a/src/xml/repr-sorting.cpp b/src/xml/repr-sorting.cpp
index df1d2cbb8..056236d33 100644
--- a/src/xml/repr-sorting.cpp
+++ b/src/xml/repr-sorting.cpp
@@ -3,18 +3,16 @@
#include "xml/repr.h"
#include "xml/node-iterators.h"
-static bool
-same_repr(Inkscape::XML::Node &a, Inkscape::XML::Node &b)
+static bool same_repr(Inkscape::XML::Node const &a, Inkscape::XML::Node const &b)
{
/* todo: I'm not certain that it's legal to take the address of a reference. Check the exact wording of the spec on this matter. */
return &a == &b;
}
-Inkscape::XML::Node *
-LCA(Inkscape::XML::Node *a, Inkscape::XML::Node *b)
+Inkscape::XML::Node const *LCA(Inkscape::XML::Node const *a, Inkscape::XML::Node const *b)
{
using Inkscape::Algorithms::longest_common_suffix;
- Inkscape::XML::Node *ancestor = longest_common_suffix<Inkscape::XML::NodeParentIterator>(
+ Inkscape::XML::Node const *ancestor = longest_common_suffix<Inkscape::XML::NodeConstParentIterator>(
a, b, NULL, &same_repr
);
if ( ancestor && ancestor->type() != Inkscape::XML::DOCUMENT_NODE ) {
@@ -24,22 +22,30 @@ LCA(Inkscape::XML::Node *a, Inkscape::XML::Node *b)
}
}
-/**
- * Returns a child of \a ancestor such that ret is itself an ancestor of \a descendent.
- *
- * The current version returns NULL if ancestor or descendent is NULL, though future versions may
- * call g_log. Please update this comment if you rely on the current behaviour.
- */
-Inkscape::XML::Node *
-AncetreFils(Inkscape::XML::Node *descendent, Inkscape::XML::Node *ancestor)
+Inkscape::XML::Node *LCA(Inkscape::XML::Node *a, Inkscape::XML::Node *b)
{
- if (descendent == NULL || ancestor == NULL)
- return NULL;
- if (sp_repr_parent(descendent) == ancestor)
- return descendent;
- return AncetreFils(sp_repr_parent(descendent), ancestor);
+ Inkscape::XML::Node const *tmp = LCA(const_cast<Inkscape::XML::Node const *>(a), const_cast<Inkscape::XML::Node const *>(b));
+ return const_cast<Inkscape::XML::Node *>(tmp);
}
+Inkscape::XML::Node const *AncetreFils(Inkscape::XML::Node const *descendent, Inkscape::XML::Node const *ancestor)
+{
+ Inkscape::XML::Node const *result = 0;
+ if ( descendent && ancestor ) {
+ if (descendent->parent() == ancestor) {
+ result = descendent;
+ } else {
+ result = AncetreFils(descendent->parent(), ancestor);
+ }
+ }
+ return result;
+}
+
+Inkscape::XML::Node *AncetreFils(Inkscape::XML::Node *descendent, Inkscape::XML::Node *ancestor)
+{
+ Inkscape::XML::Node const * tmp = AncetreFils(const_cast<Inkscape::XML::Node const*>(descendent), const_cast<Inkscape::XML::Node const*>(ancestor));
+ return const_cast<Inkscape::XML::Node *>(tmp);
+}
/*
Local Variables:
diff --git a/src/xml/repr-sorting.h b/src/xml/repr-sorting.h
index 7d5542f67..d560dfa26 100644
--- a/src/xml/repr-sorting.h
+++ b/src/xml/repr-sorting.h
@@ -10,6 +10,16 @@
#include "xml/xml-forward.h"
Inkscape::XML::Node *LCA(Inkscape::XML::Node *a, Inkscape::XML::Node *b);
+Inkscape::XML::Node const *LCA(Inkscape::XML::Node const *a, Inkscape::XML::Node const *b);
+
+/**
+ * Returns a child of \a ancestor such that ret is itself an ancestor of \a descendent.
+ *
+ * The current version returns NULL if ancestor or descendent is NULL, though future versions may
+ * call g_log. Please update this comment if you rely on the current behaviour.
+ */
+Inkscape::XML::Node const *AncetreFils(Inkscape::XML::Node const *descendent, Inkscape::XML::Node const *ancestor);
+
Inkscape::XML::Node *AncetreFils(Inkscape::XML::Node *descendent, Inkscape::XML::Node *ancestor);
#endif // SEEN_XML_REPR_SOTRING_H
diff --git a/src/xml/repr-util.cpp b/src/xml/repr-util.cpp
index d310639ba..9405cde01 100644
--- a/src/xml/repr-util.cpp
+++ b/src/xml/repr-util.cpp
@@ -1,5 +1,3 @@
-#define __SP_REPR_UTIL_C__
-
/** \file
* Miscellaneous helpers for reprs.
*/
@@ -7,6 +5,7 @@
/*
* Authors:
* Lauris Kaplinski <lauris@ximian.com>
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 1999-2000 Lauris Kaplinski
* Copyright (C) 2000-2001 Ximian, Inc.
@@ -354,8 +353,7 @@ long long int sp_repr_get_int_attribute(Inkscape::XML::Node *repr, char const *k
* -1 first object's position is less than the second
* @todo Rewrite this function's description to be understandable
*/
-int
-sp_repr_compare_position(Inkscape::XML::Node *first, Inkscape::XML::Node *second)
+int sp_repr_compare_position(Inkscape::XML::Node const *first, Inkscape::XML::Node const *second)
{
int p1, p2;
if (sp_repr_parent(first) == sp_repr_parent(second)) {
@@ -368,7 +366,7 @@ sp_repr_compare_position(Inkscape::XML::Node *first, Inkscape::XML::Node *second
instance. */
// Find the lowest common ancestor(LCA)
- Inkscape::XML::Node *ancestor = LCA(first, second);
+ Inkscape::XML::Node const *ancestor = LCA(first, second);
g_assert(ancestor != NULL);
if (ancestor == first) {
@@ -433,40 +431,35 @@ sp_repr_lookup_child(Inkscape::XML::Node *repr,
return NULL;
}
-/**
- * @brief Find an element node with the given name
- *
- * This function searches the descendants of the specified node depth-first for
- * the first XML node with the specified name.
- *
- * @param repr The node to start from
- * @param name The name of the element node to find
- * @param maxdepth Maximum search depth, or -1 for an unlimited depth
- * @return A pointer to the matching Inkscape::XML::Node
- * @relatesalso Inkscape::XML::Node
- */
-Inkscape::XML::Node *
-sp_repr_lookup_name( Inkscape::XML::Node *repr, gchar const *name, gint maxdepth )
+Inkscape::XML::Node const *sp_repr_lookup_name( Inkscape::XML::Node const *repr, gchar const *name, gint maxdepth )
{
+ Inkscape::XML::Node const *found = 0;
g_return_val_if_fail(repr != NULL, NULL);
g_return_val_if_fail(name != NULL, NULL);
GQuark const quark = g_quark_from_string(name);
- if ( (GQuark)repr->code() == quark ) return repr;
- if ( maxdepth == 0 ) return NULL;
-
- // maxdepth == -1 means unlimited
- if ( maxdepth == -1 ) maxdepth = 0;
+ if ( (GQuark)repr->code() == quark ) {
+ found = repr;
+ } else if ( maxdepth != 0 ) {
+ // maxdepth == -1 means unlimited
+ if ( maxdepth == -1 ) {
+ maxdepth = 0;
+ }
- Inkscape::XML::Node *found = NULL;
- for (Inkscape::XML::Node *child = repr->firstChild() ; child && !found; child = child->next() ) {
- found = sp_repr_lookup_name( child, name, maxdepth-1 );
+ for (Inkscape::XML::Node const *child = repr->firstChild() ; child && !found; child = child->next() ) {
+ found = sp_repr_lookup_name( child, name, maxdepth - 1 );
+ }
}
-
return found;
}
+Inkscape::XML::Node *sp_repr_lookup_name( Inkscape::XML::Node *repr, gchar const *name, gint maxdepth )
+{
+ Inkscape::XML::Node const *found = sp_repr_lookup_name( const_cast<Inkscape::XML::Node const *>(repr), name, maxdepth );
+ return const_cast<Inkscape::XML::Node *>(found);
+}
+
/**
* Determine if the node is a 'title', 'desc' or 'metadata' element.
*/
diff --git a/src/xml/repr.cpp b/src/xml/repr.cpp
index 4494d3fe6..0a384c9c1 100644
--- a/src/xml/repr.cpp
+++ b/src/xml/repr.cpp
@@ -1,5 +1,3 @@
-#define __SP_REPR_C__
-
/** \file
* A few non-inline functions of the C facade to Inkscape::XML::Node.
*/
diff --git a/src/xml/repr.h b/src/xml/repr.h
index 3b8d532fd..bde3e533f 100644
--- a/src/xml/repr.h
+++ b/src/xml/repr.h
@@ -3,6 +3,7 @@
*/
/* Authors:
* Lauris Kaplinski <lauris@kaplinski.com>
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 1999-2002 authors
* Copyright (C) 2000-2002 Ximian, Inc.
@@ -10,8 +11,8 @@
* Released under GNU GPL, read the file 'COPYING' for more information
*/
-#ifndef __SP_REPR_H__
-#define __SP_REPR_H__
+#ifndef SEEN_SP_REPR_H
+#define SEEN_SP_REPR_H
#include <stdio.h>
#include <glib/gtypes.h>
@@ -137,12 +138,29 @@ double sp_repr_get_double_attribute(Inkscape::XML::Node *repr, gchar const *key,
/// \deprecated Use sp_repr_get_int to check for success
long long int sp_repr_get_int_attribute(Inkscape::XML::Node *repr, gchar const *key, long long int def);
-int sp_repr_compare_position(Inkscape::XML::Node *first, Inkscape::XML::Node *second);
+int sp_repr_compare_position(Inkscape::XML::Node const *first, Inkscape::XML::Node const *second);
-/* Searching */
+// Searching
+/**
+ * @brief Find an element node with the given name
+ *
+ * This function searches the descendants of the specified node depth-first for
+ * the first XML node with the specified name.
+ *
+ * @param repr The node to start from
+ * @param name The name of the element node to find
+ * @param maxdepth Maximum search depth, or -1 for an unlimited depth
+ * @return A pointer to the matching Inkscape::XML::Node
+ * @relatesalso Inkscape::XML::Node
+ */
Inkscape::XML::Node *sp_repr_lookup_name(Inkscape::XML::Node *repr,
gchar const *name,
gint maxdepth = -1);
+
+Inkscape::XML::Node const *sp_repr_lookup_name(Inkscape::XML::Node const *repr,
+ gchar const *name,
+ gint maxdepth = -1);
+
Inkscape::XML::Node *sp_repr_lookup_child(Inkscape::XML::Node *repr,
gchar const *key,
gchar const *value);
@@ -152,7 +170,7 @@ inline Inkscape::XML::Node *sp_repr_document_first_child(Inkscape::XML::Document
return const_cast<Inkscape::XML::Node *>(doc->firstChild());
}
-#endif
+#endif // SEEN_SP_REPR_H
/*
Local Variables:
mode:c++