Code

Merge from trunk
authorTed Gould <ted@canonical.com>
Fri, 31 Oct 2008 15:06:16 +0000 (10:06 -0500)
committerTed Gould <ted@canonical.com>
Fri, 31 Oct 2008 15:06:16 +0000 (10:06 -0500)
52 files changed:
build.xml
configure.ac
share/icons/icons.svg
src/Makefile.am
src/dialogs/xml-tree.cpp
src/display/sp-canvas.cpp
src/draw-context.cpp
src/extension/internal/Makefile_insert
src/extension/internal/cairo-render-context.cpp
src/extension/internal/cairo-renderer.cpp
src/extension/internal/emf-win32-inout.cpp
src/extension/internal/emf-win32-inout.h
src/extension/internal/emf-win32-print.cpp
src/extension/internal/emf-win32-print.h
src/extension/internal/win32.cpp
src/extension/internal/win32.h
src/gradient-chemistry.cpp
src/gradient-chemistry.h
src/libgdl/Makefile_insert
src/libgdl/gdl-win32.c
src/libgdl/gdl-win32.h
src/libnrtype/FontFactory.cpp
src/libnrtype/FontInstance.cpp
src/libnrtype/Layout-TNG-Input.cpp
src/main.cpp
src/nodepath.cpp
src/pen-context.cpp
src/selection-chemistry.cpp
src/seltrans.cpp
src/snap-preferences.cpp
src/snap.cpp
src/snap.h
src/snapped-point.cpp
src/snapped-point.h
src/sp-gradient-test.h
src/sp-gradient.cpp
src/sp-gradient.h
src/sp-paint-server.cpp
src/sp-paint-server.h
src/sp-pattern.cpp
src/sp-pattern.h
src/sp-shape.cpp
src/svg/path-string.cpp
src/svg/path-string.h
src/svg/svg-affine.cpp
src/ui/dialog/Makefile_insert
src/ui/dialog/filedialogimpl-gtkmm.h
src/ui/dialog/filedialogimpl-win32.cpp
src/ui/dialog/filter-effects-dialog.cpp
src/ui/dialog/filter-effects-dialog.h
src/ui/widget/object-composite-settings.cpp
src/ui/widget/object-composite-settings.h

index c1095d79ae8cce3dc328a398f44fc107e798a979..8b89656800084afce01934a649732fbe872ff9ba 100644 (file)
--- a/build.xml
+++ b/build.xml
            <include name="obj/winmain.o"/>
            <include name="libinkscape.a"/>
        </fileset>
+       <!-- WARNING: If you change these libraries, don't forget to change them for inkview and cxxtests below as well! -->
        <libs>
            -L${devlibs}/lib
            ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} 
index 7b33e7647d650a7412af65c0771b9e19dc4b6a24..19f89316abdd98df4adee9ead4811ef565bd2f02 100644 (file)
@@ -192,7 +192,7 @@ AC_CHECK_HEADERS([gc.h gc/gc.h],
                                  break], [gc_ok=no], [$gc_libs])
                    break],
                  [gc_ok=no])
-if test "x$gc_ok" = "xyes"; then
+if test "x$gc_ok" = "xyes" && "x$cross_compiling" = "xno" ; then 
        AC_MSG_CHECKING([libgc version 6.4+])
        AC_RUN_IFELSE(
                [AC_LANG_SOURCE([[
@@ -248,7 +248,7 @@ AC_MSG_CHECKING([for Win32 platform])
 case "$host" in
   *-*-mingw*)
     platform_win32=yes
-    INKSCAPE_CFLAGS="$INKSCAPE_CFLAGS -mms-bitfields -DLIBXML_STATIC"
+    WIN32_CFLAGS="-mms-bitfields -DLIBXML_STATIC"
     ;;
   *)
     platform_win32=no
@@ -256,6 +256,7 @@ case "$host" in
 esac
 AC_MSG_RESULT([$platform_win32])
 AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes")
+AC_SUBST(WIN32_CFLAGS)
 
 AC_MSG_CHECKING([for Solaris platform])
 case "$host" in
@@ -282,10 +283,10 @@ AC_ARG_WITH(xft,
 
 if test "x$with_xft" != "xno" ; then
        dnl Test fontconfig package
-       PKG_CHECK_MODULES(XFT, xft, xft_ok=yes, xft_ok=no)
+       PKG_CHECK_MODULES(XFT, fontconfig, xft_ok=yes, xft_ok=no)
        if test "x$xft_ok" != "xyes"; then
                dnl test xft package
-               PKG_CHECK_MODULES(XFT, fontconfig, xft_ok=yes, xft_ok=no)
+               PKG_CHECK_MODULES(XFT, xft, xft_ok=yes, xft_ok=no)
                if test "x$xft_ok" != "xyes"; then
                        dnl Have to test xft presence
                        AC_CHECK_HEADER(X11/Xft/Xft.h, xft_ok=yes, xft_ok=no)
index 5e1b6078d5ce69cfafc51ebe2777feada42831ff..527bcb9910d9c22b064ac74d3ebaf3287dbf9e1c 100644 (file)
@@ -96,7 +96,7 @@
 <stop style="stop-color:#73d216;stop-opacity:1;" offset="0" id="stop4698" />
 <stop style="stop-color:#73d216;stop-opacity:0;" offset="1" id="stop4701" />
 </linearGradient>
-<marker inkscape:stockid="Arrow1Send" orient="auto" refY="0.0" refX="0.0" id="Arrow1Send" style="overflow:visible;">
+<marker inkscape:stockid="Arrow1Send" orient="auto" refY="0.0" refX="0.0" id="Arrow1Send" style="">
 <path id="path4834" d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;" transform="scale(0.2) rotate(180) translate(6,0)" />
 </marker>
 <linearGradient inkscape:collect="always" xlink:href="#linearGradient3480" id="linearGradient4618" x1="693.40259" y1="306.07037" x2="696.86676" y2="311.81979" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.999998,-0.937496)" />
 <radialGradient inkscape:collect="always" xlink:href="#linearGradient5724" id="radialGradient8474" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.434932,0,0,0.608696,-337.9418,82.56952)" cx="777" cy="209.35" fx="777" fy="209.35" r="11.5" />
 <linearGradient inkscape:collect="always" xlink:href="#linearGradient8482" id="linearGradient5633" x1="770.5" y1="200.25" x2="783" y2="214.25" gradientUnits="userSpaceOnUse" />
 <linearGradient inkscape:collect="always" xlink:href="#linearGradient8482" id="linearGradient5637" x1="763" y1="216.875" x2="782" y2="218.25" gradientUnits="userSpaceOnUse" />
-<filter id="ShadowBlur" filterUnits="userSpaceOnUse" x="0" y="0">
-<feGaussianBlur in="SourceAlpha" stdDeviation="3" result="blur" id="feGaussianBlur24" />
-</filter>
 <clipPath clipPathUnits="userSpaceOnUse" id="clipoutline1">
 <path id="outline1" d="M 54.1,12.5 12.9,54.7 C -2.7,70.3 23,69 32.3,74.9 36.6,77.7 18.5,81.3 22.2,85 c 3.6,3.7 21.7,7.1 25.3,10.7 3.6,3.7 -7.3,7.6 -3.7,11.3 3.5,3.7 11.9,0.2 13.4,8.6 1.1,6.2 15.4,3.1 21.8,-2.2 4,-3.4 -6.9,-3.4 -3.3,-7.1 9,-9.1 17,-4.1 20.3,-12.5 1.8,-4.5 -13.6,-7.7 -9.5,-10.6 9.8,-6.9 45.8,-10.4 29.2,-27 L 73,12.5 c -5.3,-5 -14,-5 -18.9,0 z m -9.9,64.7 c 0.9,0 30.8,4 19.3,7.1 -4.4,1.2 -24.6,-7.1 -19.3,-7.1 z m 57.2,16.6 c 0,2.1 16.3,3.3 15.4,-0.5 -1.3,-6.4 -13.6,-5.9 -15.4,0.5 z m -69.5,11.1 c 3.7,3.2 9.3,-0.7 11.1,-5.2 -3.6,-4.7 -16.9,0.3 -11.1,5.2 z m 67.5,-6.7 c -4.6,4.2 0.8,8.6 5.3,5.7 1.2,-0.8 -0.1,-4.7 -5.3,-5.7 z" />
 </clipPath>
 <linearGradient inkscape:collect="always" xlink:href="#eraserFill" id="linearGradient7424" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.13356,0,0,1.133368,339.5737,-131.407)" x1="101.09393" y1="221.06877" x2="112.20101" y2="234.00311" />
 <linearGradient inkscape:collect="always" xlink:href="#eraserFill" id="linearGradient7426" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.809546,0,0,0.809417,342.9983,-4.125322)" x1="144.08243" y1="157.82079" x2="176.86269" y2="188.41277" />
 <clipPath clipPathUnits="userSpaceOnUse" id="clipPath5905">
-<rect style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.3344132;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect5907" width="11.98896" height="11.88748" x="375.8356" y="138.7635" />
+<rect style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.3344132;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;" id="rect5907" width="11.98896" height="11.88748" x="375.8356" y="138.7635" />
 </clipPath>
 <linearGradient inkscape:collect="always" xlink:href="#linearGradient5704" id="linearGradient5389" gradientUnits="userSpaceOnUse" x1="113.7436" y1="149.37389" x2="123.97673" y2="167.55257" />
 <linearGradient inkscape:collect="always" xlink:href="#linearGradient5734" id="linearGradient5391" gradientUnits="userSpaceOnUse" x1="283.98041" y1="25.257681" x2="279.47864" y2="21.160408" />
 <radialGradient inkscape:collect="always" xlink:href="#linearGradient7836" id="radialGradient7842" cx="375.0941" cy="137.9821" fx="375.0941" fy="137.9821" r="1.111868" gradientUnits="userSpaceOnUse" />
 <linearGradient inkscape:collect="always" xlink:href="#linearGradient5663" id="linearGradient5376" gradientUnits="userSpaceOnUse" x1="872" y1="66" x2="865.5" y2="57.5" gradientTransform="translate(20,0)" />
 </defs>
-<sodipodi:namedview inkscape:guide-bbox="true" inkscape:current-layer="svg1" inkscape:grid-bbox="true" inkscape:pageopacity="1.0000000" pagecolor="#e8e8e4" snaptoguides="true" showguides="true" inkscape:window-y="0" inkscape:window-x="0" inkscape:window-height="1000" inkscape:window-width="1225" inkscape:cy="1184.005" inkscape:cx="636.4626" inkscape:zoom="3.242702" gridtolerance="6" snaptogrid="false" showgrid="true" id="base" inkscape:document-units="px" inkscape:grid-points="true" guidetolerance="8" fill="#8ab3de" stroke="#646464" inkscape:object-nodes="true" objecttolerance="11" inkscape:snap-bbox="false" inkscape:snap-nodes="true" inkscape:bbox-nodes="true" inkscape:bbox-paths="true" inkscape:snap-global="true">
+<sodipodi:namedview inkscape:guide-bbox="true" inkscape:current-layer="svg1" inkscape:grid-bbox="true" inkscape:pageopacity="1.0000000" pagecolor="#e8e8e4" snaptoguides="true" showguides="true" inkscape:window-y="0" inkscape:window-x="0" inkscape:window-height="1000" inkscape:window-width="1225" inkscape:cy="1039.679" inkscape:cx="203.3736" inkscape:zoom="5.492948" gridtolerance="6" snaptogrid="false" showgrid="true" id="base" inkscape:document-units="px" inkscape:grid-points="true" guidetolerance="8" fill="#8ab3de" stroke="#646464" inkscape:object-nodes="true" objecttolerance="11" inkscape:snap-bbox="false" inkscape:snap-nodes="true" inkscape:bbox-nodes="true" inkscape:bbox-paths="true" inkscape:snap-global="true">
 <inkscape:grid type="xygrid" id="grid9252" originx="0px" originy="0px" spacingx="0.5px" spacingy="0.5px" empspacing="2" visible="true" enabled="false" />
 <sodipodi:guide orientation="0,1" position="630.08101,968.02815" id="guide4946" />
 <sodipodi:guide orientation="0,1" position="618.47896,943.93157" id="guide4948" />
@@ -686,7 +683,6 @@ http://www.inkscape.org/</dc:description>
 </rdf:RDF>
 </metadata>
 <g id="inkscape_options" transform="matrix(0.1336824,0,0,0.1336824,329.5233,64.55912)">
-<path class="base-shadow" d="M 8,62.9 C 5.5,72.3 23.4,74 32.3,77.6 34.5,78.6 33.5,74.4 32.4,73.4 25.2,69.8 10.2,69 8,62.9 z M 119.6,63.9 C 116.9,72.8 94.6,77 86.6,81.7 84.5,82.9 83.4,88 87,86 96.6,80.7 122.8,75.3 119.6,63.9 z M 44.3,75.7 C 41,75.7 39,77.3 44.9,79.4 52.6,80 63.7,83 66,84 69.8,77.5 45,75.7 44.3,75.7 z M 23.2,84.2 C 21.8,83 20.3,85.2 22.3,87 25.8,90.8 44.9,94.9 48.6,98.5 50.4,99.4 49.8,96 48.7,94.9 45.3,91.5 28.2,87.6 23.2,84.2 z M 101.7,93.9 C 101.9,97.4 117.5,101.5 116.9,94 116.7,91.4 101.5,91.3 101.7,93.9 z M 95.6,93.7 C 92.2,100.8 84.3,96.2 75.8,104.8 73.5,106.5 74.5,111 76.8,108.6 85.5,100.4 93.2,104.9 96.2,96 96.4,95 96.2,94.4 95.6,93.7 z M 31.5,106 C 36,111 41.3,107.8 43,100.3 42.6,98.6 26.2,100.4 31.5,106 z M 98.7,100.2 C 93.3,104.6 102,109.6 104.7,106 108.3,101.3 101.3,102.6 98.7,100.2 z M 43.5,105 C 42.6,106.2 42.7,108 43.8,109.2 47.4,112.8 55.8,109.3 57.3,117.8 58.4,123.9 72.5,121.3 79.3,116.4 80.8,114.8 80.9,111 79,112 49.2,125.4 68.2,108.2 43.5,105 z" id="path30" style="fill:#000000;filter:url(#ShadowBlur)" />
 <use class="outline-big" xlink:href="#outline1" id="use32" style="opacity:0.1;fill:none;stroke:none" x="0" y="0" width="128" height="128" />
 <use class="outline-small" xlink:href="#outline1" id="use34" style="opacity:0.2;fill:none;stroke:none" x="0" y="0" width="128" height="128" />
 <use class="black;" xlink:href="#outline1" id="use36" x="0" y="0" width="128" height="128" />
@@ -1044,11 +1040,11 @@ http://www.inkscape.org/</dc:description>
 <g id="selection_up" transform="translate(235.0423,-49.96096)" style="display:inline">
 <rect y="175" x="-45" height="16" width="16" id="rect10473" style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" />
 <path style="fill:none;stroke:url(#linearGradient5835);stroke-width:1.9999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none" d="M -43.97588,175.9908 C -39.0022,175.9908 -39.0022,175.9908 -39.0022,175.9908" id="path10475" />
-<path id="path10477" d="M -32.0022,186.9908 -33.0022,186.9908 -33.0022,185.9908 -32.0022,185.9908 -32.0022,184.9908 -34.0022,184.9908 -34.0022,183.9908 -33.0022,183.9908 -33.0022,182.9908 -32.0022,182.9908 -32.0022,181.9908 -31.0022,181.9908 -31.0022,182.9908 -30.0022,182.9908 -30.0022,183.9908 -29.0022,183.9908 -29.0022,184.9908 -31.0022,184.9908 -31.0022,185.9908 -31.5022,186.4908 -32.0022,186.9908 z" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" sodipodi:nodetypes="ccccccccccccccccccccc" />
 <rect y="178.4609" x="-44.50185" height="2.002599" width="14.99927" id="rect10479" style="color:#000000;fill:url(#linearGradient5837);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5839);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" />
 <path style="fill:none;stroke:url(#linearGradient5842);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;display:inline" d="M -44.00221,185.9908 C -36.06173,185.9908 -36.06173,185.9908 -36.06173,185.9908" id="path10483" />
 <use x="0" y="0" xlink:href="#path10475" id="use7634" transform="translate(-0.0387999,6.97005)" width="1250" height="1250" />
 <use x="0" y="0" xlink:href="#use7634" id="use7636" transform="translate(0,6)" width="1250" height="1250" />
+<use transform="matrix(-1,0,0,-1,-74.00271,364.9954)" style="display:inline" x="0" y="0" xlink:href="#path10505" id="use5413" width="1250" height="1250" />
 </g>
 <g id="selection_down" transform="translate(235.0423,-29.95179)" style="display:inline">
 <rect y="175" x="-45" height="16" width="16" id="rect10501" style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" />
@@ -1083,15 +1079,15 @@ http://www.inkscape.org/</dc:description>
 <rect y="175" x="-45" height="16" width="16" id="rect7457" style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" />
 <path style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" d="M -37.5,175.5 -37.5,190.5 -43.5,190.5 -37.5,175.5 z" id="path7459" sodipodi:nodetypes="cccc" />
 <path style="color:#000000;fill:url(#linearGradient6690);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6731);stroke-width:1.0000006;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" d="M -29.5,188.5 -44.5,188.5 -44.5,182.5 -29.5,188.5 z" id="path7461" sodipodi:nodetypes="cccc" />
-<path id="path7463" d="M -31.959,178.9609 -30.959,178.9609 -31,182 -29,182 -29,183 -30,183 -30,184 -31,184 -31,185 -32,185 -32,184 -33,184 -33,183 -34,183 -34,182 -32,182 -31.959,178.9609 z" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" sodipodi:nodetypes="ccccccccccccccccc" />
 <use style="display:inline" x="0" y="0" xlink:href="#path7604" id="use7610" width="1250" height="1250" />
 <use style="display:inline" x="0" y="0" xlink:href="#path7606" id="use7613" width="1250" height="1250" />
+<use transform="translate(0.070634,3.868655e-4)" style="display:inline" x="0" y="0" xlink:href="#path7514" id="use5439" width="1250" height="1250" />
 </g>
 <g id="object_rotate_90_CW" transform="translate(235.0423,30.03905)" style="display:inline">
 <rect y="175" x="-45" height="16" width="16" id="rect7508" style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" />
 <path style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" d="M -37.5,175.5 -37.5,190.5 -43.5,190.5 -37.5,175.5 z" id="path7510" sodipodi:nodetypes="cccc" />
 <path style="color:#000000;fill:url(#linearGradient6672);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7548);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" d="M -29.5,188.5 -44.5,188.5 -44.5,182.5 -29.5,188.5 z" id="path7512" sodipodi:nodetypes="cccc" />
-<path id="path7514" d="M -32.041,178.9609 -31.041,178.9609 -31,182 -29,182 -29,183 -30,183 -30,184 -31,184 -31,185 -32,185 -32,184 -33,184 -33,183 -34,183 -34,182 -32,182 -32.041,178.9609 z" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" sodipodi:nodetypes="ccccccccccccccccc" />
+<path id="path7514" d="M -32.01635,178.9609 -31.01635,178.9609 -31,182 -29,182 -29,183 -30,183 -30,184 -31,184 -31,185 -32,185 -32,184 -33,184 -33,183 -34,183 -34,182 -32,182 -32.01635,178.9609 z" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" sodipodi:nodetypes="ccccccccccccccccc" />
 <path style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1" d="M -35.541,177.4609 -33.541,177.4609" id="path7604" sodipodi:nodetypes="cc" />
 <path style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M -33.041,178.4609 -32.041,178.4609" id="path7606" />
 </g>
@@ -2192,9 +2188,9 @@ http://www.inkscape.org/</dc:description>
 <use x="0" y="0" xlink:href="#g3813" id="use3728" transform="translate(-720.4065,259.3541)" width="1250" height="1250" />
 <use height="1250" width="1250" transform="matrix(0.866026,0.5,-0.5,0.866026,-450.7461,-366.064)" id="use3744" xlink:href="#g3813" y="0" x="0" />
 <g transform="translate(84.4787,-188)" id="nodes_show_handles">
-<rect style="opacity:0;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.8;marker:none;visibility:visible;display:inline;overflow:visible" id="rect3742" width="12" height="12" x="735" y="57" transform="translate(-64.4787,188)" />
-<path style="color:#000000;fill:none;stroke:#909090;stroke-width:1.0000004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" d="M 682.0213,245.5 C 678.5213,246 673.5213,249.5 673.5213,253.5" id="path4641" sodipodi:nodetypes="cc" />
-<path style="color:#000000;fill:none;stroke:#646464;stroke-width:1.0000004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" d="M 673.0213,247.5 673.0213,253.5" id="path4638" sodipodi:nodetypes="cc" />
+<rect style="opacity:0;color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.8;marker:none;visibility:visible;display:inline;" id="rect3742" width="12" height="12" x="735" y="57" transform="translate(-64.4787,188)" />
+<path style="color:#000000;fill:none;stroke:#909090;stroke-width:1.0000004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M 682.0213,245.5 C 678.5213,246 673.5213,249.5 673.5213,253.5" id="path4641" sodipodi:nodetypes="cc" />
+<path style="color:#000000;fill:none;stroke:#646464;stroke-width:1.0000004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M 673.0213,247.5 673.0213,253.5" id="path4638" sodipodi:nodetypes="cc" />
 <use transform="translate(703.5311,60.30166)" x="0" y="0" xlink:href="#rect10675" id="use3738" width="1250" height="1250" />
 <use transform="translate(704.4975,77.02417)" x="0" y="0" xlink:href="#use5758" id="use4635" width="1250" height="1250" />
 </g>
@@ -2253,7 +2249,7 @@ http://www.inkscape.org/</dc:description>
 <rect style="color:#000000;fill:#ffffff;fill-opacity:0;fill-rule:evenodd;stroke:none;stroke-width:0.83269;marker:none;display:inline" id="rect12545" width="14.52438" height="18.61259" x="707.1481" y="235.935" />
 <g id="g12547" transform="translate(1.571853e-4,-2.424845)">
 <path id="path12549" style="color:#000000;fill:url(#linearGradient12555);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.0974514;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" d="M 719.0955,243.8639 C 719.8265,244.5813 720.5076,245.5349 721.1508,246.7745 719.2872,250.3658 717.7437,251.8726 714.9482,251.8726 712.1528,251.8726 709.9355,249.62 707.6335,246.6911 709.4972,243.0997 711.8328,241.9924 714.3111,241.9924 714.744,241.9924 715.1623,242.021 715.5669,242.0826 715.9527,242.1414 716.3261,242.2302 716.6881,242.353" sodipodi:nodetypes="ccscsss" />
-<path id="path12562" style="color:#000000;fill:none;stroke:#000000;stroke-width:1.0974512;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" d="M 714.4315,249.1956 714.5074,256.0334 M 716.8989,248.7953 718.1936,254.8548 M 719.3476,247.864 721.0799,252.4594 M 712.0036,249.0005 710.3345,254.8614 M 709.6897,247.3399 707.7171,252.3217" />
+<path id="path12562" style="color:#000000;fill:none;stroke:#000000;stroke-width:1.0974512;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M 714.4315,249.1956 714.5074,256.0334 M 716.8989,248.7953 718.1936,254.8548 M 719.3476,247.864 721.0799,252.4594 M 712.0036,249.0005 710.3345,254.8614 M 709.6897,247.3399 707.7171,252.3217" />
 </g>
 </g>
 <g style="display:inline" id="properties_fill" transform="matrix(1,0,0,0.923129,-657.921,478.0757)">
@@ -2354,9 +2350,9 @@ http://www.inkscape.org/</dc:description>
 <path id="path2647" d="M 432.3932,60.65307 439.3236,53.25005 439.3236,56.89614 C 439.3236,56.89614 446.4899,56.8473 448.9899,56.8473 448.9899,56.8473 449.0231,56.99985 449.0231,70.32655 449.0231,70.32655 444.5537,70.34731 443.4548,70.32655 443.4548,70.32655 443.4577,64.35493 443.4577,64.35493 442.2077,64.35493 439.3085,64.35493 439.3085,64.35493 L 439.3236,68.25005 432.3932,60.65307 z" style="fill:none;stroke:#000000;stroke-width:1.3971461;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
 </g>
 <g id="g11177" transform="translate(-254.4684,4.926264)">
-<path style="color:#000000;fill:url(#linearGradient5391);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5393);stroke-width:0.7119799;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" id="path14377" d="M 284,23 A 3,3 0 1 1 278,23 3,3 0 1 1 284,23 z" transform="matrix(1.331759,0,0,1.327869,-53.22381,-6.040984)" />
-<path style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" d="M 320.4594,22.00781 321.4594,21.00781 321.4594,25.00781 320.4594,25.00781 320.4594,22.00781 z" id="path11169" />
-<path style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" d="M 319.4609,24.02096 321.4609,24.02096 321.4609,25.02096 318.4609,25.02096 319.4609,24.02096 z" id="path11171" />
+<path style="color:#000000;fill:url(#linearGradient5391);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5393);stroke-width:0.7119799;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" id="path14377" d="M 284,23 A 3,3 0 1 1 278,23 3,3 0 1 1 284,23 z" transform="matrix(1.331759,0,0,1.327869,-53.22381,-6.040984)" />
+<path style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" d="M 320.4594,22.00781 321.4594,21.00781 321.4594,25.00781 320.4594,25.00781 320.4594,22.00781 z" id="path11169" />
+<path style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" d="M 319.4609,24.02096 321.4609,24.02096 321.4609,25.02096 318.4609,25.02096 319.4609,24.02096 z" id="path11171" />
 </g>
 </g>
 <g id="g3735" transform="matrix(0.76838,0,0,0.776759,4.51551,573.2782)" />
@@ -2593,7 +2589,7 @@ http://www.inkscape.org/</dc:description>
 <path style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" d="M 459.326,449.367 469.844,444.248 C 471.078,444.895 471.386,445.263 472.077,446.761" id="path4825" sodipodi:nodetypes="ccc" transform="matrix(1.28,0,0,1.28,-578.362,-566.08)" />
 <path style="fill:none;stroke:#000000;stroke-width:1.28;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 15.3452,14.3489 C 13.4479,-3.0346 8.35128,-2.74598 9.06756,6.76043" id="path31979" sodipodi:nodetypes="cs" />
 <path sodipodi:type="arc" style="fill:#c8c8c8;fill-opacity:1;stroke:#2e3436;stroke-width:1.138871;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" id="path31981" sodipodi:cx="12.875" sodipodi:cy="14.875" sodipodi:rx="1.3125" sodipodi:ry="1.3125" d="M 14.1875,14.875 C 14.1875,15.5995 13.5995,16.1875 12.875,16.1875 12.1505,16.1875 11.5625,15.5995 11.5625,14.875 11.5625,14.1505 12.1505,13.5625 12.875,13.5625 13.5995,13.5625 14.1875,14.1505 14.1875,14.875 z" transform="matrix(1.12392,0,0,1.12392,0.83338,-2.58525)" />
-<path style="color:#000000;fill:url(#radialGradient4365);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M 456.281,449.062 C 456.213,449.07 456.154,449.096 456.094,449.125 455.133,449.59 455.637,452.694 457.25,456.062 458.238,458.125 459.43,459.799 460.406,460.688 460.405,460.698 460.407,460.708 460.406,460.719 460.337,461.549 459.647,462.428 459.378,463.219 449.286,463.539 450.416,467.696 460.031,467.742 478.573,467.83 478.246,463.266 462.875,463.188 462.602,462.532 462.317,461.864 462.094,461.188 462.821,460.45 462.262,457.533 460.75,454.375 459.238,451.217 457.308,448.951 456.281,449.062 z" transform="matrix(1.28,0,0,1.28,-578.362,-566.08)" id="path22088" sodipodi:nodetypes="csscscsccsc" />
+<path style="color:#000000;fill:url(#radialGradient4365);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M 456.281,449.062 C 456.213,449.07 456.154,449.096 456.094,449.125 455.133,449.59 455.637,452.694 457.25,456.062 458.238,458.125 459.43,459.799 460.406,460.688 460.405,460.698 460.407,460.708 460.406,460.719 460.337,461.549 459.647,462.428 459.378,463.219 449.286,463.539 450.416,467.696 460.031,467.742 478.573,467.83 478.246,463.266 462.875,463.188 462.602,462.532 462.317,461.864 462.094,461.188 462.821,460.45 462.262,457.533 460.75,454.375 459.238,451.217 457.308,448.951 456.281,449.062 z" transform="matrix(1.28,0,0,1.28,-578.362,-566.08)" id="path22088" sodipodi:nodetypes="csscscsccsc" />
 </g>
 <g transform="matrix(1.004126,0,0,0.991974,389.2193,2.457537)" id="star_flat">
 <path style="color:#000000;fill:url(#linearGradient8394);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8396);stroke-width:1.0019727;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dashoffset:0;marker:none;display:inline" d="M 122.024,189.9035 114.2846,189.9035 112.0734,182.2929 118.1543,177.4004 124.2353,182.2929 122.024,189.9035 z" id="path8384" sodipodi:nodetypes="cccccc" />
@@ -2643,16 +2639,16 @@ http://www.inkscape.org/</dc:description>
 <path id="path5202" d="M 603.8375,116.1429 593.1947,120.2702 592.9884,132.004 600.9777,137.5758 611.149,134.333 611.3554,123.0416 603.8375,116.1429 z" style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:1.0657545;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
 </g>
 <g id="toggle_vp_x" transform="matrix(1,0,0,1.090725,0,-12.90118)">
-<path sodipodi:nodetypes="cc" d="M 646.3693,119.7089 646.3693,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path4997" />
-<path sodipodi:nodetypes="cc" d="M 653.3817,119.7089 653.3817,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path4979" />
+<path sodipodi:nodetypes="cc" d="M 646.3693,119.7089 646.3693,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" id="path4997" />
+<path sodipodi:nodetypes="cc" d="M 653.3817,119.7089 653.3817,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" id="path4979" />
 </g>
 <g id="toggle_vp_y" transform="matrix(1,0,0,1.090725,40,-12.90118)">
-<path sodipodi:nodetypes="cc" d="M 646.3693,119.7089 646.3693,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path4987" />
-<path sodipodi:nodetypes="cc" d="M 653.3817,119.7089 653.3817,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path4989" />
+<path sodipodi:nodetypes="cc" d="M 646.3693,119.7089 646.3693,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" id="path4987" />
+<path sodipodi:nodetypes="cc" d="M 653.3817,119.7089 653.3817,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" id="path4989" />
 </g>
 <g id="toggle_vp_z" transform="matrix(1,0,0,1.090725,80,-12.90118)">
-<path sodipodi:nodetypes="cc" d="M 646.3693,119.7089 646.3693,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path4993" />
-<path sodipodi:nodetypes="cc" d="M 653.3817,119.7089 653.3817,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path4995" />
+<path sodipodi:nodetypes="cc" d="M 646.3693,119.7089 646.3693,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" id="path4993" />
+<path sodipodi:nodetypes="cc" d="M 653.3817,119.7089 653.3817,140.2013" style="color:#000000;fill:none;stroke:#000000;stroke-width:3.8300321;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" id="path4995" />
 </g>
 <g id="3dbox_three_handles">
 <rect y="117.462" x="753.7743" height="7.406888" width="7.406888" id="rect6683" style="fill:#000000;fill-opacity:1;stroke:none" />
@@ -2667,32 +2663,32 @@ http://www.inkscape.org/</dc:description>
 </g>
 <g transform="matrix(0.9610923,0,0,0.9805424,517.7012,-120.9824)" id="draw_tweak" inkscape:label="#g4398">
 <rect style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" id="rect4400" width="24.97159" height="24.47625" x="-110.5099" y="180.0235" />
-<path style="fill:url(#linearGradient4415);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.9185374;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M -109.5169,193.9456 C -101.3004,195.6369 -104.3945,186.0956 -98.80037,182.3615 -97.07122,181.2073 -92.56485,181.5557 -91.19654,184.6577 -90.17791,186.9669 -90.62355,188.4369 -92.0774,187.9956 -93.60686,187.5313 -93.32031,185.6852 -95.89519,186.1826 -97.19769,186.4342 -97.97739,188.526 -97.00432,190.8739 -95.90656,193.5227 -93.65232,195.2966 -88.05792,193.9456 L -88.05792,203.5432 -109.5169,203.5432 -109.5169,193.9456 z" id="rect4412" sodipodi:nodetypes="cssssscccc" />
-<path style="fill:none;stroke:#ffffff;stroke-width:0.9185374;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M -96.8577,182.6385 C -99.56837,183.1905 -100.8754,186.0548 -101.7054,188.5422 -102.4313,190.8017 -103.119,193.5659 -105.4493,194.5527 -106.46,194.9409 -108.4105,195.0975 -109.4854,194.9353 L -109.5145,203.4936 -88.0312,203.5536 -88.0312,194.9954 C -90.81344,195.4233 -93.95419,195.3603 -96.24656,193.5257 -98.26239,191.8375 -98.92499,188.4343 -97.46883,186.1775 -96.01814,184.4935 -93.0031,185.1955 -92.05592,187.0774 -91.27207,187.4754 -91.52566,186.3231 -91.65649,185.8702 -92.28666,183.7115 -94.67857,182.3941 -96.8577,182.6385 z" id="path4416" sodipodi:nodetypes="ccccccccccsc" />
+<path style="fill:url(#linearGradient4415);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.9185374;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M -109.5169,193.9456 C -101.3004,195.6369 -104.3945,186.0956 -98.80037,182.3615 -97.07122,181.2073 -92.56485,181.5557 -91.19654,184.6577 -90.17791,186.9669 -90.62355,188.4369 -92.0774,187.9956 -93.60686,187.5313 -93.32031,185.6852 -95.89519,186.1826 -97.19769,186.4342 -97.97739,188.526 -97.00432,190.8739 -95.90656,193.5227 -93.65232,195.2966 -88.05792,193.9456 L -88.05792,203.5432 -109.5169,203.5432 -109.5169,193.9456 z" id="rect4412" sodipodi:nodetypes="cssssscccc" />
+<path style="fill:none;stroke:#ffffff;stroke-width:0.9185374;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M -96.8577,182.6385 C -99.56837,183.1905 -100.8754,186.0548 -101.7054,188.5422 -102.4313,190.8017 -103.119,193.5659 -105.4493,194.5527 -106.46,194.9409 -108.4105,195.0975 -109.4854,194.9353 L -109.5145,203.4936 -88.0312,203.5536 -88.0312,194.9954 C -90.81344,195.4233 -93.95419,195.3603 -96.24656,193.5257 -98.26239,191.8375 -98.92499,188.4343 -97.46883,186.1775 -96.01814,184.4935 -93.0031,185.1955 -92.05592,187.0774 -91.27207,187.4754 -91.52566,186.3231 -91.65649,185.8702 -92.28666,183.7115 -94.67857,182.3941 -96.8577,182.6385 z" id="path4416" sodipodi:nodetypes="ccccccccccsc" />
 </g>
 <g transform="translate(436.9762,-119.9465)" id="tweak_push_mode" inkscape:label="#g4416">
 <rect style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" id="rect4418" width="16" height="16" x="-45" y="175" />
-<path style="color:#000000;fill:url(#linearGradient4428);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M -44.25871,182.3053 C -41.14192,182.3454 -41.65281,178.8302 -37.00556,178.8744 -32.35831,178.9187 -33.7846,182.4061 -29.84463,182.3053 L -29.84463,186.3802 C -33.3901,186.3802 -34.1418,182.6887 -37.01137,182.6849 -40.19964,182.6807 -40.7966,186.3802 -44.25871,186.3802 L -44.25871,182.3053 z" id="path4426" sodipodi:nodetypes="czccscc" />
-<path sodipodi:nodetypes="cscczc" id="path4444" d="M -29.84463,186.3802 C -33.3901,186.3802 -34.1418,182.6887 -37.01137,182.6849 -40.19964,182.6807 -40.7966,186.3802 -44.25871,186.3802 M -44.25871,182.3053 C -41.14192,182.3454 -41.65281,178.8302 -37.00556,178.8744 -32.35831,178.9187 -33.7846,182.4061 -29.84463,182.3053" style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+<path style="color:#000000;fill:url(#linearGradient4428);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;" d="M -44.25871,182.3053 C -41.14192,182.3454 -41.65281,178.8302 -37.00556,178.8744 -32.35831,178.9187 -33.7846,182.4061 -29.84463,182.3053 L -29.84463,186.3802 C -33.3901,186.3802 -34.1418,182.6887 -37.01137,182.6849 -40.19964,182.6807 -40.7966,186.3802 -44.25871,186.3802 L -44.25871,182.3053 z" id="path4426" sodipodi:nodetypes="czccscc" />
+<path sodipodi:nodetypes="cscczc" id="path4444" d="M -29.84463,186.3802 C -33.3901,186.3802 -34.1418,182.6887 -37.01137,182.6849 -40.19964,182.6807 -40.7966,186.3802 -44.25871,186.3802 M -44.25871,182.3053 C -41.14192,182.3454 -41.65281,178.8302 -37.00556,178.8744 -32.35831,178.9187 -33.7846,182.4061 -29.84463,182.3053" style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" />
 </g>
 <g inkscape:label="#g4416" id="tweak_grow_mode" transform="translate(416.9762,-119.9465)">
 <rect y="175" x="-45" height="16" width="16" id="rect4432" style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" />
-<path sodipodi:nodetypes="czccscc" id="path4435" d="M -44.25871,182.0349 C -41.14192,182.075 -40.49264,178.9233 -37.00556,178.9565 -33.51848,178.9896 -33.7846,182.1357 -29.84463,182.0349 L -29.84463,186.1097 C -33.3901,186.1097 -34.1418,188.966 -37.01137,188.9623 -40.19964,188.958 -40.7966,186.1097 -44.25871,186.1097 L -44.25871,182.0349 z" style="color:#000000;fill:url(#linearGradient4437);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-<path style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M -29.84463,186.1097 C -33.3901,186.1097 -34.1418,188.966 -37.01137,188.9623 -40.19964,188.958 -40.7966,186.1097 -44.25871,186.1097 M -44.25871,182.0349 C -41.14192,182.075 -40.49264,178.9233 -37.00556,178.9565 -33.51848,178.9896 -33.7846,182.1357 -29.84463,182.0349" id="path4442" sodipodi:nodetypes="cscczc" />
+<path sodipodi:nodetypes="czccscc" id="path4435" d="M -44.25871,182.0349 C -41.14192,182.075 -40.49264,178.9233 -37.00556,178.9565 -33.51848,178.9896 -33.7846,182.1357 -29.84463,182.0349 L -29.84463,186.1097 C -33.3901,186.1097 -34.1418,188.966 -37.01137,188.9623 -40.19964,188.958 -40.7966,186.1097 -44.25871,186.1097 L -44.25871,182.0349 z" style="color:#000000;fill:url(#linearGradient4437);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;" />
+<path style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M -29.84463,186.1097 C -33.3901,186.1097 -34.1418,188.966 -37.01137,188.9623 -40.19964,188.958 -40.7966,186.1097 -44.25871,186.1097 M -44.25871,182.0349 C -41.14192,182.075 -40.49264,178.9233 -37.00556,178.9565 -33.51848,178.9896 -33.7846,182.1357 -29.84463,182.0349" id="path4442" sodipodi:nodetypes="cscczc" />
 </g>
 <g transform="translate(396.9762,-119.9465)" id="tweak_shrink_mode" inkscape:label="#g4416">
 <rect style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" id="rect4443" width="16" height="16" x="-45" y="175" />
-<path style="color:#000000;fill:url(#linearGradient4447);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M -29.84463,186.6535 C -33.3901,186.6535 -34.51329,184.3364 -37.01137,184.3331 -39.50944,184.3298 -40.7966,186.6535 -44.25871,186.6535 L -44.25871,184.0994 -44.25871,181.3493 C -41.14192,181.3894 -40.04563,183.5265 -37.00556,183.5555 -33.96549,183.5844 -33.7846,181.4501 -29.84463,181.3493" id="path4445" sodipodi:nodetypes="czccczc" />
-<path sodipodi:nodetypes="czcczc" id="path4440" d="M -44.25871,181.3493 C -41.14192,181.3894 -40.04563,183.2325 -37.00556,183.2614 -33.96549,183.2903 -33.7846,181.4501 -29.84463,181.3493 M -29.84463,186.6535 C -33.3901,186.6535 -34.51329,184.5045 -37.01137,184.5012 -39.50944,184.4979 -40.7966,186.6535 -44.25871,186.6535" style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+<path style="color:#000000;fill:url(#linearGradient4447);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;" d="M -29.84463,186.6535 C -33.3901,186.6535 -34.51329,184.3364 -37.01137,184.3331 -39.50944,184.3298 -40.7966,186.6535 -44.25871,186.6535 L -44.25871,184.0994 -44.25871,181.3493 C -41.14192,181.3894 -40.04563,183.5265 -37.00556,183.5555 -33.96549,183.5844 -33.7846,181.4501 -29.84463,181.3493" id="path4445" sodipodi:nodetypes="czccczc" />
+<path sodipodi:nodetypes="czcczc" id="path4440" d="M -44.25871,181.3493 C -41.14192,181.3894 -40.04563,183.2325 -37.00556,183.2614 -33.96549,183.2903 -33.7846,181.4501 -29.84463,181.3493 M -29.84463,186.6535 C -33.3901,186.6535 -34.51329,184.5045 -37.01137,184.5012 -39.50944,184.4979 -40.7966,186.6535 -44.25871,186.6535" style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" />
 </g>
 <g transform="translate(416.9762,-139.9465)" id="tweak_roughen_mode" inkscape:label="#g4416">
 <rect style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" id="rect4446" width="16" height="16" x="-45" y="175" />
-<path style="color:#000000;fill:url(#linearGradient4453);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M -44.25871,180.0349 -42.17829,181.5673 -41.23529,179.6783 -40.30299,181.2751 -37.44512,178.1377 -35.9,180.3197 -34.80075,179.1774 -32.13533,181.6011 -29.84463,179.9331 -29.84463,183.0536 -29.84463,184.0723 -29.84463,185.091 -29.84463,186.1097 -32.07052,187.013 -34.08315,186.3631 -32.00367,188.7335 -37.10857,186.5805 -40.25586,187.5167 -39.27382,184.4013 -42.11409,187.2305 -44.25871,186.1097 -44.25871,185.091 -44.25871,184.0723 -44.25871,183.0536 -44.25871,180.0349 z" id="path4448" sodipodi:nodetypes="ccccccccccccccccccccccccc" />
-<path sodipodi:nodetypes="cccccccccccccccccc" id="path4576" d="M -29.84463,186.1097 -32.07052,187.013 -34.08315,186.3631 -32.00367,188.7335 -37.10857,186.5805 -40.25586,187.5167 -39.27382,184.4013 -42.11409,187.2305 -44.25871,186.1097 M -44.25871,180.0349 -42.17829,181.5673 -41.23529,179.6783 -40.30299,181.2751 -37.44512,178.1377 -35.9,180.3197 -34.80075,179.1774 -32.13533,181.6011 -29.84463,179.9331" style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+<path style="color:#000000;fill:url(#linearGradient4453);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;" d="M -44.25871,180.0349 -42.17829,181.5673 -41.23529,179.6783 -40.30299,181.2751 -37.44512,178.1377 -35.9,180.3197 -34.80075,179.1774 -32.13533,181.6011 -29.84463,179.9331 -29.84463,183.0536 -29.84463,184.0723 -29.84463,185.091 -29.84463,186.1097 -32.07052,187.013 -34.08315,186.3631 -32.00367,188.7335 -37.10857,186.5805 -40.25586,187.5167 -39.27382,184.4013 -42.11409,187.2305 -44.25871,186.1097 -44.25871,185.091 -44.25871,184.0723 -44.25871,183.0536 -44.25871,180.0349 z" id="path4448" sodipodi:nodetypes="ccccccccccccccccccccccccc" />
+<path sodipodi:nodetypes="cccccccccccccccccc" id="path4576" d="M -29.84463,186.1097 -32.07052,187.013 -34.08315,186.3631 -32.00367,188.7335 -37.10857,186.5805 -40.25586,187.5167 -39.27382,184.4013 -42.11409,187.2305 -44.25871,186.1097 M -44.25871,180.0349 -42.17829,181.5673 -41.23529,179.6783 -40.30299,181.2751 -37.44512,178.1377 -35.9,180.3197 -34.80075,179.1774 -32.13533,181.6011 -29.84463,179.9331" style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" />
 </g>
 <g id="ocal_import" inkscape:label="#ocal_import" transform="translate(-3.450267,2.75434)">
 <use x="0" y="0" xlink:href="#g5113" id="use4598" transform="translate(2.639605,16.28531)" width="1250" height="1250" />
-<path sodipodi:nodetypes="ccccccccccccccccc" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" d="M 21.72037,171.0884 26.62001,171.0884 26.62001,169.2842 27.62001,169.2842 27.62001,170.1863 28.62001,170.1863 28.62001,171.0884 29.62001,171.0884 29.62001,171.9905 28.62001,171.9905 28.62001,172.8926 27.62001,172.8926 27.62001,173.7947 26.62001,173.7947 26.62001,171.9905 21.72037,171.9905 21.72037,171.0884 z" id="use4601" />
+<use height="1250" width="1250" id="use5366-8" xlink:href="#path4685" y="0" x="0" transform="translate(14.58777,-33.04874)" />
 </g>
 <g id="ocal_export">
 <g id="g5113" transform="matrix(1.121863,0,0,0.8467469,-1.696936,21.3021)">
@@ -2703,45 +2699,45 @@ http://www.inkscape.org/</dc:description>
 <rect inkscape:export-ydpi="90.360001" inkscape:export-xdpi="90.360001" inkscape:export-filename="C:\Documents and Settings\Jon Phillips\My Documents\projects\clipart-project\clipart_web\logo\openclipartlibrary-logo-whiteBack-5colors.png" ry="2.946012" transform="matrix(0.9158505,0.4015194,-0.1642153,0.9864245,0,0)" rx="3.542479" y="134.1788" x="44.10332" height="12.43601" width="8.253802" id="rect5662" style="fill:#ffffff;fill-rule:evenodd;stroke:#cccccc;stroke-width:0.2164044;stroke-miterlimit:4;stroke-opacity:1" />
 <rect inkscape:export-ydpi="90.360001" inkscape:export-xdpi="90.360001" inkscape:export-filename="C:\Documents and Settings\Jon Phillips\My Documents\projects\clipart-project\clipart_web\logo\openclipartlibrary-logo-whiteBack-5colors.png" ry="2.339518" transform="matrix(0.9158505,0.4015194,-0.1642153,0.9864245,0,0)" rx="2.813192" y="135.5302" x="44.90545" height="9.875807" width="6.554592" id="rect5664" style="fill:#f3e533;fill-opacity:1;fill-rule:evenodd;stroke-width:0.7941308pt" />
 </g>
-<path id="path6307" d="M 11.14488,154.7152 18.04451,154.7152 18.04451,152.9111 19.04451,152.9111 19.04451,153.8132 20.04451,153.8132 20.04451,154.7152 21.04451,154.7152 21.04451,155.6173 20.04451,155.6173 20.04451,156.5194 19.04451,156.5194 19.04451,157.4215 18.04451,157.4215 18.04451,155.6173 11.14488,155.6173 11.14488,154.7152 z" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" sodipodi:nodetypes="ccccccccccccccccc" />
+<use height="1250" width="1250" id="use5366" xlink:href="#path4685" y="0" x="0" transform="translate(6.008357,-49.39594)" />
 </g>
 <g inkscape:label="#g4416" id="tweak_attract_mode" transform="translate(436.9762,-79.9465)">
 <rect y="175" x="-45" height="16" width="16" id="rect4494" style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" />
-<path sodipodi:nodetypes="czccscc" id="path4496" d="M -44.25871,185.7795 C -41.14192,185.805 -41.65281,183.5615 -37.00556,183.5898 -32.35831,183.618 -33.7846,185.8438 -29.84463,185.7795 L -29.84463,188.3802 C -33.3901,188.3802 -34.1418,184.9545 -37.01137,184.9521 -40.19964,184.9494 -40.7966,188.3802 -44.25871,188.3802 L -44.25871,185.7795 z" style="color:#000000;fill:url(#linearGradient4501);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-<path style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M -29.84463,188.3802 C -33.3901,188.3802 -34.1418,185.0054 -37.01137,185.003 -40.19964,185.0003 -40.7966,188.3802 -44.25871,188.3802 M -44.25871,185.7795 C -41.14192,185.805 -41.65281,183.5615 -37.00556,183.5898 -32.35831,183.618 -33.7846,185.8438 -29.84463,185.7795" id="path4499" sodipodi:nodetypes="cscczc" />
-<path style="color:#000000;fill:url(#linearGradient4507);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M -44.25871,180.1902 C -41.14192,180.1646 -41.65281,182.4081 -37.00556,182.3799 -32.35831,182.3517 -33.7846,180.1259 -29.84463,180.1902 L -29.84463,177.5895 C -33.3901,177.5895 -34.1418,180.7605 -37.01137,180.7629 -40.19964,180.7656 -40.7966,177.5895 -44.25871,177.5895 L -44.25871,180.1902 z" id="path4503" sodipodi:nodetypes="czccscc" />
-<path sodipodi:nodetypes="cscczc" id="path4505" d="M -29.84463,177.5895 C -33.3901,177.5895 -34.1418,180.8624 -37.01137,180.8648 -40.19964,180.8675 -40.7966,177.5895 -44.25871,177.5895 M -44.25871,180.1902 C -41.14192,180.1646 -41.65281,182.4081 -37.00556,182.3799 -32.35831,182.3517 -33.7846,180.1259 -29.84463,180.1902" style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+<path sodipodi:nodetypes="czccscc" id="path4496" d="M -44.25871,185.7795 C -41.14192,185.805 -41.65281,183.5615 -37.00556,183.5898 -32.35831,183.618 -33.7846,185.8438 -29.84463,185.7795 L -29.84463,188.3802 C -33.3901,188.3802 -34.1418,184.9545 -37.01137,184.9521 -40.19964,184.9494 -40.7966,188.3802 -44.25871,188.3802 L -44.25871,185.7795 z" style="color:#000000;fill:url(#linearGradient4501);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;" />
+<path style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M -29.84463,188.3802 C -33.3901,188.3802 -34.1418,185.0054 -37.01137,185.003 -40.19964,185.0003 -40.7966,188.3802 -44.25871,188.3802 M -44.25871,185.7795 C -41.14192,185.805 -41.65281,183.5615 -37.00556,183.5898 -32.35831,183.618 -33.7846,185.8438 -29.84463,185.7795" id="path4499" sodipodi:nodetypes="cscczc" />
+<path style="color:#000000;fill:url(#linearGradient4507);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;" d="M -44.25871,180.1902 C -41.14192,180.1646 -41.65281,182.4081 -37.00556,182.3799 -32.35831,182.3517 -33.7846,180.1259 -29.84463,180.1902 L -29.84463,177.5895 C -33.3901,177.5895 -34.1418,180.7605 -37.01137,180.7629 -40.19964,180.7656 -40.7966,177.5895 -44.25871,177.5895 L -44.25871,180.1902 z" id="path4503" sodipodi:nodetypes="czccscc" />
+<path sodipodi:nodetypes="cscczc" id="path4505" d="M -29.84463,177.5895 C -33.3901,177.5895 -34.1418,180.8624 -37.01137,180.8648 -40.19964,180.8675 -40.7966,177.5895 -44.25871,177.5895 M -44.25871,180.1902 C -41.14192,180.1646 -41.65281,182.4081 -37.00556,182.3799 -32.35831,182.3517 -33.7846,180.1259 -29.84463,180.1902" style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" />
 </g>
 <g transform="translate(416.9762,-79.9465)" id="tweak_repel_mode" inkscape:label="#g4416">
 <rect style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" id="rect4511" width="16" height="16" x="-45" y="175" />
-<path style="color:#000000;fill:url(#linearGradient4521);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M -44.25871,186.1902 C -41.14192,186.1646 -41.65281,188.4081 -37.00556,188.3799 -32.35831,188.3517 -33.7846,186.1259 -29.84463,186.1902 L -29.84463,183.5895 C -33.3901,183.5895 -34.1418,186.7096 -37.01137,186.712 -40.19964,186.7147 -40.7966,183.5895 -44.25871,183.5895 L -44.25871,186.1902 z" id="path4513" sodipodi:nodetypes="czccscc" />
-<path sodipodi:nodetypes="cscczc" id="path4515" d="M -29.84463,183.5895 C -33.3901,183.5895 -34.1418,186.7605 -37.01137,186.7629 -40.19964,186.7656 -40.7966,183.5895 -44.25871,183.5895 M -44.25871,186.1902 C -41.14192,186.1646 -41.65281,188.4081 -37.00556,188.3799 -32.35831,188.3517 -33.7846,186.1259 -29.84463,186.1902" style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-<path sodipodi:nodetypes="czccscc" id="path4517" d="M -44.25871,179.7795 C -41.14192,179.805 -41.65281,177.5615 -37.00556,177.5898 -32.35831,177.618 -33.7846,179.8438 -29.84463,179.7795 L -29.84463,182.3802 C -33.3901,182.3802 -34.1418,179.2601 -37.01137,179.2577 -40.19964,179.255 -40.7966,182.3802 -44.25871,182.3802 L -44.25871,179.7795 z" style="color:#000000;fill:url(#linearGradient4523);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-<path style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M -29.84463,182.3802 C -33.3901,182.3802 -34.1418,179.2466 -37.01137,179.2442 -40.19964,179.2415 -40.7966,182.3802 -44.25871,182.3802 M -44.25871,179.7795 C -41.14192,179.805 -41.65281,177.5615 -37.00556,177.5898 -32.35831,177.618 -33.7846,179.8438 -29.84463,179.7795" id="path4519" sodipodi:nodetypes="cscczc" />
+<path style="color:#000000;fill:url(#linearGradient4521);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;" d="M -44.25871,186.1902 C -41.14192,186.1646 -41.65281,188.4081 -37.00556,188.3799 -32.35831,188.3517 -33.7846,186.1259 -29.84463,186.1902 L -29.84463,183.5895 C -33.3901,183.5895 -34.1418,186.7096 -37.01137,186.712 -40.19964,186.7147 -40.7966,183.5895 -44.25871,183.5895 L -44.25871,186.1902 z" id="path4513" sodipodi:nodetypes="czccscc" />
+<path sodipodi:nodetypes="cscczc" id="path4515" d="M -29.84463,183.5895 C -33.3901,183.5895 -34.1418,186.7605 -37.01137,186.7629 -40.19964,186.7656 -40.7966,183.5895 -44.25871,183.5895 M -44.25871,186.1902 C -41.14192,186.1646 -41.65281,188.4081 -37.00556,188.3799 -32.35831,188.3517 -33.7846,186.1259 -29.84463,186.1902" style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" />
+<path sodipodi:nodetypes="czccscc" id="path4517" d="M -44.25871,179.7795 C -41.14192,179.805 -41.65281,177.5615 -37.00556,177.5898 -32.35831,177.618 -33.7846,179.8438 -29.84463,179.7795 L -29.84463,182.3802 C -33.3901,182.3802 -34.1418,179.2601 -37.01137,179.2577 -40.19964,179.255 -40.7966,182.3802 -44.25871,182.3802 L -44.25871,179.7795 z" style="color:#000000;fill:url(#linearGradient4523);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.6138721;marker:none;visibility:visible;display:inline;" />
+<path style="color:#000000;fill:none;stroke:#000000;stroke-width:0.6138721;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M -29.84463,182.3802 C -33.3901,182.3802 -34.1418,179.2466 -37.01137,179.2442 -40.19964,179.2415 -40.7966,182.3802 -44.25871,182.3802 M -44.25871,179.7795 C -41.14192,179.805 -41.65281,177.5615 -37.00556,177.5898 -32.35831,177.618 -33.7846,179.8438 -29.84463,179.7795" id="path4519" sodipodi:nodetypes="cscczc" />
 </g>
 <g inkscape:label="#g4416" id="tweak_colorpaint_mode" transform="translate(416.9762,-59.9465)">
 <rect y="175" x="-45" height="16" width="16" id="rect4527" style="fill:none;stroke:none;stroke-width:1;marker:none;display:inline" />
-<rect style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4542" width="4.069275" height="4.069275" x="-42.99393" y="176.8167" />
-<rect y="176.8167" x="34.85538" height="4.069275" width="4.069275" id="rect4544" style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" transform="scale(-1,1)" />
-<rect style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4547" width="4.069275" height="4.069275" x="-34.85538" y="176.8167" />
-<rect y="-184.9553" x="-42.99393" height="4.069275" width="4.069275" id="rect4549" style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" transform="scale(1,-1)" />
-<rect transform="scale(-1,-1)" style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4551" width="4.069275" height="4.069275" x="34.85538" y="-184.9553" />
-<rect y="-184.9553" x="-34.85538" height="4.069275" width="4.069275" id="rect4553" style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" transform="scale(1,-1)" />
-<rect style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4555" width="4.069275" height="4.069275" x="-42.99393" y="184.9553" />
-<rect y="184.9553" x="34.85538" height="4.069275" width="4.069275" id="rect4557" style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" transform="scale(-1,1)" />
-<rect style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4559" width="4.069275" height="4.069275" x="-34.85538" y="184.9553" />
+<rect style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" id="rect4542" width="4.069275" height="4.069275" x="-42.99393" y="176.8167" />
+<rect y="176.8167" x="34.85538" height="4.069275" width="4.069275" id="rect4544" style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" transform="scale(-1,1)" />
+<rect style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" id="rect4547" width="4.069275" height="4.069275" x="-34.85538" y="176.8167" />
+<rect y="-184.9553" x="-42.99393" height="4.069275" width="4.069275" id="rect4549" style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" transform="scale(1,-1)" />
+<rect transform="scale(-1,-1)" style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" id="rect4551" width="4.069275" height="4.069275" x="34.85538" y="-184.9553" />
+<rect y="-184.9553" x="-34.85538" height="4.069275" width="4.069275" id="rect4553" style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" transform="scale(1,-1)" />
+<rect style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" id="rect4555" width="4.069275" height="4.069275" x="-42.99393" y="184.9553" />
+<rect y="184.9553" x="34.85538" height="4.069275" width="4.069275" id="rect4557" style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" transform="scale(-1,1)" />
+<rect style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" id="rect4559" width="4.069275" height="4.069275" x="-34.85538" y="184.9553" />
 </g>
 <g transform="translate(436.9762,-59.9465)" id="tweak_colorjitter_mode" inkscape:label="#g4416">
 <rect style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" id="rect4563" width="16" height="16" x="-45" y="175" />
-<rect y="176.8852" x="-43.13489" height="4.069275" width="4.069275" id="rect4565" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-<rect style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4567" width="4.069275" height="4.069275" x="-43.13489" y="185.0237" />
-<rect y="-189.093" x="30.92706" height="4.069275" width="4.069275" id="rect4569" style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" transform="scale(-1,-1)" />
-<rect style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4571" width="4.069275" height="4.069275" x="-34.99632" y="-180.9545" transform="scale(1,-1)" />
-<rect y="-185.0237" x="34.99634" height="4.069275" width="4.069275" id="rect4573" style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" transform="scale(-1,-1)" />
-<rect transform="scale(1,-1)" style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4575" width="4.069275" height="4.069275" x="-39.06561" y="-180.9545" />
-<rect y="-185.0237" x="30.92705" height="4.069275" width="4.069275" id="rect4577" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" transform="scale(-1,-1)" />
-<rect style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect4579" width="4.069275" height="4.069275" x="-39.06561" y="185.0237" />
-<rect y="180.9545" x="-43.13489" height="4.069275" width="4.069275" id="rect4581" style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+<rect y="176.8852" x="-43.13489" height="4.069275" width="4.069275" id="rect4565" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" />
+<rect style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" id="rect4567" width="4.069275" height="4.069275" x="-43.13489" y="185.0237" />
+<rect y="-189.093" x="30.92706" height="4.069275" width="4.069275" id="rect4569" style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" transform="scale(-1,-1)" />
+<rect style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" id="rect4571" width="4.069275" height="4.069275" x="-34.99632" y="-180.9545" transform="scale(1,-1)" />
+<rect y="-185.0237" x="34.99634" height="4.069275" width="4.069275" id="rect4573" style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" transform="scale(-1,-1)" />
+<rect transform="scale(1,-1)" style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" id="rect4575" width="4.069275" height="4.069275" x="-39.06561" y="-180.9545" />
+<rect y="-185.0237" x="30.92705" height="4.069275" width="4.069275" id="rect4577" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" transform="scale(-1,-1)" />
+<rect style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" id="rect4579" width="4.069275" height="4.069275" x="-39.06561" y="185.0237" />
+<rect y="180.9545" x="-43.13489" height="4.069275" width="4.069275" id="rect4581" style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;" />
 </g>
 <g id="edit_next_parameter" inkscape:label="#g10193" transform="translate(20,0)">
 <path style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" d="M 761.9292,60.21135 C 761.5878,61.39286 761.4946,62.3835 761.5011,63.20978 761.5077,64.03606 761.6167,64.69823 761.7564,65.22109 762.0358,66.2668 762.4196,66.76142 762.7922,66.84248 763.1648,66.92354 764.0584,66.69636 764.9435,66.40187 765.3861,66.25463 765.8255,66.09125 766.196,65.9186 766.5666,65.74595 766.8671,65.56494 767.048,65.34354 766.4063,64.64298 765.4475,64.04417 764.4271,63.34698 763.9169,62.99839 763.396,62.61954 762.9432,62.13023 762.4904,61.64091 762.1008,61.0399 761.9292,60.21135 z M 764.4579,59.01822 C 764.2129,59.7969 764.3097,60.67268 764.6999,61.36216 765.0313,61.94976 765.5572,62.39261 766.1623,62.67942 766.6964,62.92688 767.2804,63.04656 767.9134,63.0393 767.2183,62.61982 766.613,62.21989 766.1246,61.81109 765.6363,61.40228 765.2668,60.98517 765.0109,60.58979 764.4991,59.79903 764.4542,59.10024 764.4579,59.01822 z M 767.2562,57.98462 C 766.778,58.99773 766.8948,59.70934 767.2669,60.18111 767.639,60.65288 768.2666,60.91061 768.9902,61.0957 768.3331,60.58465 767.8453,59.85018 767.5652,59.20611 767.2851,58.56204 767.214,58.01559 767.2562,57.98462 z M 770.782,55.78203 C 770.2055,56.1138 770.2762,57.16371 770.004,57.54492 769.478,58.28155 768.9415,58.39158 769.2239,58.98036 769.5903,59.74429 769.7493,59.35851 770.7399,59.45409 771.0491,59.48392 771.9668,60.4286 772.2901,60.37037 771.3092,58.83005 770.7454,57.38913 770.782,55.78203 z" id="path9858" inkscape:path-effect="#path-effect9860" inkscape:original-d="M 762.7922,66.84248 C 763.6022,63.11924 765.4886,60.07306 771.5388,58.08446" sodipodi:nodetypes="cc" />
@@ -2850,11 +2846,11 @@ http://www.inkscape.org/</dc:description>
 <g id="randomize" transform="translate(0.1464233,0)">
 <rect y="208" x="777.8536" height="24" width="24" id="rect7476" style="fill:none;stroke:none;stroke-width:1.0000001;marker:none;display:inline" />
 <g id="g4914" transform="translate(5.853577,2.75)">
-<path id="path4908" d="M 773,210.5 773,223 784,228.5 795,223 795,210.5 784,215 773,210.5 z" style="fill:url(#radialGradient8472);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5637);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:nodetypes="ccccccc" />
-<path sodipodi:nodetypes="ccccc" id="path4912" d="M 784,206 795,210.5 784,215 773,210.5 784,206 z" style="fill:url(#radialGradient8474);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5633);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-<path style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M 848,219 848,232.417" id="path5699" transform="translate(-64,-4)" sodipodi:nodetypes="cc" />
+<path id="path4908" d="M 773,210.5 773,223 784,228.5 795,223 795,210.5 784,215 773,210.5 z" style="fill:url(#radialGradient8472);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5637);stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" sodipodi:nodetypes="ccccccc" />
+<path sodipodi:nodetypes="ccccc" id="path4912" d="M 784,206 795,210.5 784,215 773,210.5 784,206 z" style="fill:url(#radialGradient8474);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5633);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" />
+<path style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M 848,219 848,232.417" id="path5699" transform="translate(-64,-4)" sodipodi:nodetypes="cc" />
 <g id="g5864" transform="translate(-64,-4)">
-<path transform="matrix(1.795342,0,0,1.795342,-669.664,-176.9133)" d="M 843,222.75 C 843,223.44 842.664,224 842.25,224 841.836,224 841.5,223.44 841.5,222.75 841.5,222.06 841.836,221.5 842.25,221.5 842.664,221.5 843,222.06 843,222.75 z" sodipodi:ry="1.25" sodipodi:rx="0.75" sodipodi:cy="222.75" sodipodi:cx="842.25" id="path5706" style="fill:url(#radialGradient5579);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.3484024;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:type="arc" />
+<path transform="matrix(1.795342,0,0,1.795342,-669.664,-176.9133)" d="M 843,222.75 C 843,223.44 842.664,224 842.25,224 841.836,224 841.5,223.44 841.5,222.75 841.5,222.06 841.836,221.5 842.25,221.5 842.664,221.5 843,222.06 843,222.75 z" sodipodi:ry="1.25" sodipodi:rx="0.75" sodipodi:cy="222.75" sodipodi:cx="842.25" id="path5706" style="fill:url(#radialGradient5579);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.3484024;marker:none;visibility:visible;display:inline;" sodipodi:type="arc" />
 <use height="1250" width="1250" transform="translate(9.037201,-1.473703)" id="use5833" xlink:href="#path5706" y="0" x="0" />
 <use height="1250" width="1250" transform="translate(9.037201,3.880038)" id="use5842" xlink:href="#path5706" y="0" x="0" />
 <use height="1250" width="1250" transform="translate(13.22746,-3.462058)" id="use5848" xlink:href="#path5706" y="0" x="0" />
@@ -2886,7 +2882,7 @@ http://www.inkscape.org/</dc:description>
 <rect style="color:#000000;fill:url(#linearGradient7424);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7426);stroke-width:0.9999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" id="rect7422" width="9" height="17" x="457.5" y="118.5" />
 </g>
 </g>
-<path style="color:#000000;fill:none;stroke:#0000ff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" d="M 950.558,67.64215 C 948.4993,67.38073 946.7769,65.57647 946.6177,63.50641 946.3854,61.44368 947.7366,59.34612 949.7106,58.70439 951.6612,57.99343 954.0163,58.81524 955.1057,60.58161 955.7875,61.6104 955.9405,62.89217 955.7773,64.09446 955.602,65.29728 956.0929,66.61902 957.1757,67.23939 958.5241,68.10414 960.5047,67.57392 961.2407,66.15105 962.0541,64.77099 961.4496,62.81178 960,62.12988" id="spiro_splines_mode" sodipodi:nodetypes="cccccccs" />
+<path style="color:#000000;fill:none;stroke:#0000ff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" d="M 950.558,67.64215 C 948.4993,67.38073 946.7769,65.57647 946.6177,63.50641 946.3854,61.44368 947.7366,59.34612 949.7106,58.70439 951.6612,57.99343 954.0163,58.81524 955.1057,60.58161 955.7875,61.6104 955.9405,62.89217 955.7773,64.09446 955.602,65.29728 956.0929,66.61902 957.1757,67.23939 958.5241,68.10414 960.5047,67.57392 961.2407,66.15105 962.0541,64.77099 961.4496,62.81178 960,62.12988" id="spiro_splines_mode" sodipodi:nodetypes="cccccccs" />
 <g id="bezier_mode" transform="matrix(0.6666666,0,0,0.6666666,983.8913,-64.93359)" inkscape:label="bezier_mode">
 <rect y="180" x="-110" height="24" width="24" id="rect4983" style="color:#000000;fill:none;stroke:none;stroke-width:1;marker:none;display:inline" />
 <path sodipodi:nodetypes="csc" id="path4985" d="M -107.5,202 C -108,194 -106.8635,189.643 -103.5351,186.5978 -100.5976,183.9103 -96,182 -88,182.5" style="fill:none;stroke:#646464;stroke-width:2.2500002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
@@ -2939,7 +2935,7 @@ http://www.inkscape.org/</dc:description>
 <path style="fill:none;stroke:#282828;stroke-width:24.9614296;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4.27;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:23.2" d="M 234.3739,296.363 C 234.3739,301.3285 232.3297,306.2634 228.8189,309.7745 225.3081,313.2856 220.3742,315.3295 215.4118,315.3292 210.4494,315.3289 205.5198,313.2845 202.0135,309.7734 198.5071,306.2624 196.4668,301.328 196.4668,296.363 196.4668,291.3981 198.5071,286.4637 202.0135,282.9527 205.5198,279.4416 210.4494,277.3972 215.4118,277.3969 220.3742,277.3966 225.3081,279.4405 228.8189,282.9516 232.3297,286.4626 234.3739,291.3976 234.3739,296.363" id="path2551-1" />
 <path id="path2693-1" d="M 352.2046,433.1582 C 334.2996,451.0644 312.8429,465.4029 289.4538,475.0929 266.0648,484.7828 240.762,489.8167 215.4542,489.8152" style="fill:none;stroke:#282828;stroke-width:24.9614296;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4.27;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:23.2" />
 </g>
-<rect style="color:#000000;fill:none;stroke:#0000ff;stroke-width:2.3001337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.3001337, 2.3001337;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="lpetool_show_bbox" width="10.66002" height="16.84721" x="865.5653" y="86.07553" inkscape:label="lpetool_show_bbox" />
+<rect style="color:#000000;fill:none;stroke:#0000ff;stroke-width:2.3001337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.3001337, 2.3001337;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" id="lpetool_show_bbox" width="10.66002" height="16.84721" x="865.5653" y="86.07553" inkscape:label="lpetool_show_bbox" />
 <g transform="translate(92.93803,-0.728071)" id="circle_3pts-5" inkscape:label="circle_3pts">
 <path style="fill:none;stroke:#5a5a5a;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-miterlimit:4.27;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:23.2" d="M 658.0599,95.55848 C 658.0599,96.36229 657.9001,97.16579 657.5925,97.90842 657.2849,98.65104 656.8297,99.33222 656.2614,99.90059 655.6931,100.469 655.012,100.9241 654.2696,101.2317 653.5272,101.5392 652.724,101.699 651.9207,101.699 651.1174,101.6989 650.3146,101.5391 649.5727,101.2314 648.8308,100.9238 648.1505,100.4686 647.5829,99.90024 647.0153,99.33186 646.5608,98.65074 646.2537,97.90817 645.9466,97.16561 645.787,96.3622 645.787,95.55848 645.787,94.75475 645.9466,93.95134 646.2537,93.20878 646.5608,92.46622 647.0153,91.78509 647.5829,91.21671 648.1505,90.64834 648.8308,90.19318 649.5727,89.88554 650.3146,89.5779 651.1174,89.41802 651.9207,89.41797 652.724,89.41793 653.5272,89.57771 654.2696,89.88528 655.012,90.19286 655.6931,90.64799 656.2614,91.21636 656.8297,91.78474 657.2849,92.46591 657.5925,93.20854 657.9001,93.95116 658.0599,94.75466 658.0599,95.55848" id="circle_with_radius" inkscape:label="circle_with_radius" />
 <path sodipodi:nodetypes="cc" d="M 651.6968,95.73494 657.1146,92.34622" style="fill:none;stroke:#5a5a5a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none" id="path4418-8-1-0-1-0" />
@@ -2951,7 +2947,7 @@ http://www.inkscape.org/</dc:description>
 <path sodipodi:nodetypes="cc" d="M 673.2681,96.33213 687.9748,93.06472" style="fill:none;stroke:#5a5a5a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none" id="path4418-8-1-0-1-4-4-6" />
 </g>
 <g id="all_inactive_old" inkscape:label="all_inactive_old" transform="translate(50.20458,0)">
-<rect y="85.50002" x="612.75" height="24" width="20.25" id="rect5112" style="color:#000000;fill:none;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+<rect y="85.50002" x="612.75" height="24" width="20.25" id="rect5112" style="color:#000000;fill:none;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;" />
 <path id="path6027" d="M 619.1741,101.3114 626.5759,93.68868" style="fill:none;stroke:#cb0000;stroke-width:3;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.27;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:23.2" />
 <path id="path6027-1" d="M 626.6863,101.2009 619.0637,93.79915" style="fill:none;stroke:#cb0000;stroke-width:3;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4.27;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:23.2" />
 </g>
@@ -2964,7 +2960,7 @@ http://www.inkscape.org/</dc:description>
 <g transform="translate(416.9762,-39.9465)" id="tweak_move_mode" inkscape:label="#g4416">
 <rect style="fill:none;stroke:none;stroke-width:1;marker:none;display:inline" id="rect4991" width="16" height="16" x="-45" y="175" />
 <g id="g5135" style="fill:#000000" transform="translate(-416.8263,39.0012)">
-<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" inkscape:tile-h="2.223736" inkscape:tile-w="2.223736" inkscape:tile-cy="137.9821" inkscape:tile-cx="375.0941" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5011" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:type="arc" transform="matrix(1.20571,0,0,1.20571,-78.25832,-27.17581)" />
+<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" inkscape:tile-h="2.223736" inkscape:tile-w="2.223736" inkscape:tile-cy="137.9821" inkscape:tile-cx="375.0941" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5011" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" sodipodi:type="arc" transform="matrix(1.20571,0,0,1.20571,-78.25832,-27.17581)" />
 <use height="1250" width="1250" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" id="use5085" xlink:href="#path5011" inkscape:tiled-clone-of="#path5011" y="0" x="0" transform="translate(4.825002e-8,2.41142)" />
 <use height="1250" width="1250" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" id="use5087" transform="translate(0.0067742,5.089253)" xlink:href="#path5011" inkscape:tiled-clone-of="#path5011" y="0" x="0" />
 <use height="1250" width="1250" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" id="use5091" transform="translate(0.0027824,7.946541)" xlink:href="#path5011" inkscape:tiled-clone-of="#path5011" y="0" x="0" />
@@ -3000,7 +2996,7 @@ http://www.inkscape.org/</dc:description>
 <use height="1250" width="1250" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" id="use5126" transform="translate(11.0383,9.082095)" xlink:href="#path5084" inkscape:tiled-clone-of="#path5011" y="0" x="0" />
 <use x="0" y="0" inkscape:tiled-clone-of="#path5011" xlink:href="#path5084" transform="translate(10.38143,6.05473)" id="use5090" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" width="1250" height="1250" />
 <use height="1250" width="1250" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" id="use5132" transform="translate(5.90759,10.40446)" xlink:href="#path5084" inkscape:tiled-clone-of="#path5011" y="0" x="0" />
-<path transform="matrix(1.20571,0,0,1.20571,-78.25832,-27.88514)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path5084" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-cx="375.0941" inkscape:tile-cy="137.9821" inkscape:tile-w="2.223736" inkscape:tile-h="2.223736" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.20571,0,0,1.20571,-78.25832,-27.88514)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="path5084" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-cx="375.0941" inkscape:tile-cy="137.9821" inkscape:tile-w="2.223736" inkscape:tile-h="2.223736" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
 <use transform="translate(8.706381,0.9318868)" x="0" y="0" inkscape:tiled-clone-of="#path5011" xlink:href="#path5084" id="use5086" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" width="1250" height="1250" />
 <use x="0" y="0" inkscape:tiled-clone-of="#path5011" xlink:href="#path5084" transform="translate(2.953795,0.8543842)" id="use5092" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" width="1250" height="1250" />
 <use x="0" y="0" inkscape:tiled-clone-of="#path5011" xlink:href="#path5084" transform="translate(11.81518,0)" id="use5094" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" width="1250" height="1250" />
@@ -3022,7 +3018,7 @@ http://www.inkscape.org/</dc:description>
 </g>
 <rect y="175.053" x="-26.0238" height="16" width="16" id="tweak_move_mode_jitter" style="fill:none;stroke:none;stroke-width:1;marker:none;display:inline" inkscape:label="#rect5080-2" />
 <g transform="translate(-397.9047,38.6171)" style="fill:#000000" id="g5082-9">
-<path transform="matrix(1.20571,0,0,1.20571,-78.24976,-27.879)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path5084-3" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-cx="375.0941" inkscape:tile-cy="137.9821" inkscape:tile-w="2.223736" inkscape:tile-h="2.223736" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.20571,0,0,1.20571,-78.24976,-27.879)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="path5084-3" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-cx="375.0941" inkscape:tile-cy="137.9821" inkscape:tile-w="2.223736" inkscape:tile-h="2.223736" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
 <use transform="translate(8.561625,0.49145)" x="0" y="0" inkscape:tiled-clone-of="#path5011" xlink:href="#path5084-3" id="use5086-7" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" width="1250" height="1250" />
 <use x="0" y="0" inkscape:tiled-clone-of="#path5011" xlink:href="#path5084-3" transform="translate(11.84313,2.65475)" id="use5088-6" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" width="1250" height="1250" />
 <use x="0" y="0" inkscape:tiled-clone-of="#path5011" xlink:href="#path5084-3" transform="translate(11.465,6.015863)" id="use5090-6" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" width="1250" height="1250" />
@@ -3050,7 +3046,7 @@ http://www.inkscape.org/</dc:description>
 </g>
 <rect y="197.0282" x="-64.90511" height="16" width="16" id="tweak_scale_mode" style="fill:none;stroke:none;stroke-width:1;marker:none;display:inline" inkscape:label="#rect5080-7" />
 <g transform="translate(-436.7857,60.59235)" style="fill:#000000" id="g5082-3">
-<path transform="matrix(1.20571,0,0,1.20571,-78.25832,-27.88514)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path5084-2" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-cx="375.0941" inkscape:tile-cy="137.9821" inkscape:tile-w="2.223736" inkscape:tile-h="2.223736" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.20571,0,0,1.20571,-78.25832,-27.88514)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="path5084-2" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-cx="375.0941" inkscape:tile-cy="137.9821" inkscape:tile-w="2.223736" inkscape:tile-h="2.223736" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
 <use transform="matrix(0.9860759,0,0,0.9860759,14.06913,1.928293)" x="0" y="0" inkscape:tiled-clone-of="#path5011" xlink:href="#path5084-2" id="use5086-8" style="fill:#000000;stroke:#ffffff;stroke-width:0.2812746" width="1250" height="1250" />
 <use x="0" y="0" inkscape:tiled-clone-of="#path5011" xlink:href="#path5084-2" transform="matrix(0.9791266,0,0,0.9791266,19.62171,5.917923)" id="use5088-8" style="fill:#000000;stroke:#ffffff;stroke-width:0.2832711" width="1250" height="1250" />
 <use x="0" y="0" inkscape:tiled-clone-of="#path5011" xlink:href="#path5084-2" transform="matrix(0.9025255,0,0,0.9025255,48.27027,19.55311)" id="use5090-1" style="fill:#000000;stroke:#ffffff;stroke-width:0.3073135" width="1250" height="1250" />
@@ -3102,49 +3098,49 @@ http://www.inkscape.org/</dc:description>
 <use height="1250" width="1250" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" id="use5130-7" transform="matrix(0.9938227,0.1109792,-0.1109792,0.9938227,20.63155,-28.53934)" xlink:href="#rect5405" inkscape:tiled-clone-of="#path5011" y="0" x="0" />
 <use height="1250" width="1250" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" id="use5132-5" transform="matrix(0.9757626,0.2188315,-0.2188315,0.9757626,45.27406,-66.3732)" xlink:href="#rect5405" inkscape:tiled-clone-of="#path5011" y="0" x="0" />
 <use height="1250" width="1250" style="fill:#000000;stroke:#ffffff;stroke-width:0.2773579" id="use5134-1" transform="translate(11.81518,12.10946)" xlink:href="#rect5405" inkscape:tiled-clone-of="#path5011" y="0" x="0" />
-<rect style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.3344132;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="rect5405" width="1.257945" height="3.036042" x="373.4724" y="136.9544" />
+<rect style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.3344132;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;" id="rect5405" width="1.257945" height="3.036042" x="373.4724" y="136.9544" />
 </g>
 <rect inkscape:label="#rect5080-7" style="fill:none;stroke:none;stroke-width:1;marker:none;display:inline" id="tweak_moreless_mode" width="16" height="16" x="-25.73359" y="197.0282" />
 <g id="g5678" style="fill:#000000" transform="translate(-399.5418,60.29884)" clip-path="url(#clipPath5905)">
-<path transform="matrix(2.361086,0,0,2.361086,-503.8152,-187.3038)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use5685" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(2.176368,0,0,2.176368,-434.5286,-155.763)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use5687" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(2.363946,0,0,2.363946,-504.888,-175.5924)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use5828" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5885" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:type="arc" transform="matrix(0,2.361086,-2.361086,0,713.6548,-741.0926)" />
-<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5889" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:type="arc" transform="matrix(0,2.363946,-2.363946,0,701.94,-742.1654)" />
-<path transform="matrix(0,2.361086,-2.361086,0,713.6548,-747.1456)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path5893" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(0,2.363946,-2.363946,0,701.94,-748.2184)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path5895" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5897" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:type="arc" transform="matrix(0,2.361086,-2.361086,0,713.6548,-735.0396)" />
-<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5899" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:type="arc" transform="matrix(0,2.363946,-2.363946,0,701.94,-736.1123)" />
-<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5909" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:type="arc" transform="matrix(2.176368,0,0,2.176368,-433.9294,-155.2869)" />
-<path transform="matrix(2.176368,0,0,2.176368,-433.3154,-154.7343)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="path5911" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(2.361086,0,0,2.361086,-503.8152,-187.3038)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" id="use5685" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(2.176368,0,0,2.176368,-434.5286,-155.763)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" id="use5687" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(2.363946,0,0,2.363946,-504.888,-175.5924)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" id="use5828" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5885" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" sodipodi:type="arc" transform="matrix(0,2.361086,-2.361086,0,713.6548,-741.0926)" />
+<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5889" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" sodipodi:type="arc" transform="matrix(0,2.363946,-2.363946,0,701.94,-742.1654)" />
+<path transform="matrix(0,2.361086,-2.361086,0,713.6548,-747.1456)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" id="path5893" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(0,2.363946,-2.363946,0,701.94,-748.2184)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" id="path5895" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5897" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" sodipodi:type="arc" transform="matrix(0,2.361086,-2.361086,0,713.6548,-735.0396)" />
+<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5899" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" sodipodi:type="arc" transform="matrix(0,2.363946,-2.363946,0,701.94,-736.1123)" />
+<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path5909" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" sodipodi:type="arc" transform="matrix(2.176368,0,0,2.176368,-433.9294,-155.2869)" />
+<path transform="matrix(2.176368,0,0,2.176368,-433.3154,-154.7343)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.138679;marker:none;visibility:visible;display:inline;" id="path5911" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
 </g>
 <rect inkscape:label="#rect5080-7" style="fill:none;stroke:none;stroke-width:1;marker:none;display:inline" id="tweak_blur_mode" width="16" height="16" x="-64.90511" y="221.0282" />
 <g id="g7655" style="fill:#000000" transform="translate(-436.7857,84.59235)">
-<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" inkscape:tile-h="2.223736" inkscape:tile-w="2.223736" inkscape:tile-cy="137.9821" inkscape:tile-cx="375.0941" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path7657" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" sodipodi:type="arc" transform="matrix(1.20571,0,0,1.20571,-78.25832,-27.88514)" />
-<path transform="matrix(1.188922,0,0,1.188922,-63.09951,-25.56857)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7660" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.180543,0,0,1.180543,-57.00309,-21.38516)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7662" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.088184,0,0,1.088184,-22.35986,-5.61394)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7664" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.188915,0,0,1.188915,-69.00487,-25.56775)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7666" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.20571,0,0,1.20571,-66.44314,-27.88514)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7668" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.093412,0,0,1.093412,-36.13602,-6.3353)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7670" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.184974,0,0,1.184974,-70.48049,-15.94187)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7672" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.111722,0,0,1.111722,-37.0964,-14.9165)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7674" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.181829,0,0,1.181829,-69.30058,-21.56258)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7676" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.485788,0,0,1.485788,-180.3604,-63.50353)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7818);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7678" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.485788,0,0,1.485788,-180.3597,-57.44874)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7802);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7680" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.485788,0,0,1.485788,-177.4064,-63.50356)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7826);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7682" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.485788,0,0,1.485788,-174.4526,-63.50354)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7834);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7684" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.485788,0,0,1.485788,-180.3605,-60.47619)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7810);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7686" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.4858,0,0,1.4858,-177.4101,-57.45014)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7794);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7688" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.485788,0,0,1.485788,-174.4524,-60.47613)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7842);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7692" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.492675,0,0,1.492675,-177.0357,-58.39903)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7786);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7694" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.191739,0,0,1.191739,-64.1566,-13.84799)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7696" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.181973,0,0,1.181973,-57.53942,-15.52772)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7698" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.20571,0,0,1.20571,-78.25832,-15.77568)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7700" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.193386,0,0,1.193386,-70.68201,-14.07527)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7702" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.121575,0,0,1.121575,-40.79199,-4.166495)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7704" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(1.20571,0,0,1.20571,-66.44314,-15.77568)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7706" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
-<path transform="matrix(6.75293,0,0,6.75293,-2153.081,-787.2478)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7778);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" id="use7690" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path inkscape:tile-y0="136.8702" inkscape:tile-x0="373.9822" inkscape:tile-h="2.223736" inkscape:tile-w="2.223736" inkscape:tile-cy="137.9821" inkscape:tile-cx="375.0941" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" sodipodi:ry="1.111868" sodipodi:rx="1.111868" sodipodi:cy="137.9821" sodipodi:cx="375.0941" id="path7657" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" sodipodi:type="arc" transform="matrix(1.20571,0,0,1.20571,-78.25832,-27.88514)" />
+<path transform="matrix(1.188922,0,0,1.188922,-63.09951,-25.56857)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7660" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.180543,0,0,1.180543,-57.00309,-21.38516)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7662" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.088184,0,0,1.088184,-22.35986,-5.61394)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7664" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.188915,0,0,1.188915,-69.00487,-25.56775)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7666" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.20571,0,0,1.20571,-66.44314,-27.88514)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7668" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.093412,0,0,1.093412,-36.13602,-6.3353)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7670" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.184974,0,0,1.184974,-70.48049,-15.94187)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7672" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.111722,0,0,1.111722,-37.0964,-14.9165)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7674" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.181829,0,0,1.181829,-69.30058,-21.56258)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7676" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.485788,0,0,1.485788,-180.3604,-63.50353)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7818);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7678" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.485788,0,0,1.485788,-180.3597,-57.44874)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7802);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7680" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.485788,0,0,1.485788,-177.4064,-63.50356)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7826);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7682" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.485788,0,0,1.485788,-174.4526,-63.50354)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7834);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7684" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.485788,0,0,1.485788,-180.3605,-60.47619)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7810);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7686" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.4858,0,0,1.4858,-177.4101,-57.45014)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7794);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7688" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.485788,0,0,1.485788,-174.4524,-60.47613)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7842);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7692" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.492675,0,0,1.492675,-177.0357,-58.39903)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7786);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7694" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.191739,0,0,1.191739,-64.1566,-13.84799)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7696" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.181973,0,0,1.181973,-57.53942,-15.52772)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7698" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.20571,0,0,1.20571,-78.25832,-15.77568)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7700" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.193386,0,0,1.193386,-70.68201,-14.07527)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7702" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.121575,0,0,1.121575,-40.79199,-4.166495)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7704" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(1.20571,0,0,1.20571,-66.44314,-15.77568)" sodipodi:type="arc" style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7706" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
+<path transform="matrix(6.75293,0,0,6.75293,-2153.081,-787.2478)" sodipodi:type="arc" style="color:#000000;fill:url(#radialGradient7778);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2773579;marker:none;visibility:visible;display:inline;" id="use7690" sodipodi:cx="375.0941" sodipodi:cy="137.9821" sodipodi:rx="1.111868" sodipodi:ry="1.111868" d="M 376.206,137.9821 C 376.206,138.5959 375.7078,139.094 375.0941,139.094 374.4803,139.094 373.9822,138.5959 373.9822,137.9821 373.9822,137.3684 374.4803,136.8702 375.0941,136.8702 375.7078,136.8702 376.206,137.3684 376.206,137.9821 z" inkscape:tile-x0="373.9822" inkscape:tile-y0="136.8702" />
 </g>
 </g>
 <g inkscape:label="#node_symmetric" transform="translate(725.0198,-119.9465)" id="node_auto">
index 3dc9e7cd7a63eef40176788f0007eb7762c1d73c..0726b722831bf4f51242e81db21566fb2afeff9e 100644 (file)
@@ -27,7 +27,8 @@ INCLUDES =    \
        $(POPPLER_GLIB_CFLAGS)  \
        -DPOTRACE=\"potrace\"   \
        $(INKSCAPE_CFLAGS) \
-       -I$(top_srcdir)/cxxtest
+       -I$(top_srcdir)/cxxtest \
+       $(WIN32_CFLAGS)
 
 include Makefile_insert
 include application/Makefile_insert
index 06103e9b32958be78fde5c6afb5bd31300fa7dbf..2c596bc0e6be22ba4016d8adca464c05f2701e1f 100644 (file)
@@ -97,7 +97,8 @@ static SPDocument *current_document = NULL;
 static gint selected_attr = 0;
 static Inkscape::XML::Node *selected_repr = NULL;
 
-static void sp_xmltree_desktop_change( Inkscape::Application *inkscape,  SPDesktop *desktop, GtkWidget *dialog );
+static void sp_xmltree_desktop_activate( Inkscape::Application *inkscape,  SPDesktop *desktop, GtkWidget *dialog );
+static void sp_xmltree_desktop_deactivate( Inkscape::Application *inkscape,  SPDesktop *desktop, GtkWidget *dialog );
 
 static void set_tree_desktop(SPDesktop *desktop);
 static void set_tree_document(SPDocument *document);
@@ -612,10 +613,10 @@ void sp_xml_tree_dialog()
         gtk_widget_hide(text_container);
 
         g_signal_connect( G_OBJECT(INKSCAPE), "activate_desktop",
-                           G_CALLBACK(sp_xmltree_desktop_change), dlg);
+                           G_CALLBACK(sp_xmltree_desktop_activate), dlg);
 
         g_signal_connect( G_OBJECT(INKSCAPE), "deactivate_desktop",
-                           G_CALLBACK(sp_xmltree_desktop_change), dlg);
+                           G_CALLBACK(sp_xmltree_desktop_deactivate), dlg);
 
         g_signal_connect((GObject *) dlg, "key_press_event", (GCallback) sp_xml_tree_key_press, NULL);
 
@@ -650,16 +651,20 @@ static gboolean sp_xml_tree_key_press(GtkWidget */*widget*/, GdkEventKey *event)
 }
 
 
-static void sp_xmltree_desktop_change(Inkscape::Application */*inkscape*/,
+static void sp_xmltree_desktop_activate(Inkscape::Application */*inkscape*/,
                                       SPDesktop *desktop,
                                       GtkWidget */*dialog*/ )
 {
-    if (!desktop) {
-        return;
-    }
     set_tree_desktop(desktop);
 }
 
+static void sp_xmltree_desktop_deactivate(Inkscape::Application */*inkscape*/,
+                                      SPDesktop *desktop,
+                                      GtkWidget */*dialog*/ )
+{
+    set_tree_desktop(NULL);
+}
+
 
 void set_tree_desktop(SPDesktop *desktop)
 {
index 53dd6c62c50c8f82ca52d755447cacb3278aed5a..e9bf1633ee7a9cb4db3ae33e38b5a5e51c6dd6d7 100644 (file)
@@ -1497,6 +1497,7 @@ static gint
 sp_canvas_button (GtkWidget *widget, GdkEventButton *event)
 {
     SPCanvas *canvas = SP_CANVAS (widget);
+    SPDesktop *dt = SP_ACTIVE_DESKTOP;
 
     int retval = FALSE;
 
@@ -1531,7 +1532,13 @@ sp_canvas_button (GtkWidget *widget, GdkEventButton *event)
     case GDK_BUTTON_PRESS:
     case GDK_2BUTTON_PRESS:
     case GDK_3BUTTON_PRESS:
-        /* Pick the current item as if the button were not pressed, and
+       if (dt) { 
+                       // Snapping will be on hold if we're moving the mouse at high speeds. When starting
+               // drawing a new shape we really should snap though. 
+               dt->namedview->snap_manager.snapprefs.setSnapPostponedGlobally(false);
+               }
+       
+       /* Pick the current item as if the button were not pressed, and
          * then process the event.
          */
         canvas->state = event->state;
@@ -1541,7 +1548,9 @@ sp_canvas_button (GtkWidget *widget, GdkEventButton *event)
         break;
 
     case GDK_BUTTON_RELEASE:
-        /* Process the event as if the button were pressed, then repick
+       sp_canvas_snap_watchdog_callback(canvas); // If we have any pending snapping action, then invoke it now 
+        
+       /* Process the event as if the button were pressed, then repick
          * after the button has been released
          */
         canvas->state = event->state;
@@ -1550,6 +1559,7 @@ sp_canvas_button (GtkWidget *widget, GdkEventButton *event)
         canvas->state = event->state;
         pick_current_item (canvas, (GdkEvent *) event);
         event->state ^= mask;
+        
         break;
 
     default:
@@ -1583,7 +1593,7 @@ static inline void request_motions(GdkWindow *w, GdkEventMotion *event) {
 static int
 sp_canvas_motion (GtkWidget *widget, GdkEventMotion *event)
 {
-    static guint32 prev_time;
+       static guint32 prev_time;
        static boost::optional<Geom::Point> prev_pos;
        
        int status;
@@ -1597,44 +1607,44 @@ sp_canvas_motion (GtkWidget *widget, GdkEventMotion *event)
     if (canvas->pixmap_gc == NULL) // canvas being deleted
         return FALSE;
     
-    // Snap when speed drops below e.g. 0.1 px/msec, or when no motion events have occured for 100 msec.
-       // i.e. snap when we're at stand still. The speed threshold enforces snapping for tablets, which will never
-       // be full at stand still and might keep spitting out motion events.
+    SPDesktop *dt = SP_ACTIVE_DESKTOP;
+    
+    // Snap when speed drops below e.g. 0.02 px/msec, or when no motion events have occured for some period.
+       // i.e. snap when we're at stand still. A speed threshold enforces snapping for tablets, which might never
+       // be fully at stand still and might keep spitting out motion events.
     
-    // When moving at speeds around the speed limit, Inkscape might snap for one motion event but not for the 
-    // next, which will make the object that's being dragged jump from the snapped position to the mouse 
-    // position and back again. That could be annoying, but I don't see an easy way around this. 
-
     if (event->type == GDK_MOTION_NOTIFY) {            
        Geom::Point event_pos(event->x, event->y);
        guint32 event_t = gdk_event_get_time ( (GdkEvent *) event );
                
-       sp_canvas_snap_watchdog_kill(canvas);
-       SPDesktop *dt = SP_ACTIVE_DESKTOP;
+       if (dt) { // put snapping on hold
+                       dt->namedview->snap_manager.snapprefs.setSnapPostponedGlobally(true);
+               }                               
        
        if (prev_pos) {
                Geom::Coord dist = Geom::L2(event_pos - *prev_pos);
                guint32 delta_t = event_t - prev_time;
                gdouble speed = delta_t > 0 ? dist/delta_t : 1000;
                // std::cout << "speed = " << speed << " px/msec " << "| time passed = " << delta_t << " msec" << std::endl;
-               if (speed < 0.1) {
-                               if (dt) {
-                                       dt->namedview->snap_manager.snapprefs.setSnapPostponedGlobally(false);
-                               }
-                       } else {
-                               // We're moving fast, so postpone any snapping until the next GDK_MOTION_NOTIFY event. 
-                               if (dt) {
-                                       dt->namedview->snap_manager.snapprefs.setSnapPostponedGlobally(true);
-                               }
-                               // We must snap at some point in time though, so set a watchdog timer at 100 msec from
-                               // now, just in case there's no future motion event that's under the speed limit.
-                               sp_canvas_snap_watchdog_set(canvas, event);
+               if (speed > 0.02) { // Jitter threshold, might be needed for tablets 
+                               // We're moving fast, so postpone any snapping until the next GDK_MOTION_NOTIFY event. We
+                       // will keep on postponing the snapping as long as the speed is high.
+                               // We must snap at some point in time though, so set a watchdog timer at some time from
+                               // now, just in case there's no future motion event that drops under the speed limit (when 
+                       // stoppping abruptly)
+                       sp_canvas_snap_watchdog_kill(canvas);
+                       sp_canvas_snap_watchdog_set(canvas, event); // watchdog is reset, i.e. pushed forward in time
+                       } else { // Speed is very low, so we're virtually at stand still
+                               // But if we're really standing still, then we should snap now. We could use some low-pass filtering, 
+                               // otherwise snapping occurs for each jitter movement. For this filtering we'll leave the watchdog to expire,
+                               // snap, and set a new watchdog again. 
+                               if (canvas->watchdog_id == 0) { // no watchdog has been set 
+                                       // it might have already expired, so we'll set a new one; the snapping frequency will be limited by this
+                                       sp_canvas_snap_watchdog_set(canvas, event);
+                               } // else: watchdog has been set before and we'll wait for it to expire
                        }
                } else {
                        // This is the first GDK_MOTION_NOTIFY event, so postpone snapping and set the watchdog
-                       if (dt) {
-                               dt->namedview->snap_manager.snapprefs.setSnapPostponedGlobally(true);
-                       }
                        sp_canvas_snap_watchdog_set(canvas, event);
                }
                        
@@ -1656,12 +1666,17 @@ sp_canvas_motion (GtkWidget *widget, GdkEventMotion *event)
 
 gboolean sp_canvas_snap_watchdog_callback(gpointer data) 
 {
+       // Snap NOW! For this the "postponed" flag will be reset and an the last motion event will be repeated  
+       SPCanvas *canvas = reinterpret_cast<SPCanvas *>(data);
+       if (!canvas->watchdog_event) {
+               return FALSE;
+       }       
+       
        SPDesktop *dt = SP_ACTIVE_DESKTOP;
        if (dt) {
                dt->namedview->snap_manager.snapprefs.setSnapPostponedGlobally(false);
        }
        
-       SPCanvas *canvas = reinterpret_cast<SPCanvas *>(data);
        emit_event(canvas, canvas->watchdog_event);
        gdk_event_free(canvas->watchdog_event);
        canvas->watchdog_event = NULL;
@@ -1673,7 +1688,7 @@ gboolean sp_canvas_snap_watchdog_callback(gpointer data)
 void sp_canvas_snap_watchdog_set(SPCanvas *canvas, GdkEventMotion *event) 
 {
        g_assert(canvas->watchdog_id == 0);
-       canvas->watchdog_id = g_timeout_add(100, &sp_canvas_snap_watchdog_callback, canvas);
+       canvas->watchdog_id = g_timeout_add(400, &sp_canvas_snap_watchdog_callback, canvas);
        g_assert(canvas->watchdog_event == NULL);
        canvas->watchdog_event = gdk_event_copy( (GdkEvent *) event); 
 }
index d1124b75ab497e8ab1cc16ffa7f47f512b8a9d0b..74b6e8d52695f40b9a3e0ab368a010d59ba835a3 100644 (file)
@@ -295,7 +295,7 @@ spdc_check_for_and_apply_waiting_LPE(SPDrawContext *dc, SPItem *item)
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
 
     if (item && SP_IS_LPE_ITEM(item)) {
-        if (prefs->getBool(tool_name(dc) + "/freehand-mode", 0) == 1) {
+        if (prefs->getInt(tool_name(dc) + "/freehand-mode", 0) == 1) {
             Effect::createAndApply(SPIRO, dc->desktop->doc(), item);
         }
 
index 0bab68456deca0653bbac7498d30701985f443e6..1de46034ed35e0557c4e513d2fdd5efe960e9262 100644 (file)
@@ -140,9 +140,14 @@ extension_internal_libinternal_a_SOURCES = \
        extension/internal/latex-pstricks-out.h \
        $(extension_internal_libwpg) \
        $(extension_internal_image_magick_sources) \
-       \
        extension/internal/filter/filter-all.cpp \
        extension/internal/filter/filter-file.cpp \
        extension/internal/filter/filter.cpp \
-       extension/internal/filter/filter.h
+       extension/internal/filter/filter.h \
+       extension/internal/win32.h \
+       extension/internal/win32.cpp \
+       extension/internal/emf-win32-print.h \
+       extension/internal/emf-win32-print.cpp \
+       extension/internal/emf-win32-inout.h \
+       extension/internal/emf-win32-inout.cpp 
 
index 6bbaa5c06f2c6e938f80d8381fae3139b1832b84..656cd4a08956b40d5e4498060e2f6a2cdad5c126 100644 (file)
@@ -1305,7 +1305,11 @@ CairoRenderContext::renderPathVector(Geom::PathVector const & pathv, SPStyle con
         return true;
     }
 
-    if (style->fill.isNone() && style->stroke.isNone())
+    bool no_fill = style->fill.isNone() || style->fill_opacity.value == 0;
+    bool no_stroke = style->stroke.isNone() || style->stroke_width.computed < 1e-9 || 
+                    style->fill_opacity.value == 0;
+
+    if (no_fill && no_stroke)
         return true;
 
     bool need_layer = ( !_state->merge_opacity && !_state->need_layer &&
@@ -1316,7 +1320,7 @@ CairoRenderContext::renderPathVector(Geom::PathVector const & pathv, SPStyle con
     else
         pushLayer();
 
-    if (!style->fill.isNone()) {
+    if (!no_fill) {
         _setFillStyle(style, pbox);
         setPathVector(pathv);
 
@@ -1326,15 +1330,15 @@ CairoRenderContext::renderPathVector(Geom::PathVector const & pathv, SPStyle con
             cairo_set_fill_rule(_cr, CAIRO_FILL_RULE_WINDING);
         }
 
-        if (style->stroke.isNone())
+        if (no_stroke)
             cairo_fill(_cr);
         else
             cairo_fill_preserve(_cr);
     }
 
-    if (!style->stroke.isNone()) {
+    if (!no_stroke) {
         _setStrokeStyle(style, pbox);
-        if (style->fill.isNone())
+        if (no_fill)
             setPathVector(pathv);
 
         cairo_stroke(_cr);
index 86e04fb548e2904feb7676102bde39f7427b208f..af9c3cd6eecb8c0a09b856465e5730466fed97c2 100644 (file)
@@ -155,7 +155,6 @@ static void sp_image_render(SPItem *item, CairoRenderContext *ctx);
 static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx);
 static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx);
 
-/* TODO FIXME: this does not render painting-marker-01-f.svg of SVG1.1 Test suite correctly. (orientation of one of the markers middle left ) */
 static void sp_shape_render (SPItem *item, CairoRenderContext *ctx)
 {
     NRRect pbox;
@@ -164,7 +163,6 @@ static void sp_shape_render (SPItem *item, CairoRenderContext *ctx)
 
     if (!shape->curve) return;
 
-    /* fixme: Think (Lauris) */
     sp_item_invoke_bbox(item, &pbox, Geom::identity(), TRUE);
 
     SPStyle* style = SP_OBJECT_STYLE (item);
@@ -187,16 +185,22 @@ static void sp_shape_render (SPItem *item, CairoRenderContext *ctx)
                 tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(path_it->front().pointAt(0));
             }
 
+            bool render = true;
             if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
-                tr = Geom::Scale(style->stroke_width.computed) * tr;
+                if (style->stroke_width.computed > 1e-9) {
+                    tr = Geom::Scale(style->stroke_width.computed) * tr;
+                } else {
+                    render = false; // stroke width zero and marker is thus scaled down to zero, skip
+                }
             }
 
-            tr = (Geom::Matrix)marker_item->transform * (Geom::Matrix)marker->c2p * tr;
-
-            Geom::Matrix old_tr = marker_item->transform;
-            marker_item->transform = tr;
-            renderer->renderItem (ctx, marker_item);
-            marker_item->transform = old_tr;
+            if (render) {
+                tr = (Geom::Matrix)marker_item->transform * (Geom::Matrix)marker->c2p * tr;
+                Geom::Matrix old_tr = marker_item->transform;
+                marker_item->transform = tr;
+                renderer->renderItem (ctx, marker_item);
+                marker_item->transform = old_tr;
+            }
         }
 
         if ( shape->marker[SP_MARKER_LOC_MID] && (path_it->size_default() > 1) ) {
@@ -218,16 +222,22 @@ static void sp_shape_render (SPItem *item, CairoRenderContext *ctx)
                     tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(curve_it1->pointAt(1));
                 }
 
+                bool render = true;
                 if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
-                    tr = Geom::Scale(style->stroke_width.computed) * tr;
+                    if (style->stroke_width.computed > 1e-9) {
+                        tr = Geom::Scale(style->stroke_width.computed) * tr;
+                    } else {
+                        render = false; // stroke width zero and marker is thus scaled down to zero, skip
+                    }
                 }
 
-                tr = (Geom::Matrix)marker_item->transform * (Geom::Matrix)marker->c2p * tr;
-
-                Geom::Matrix old_tr = marker_item->transform;
-                marker_item->transform = tr;
-                renderer->renderItem (ctx, marker_item);
-                marker_item->transform = old_tr;
+                if (render) {
+                    tr = (Geom::Matrix)marker_item->transform * (Geom::Matrix)marker->c2p * tr;
+                    Geom::Matrix old_tr = marker_item->transform;
+                    marker_item->transform = tr;
+                    renderer->renderItem (ctx, marker_item);
+                    marker_item->transform = old_tr;
+                }
 
                 ++curve_it1;
                 ++curve_it2;
@@ -253,16 +263,22 @@ static void sp_shape_render (SPItem *item, CairoRenderContext *ctx)
                 tr = Geom::Rotate::from_degrees(marker->orient) * Geom::Translate(lastcurve.pointAt(1));
             }
 
+            bool render = true;
             if (marker->markerUnits == SP_MARKER_UNITS_STROKEWIDTH) {
-                tr = Geom::Scale(style->stroke_width.computed) * tr;
+                if (style->stroke_width.computed > 1e-9) {
+                    tr = Geom::Scale(style->stroke_width.computed) * tr;
+                } else {
+                    render = false; // stroke width zero and marker is thus scaled down to zero, skip
+                }
             }
 
-            tr = (Geom::Matrix)marker_item->transform * (Geom::Matrix)marker->c2p * tr;
-
-            Geom::Matrix old_tr = marker_item->transform;
-            marker_item->transform = tr;
-            renderer->renderItem (ctx, marker_item);
-            marker_item->transform = old_tr;
+            if (render) {
+                tr = (Geom::Matrix)marker_item->transform * (Geom::Matrix)marker->c2p * tr;
+                Geom::Matrix old_tr = marker_item->transform;
+                marker_item->transform = tr;
+                renderer->renderItem (ctx, marker_item);
+                marker_item->transform = old_tr;
+            }
         }
     }
 }
index 8dd793f9238063e93af01d04183c3ffb41362f11..bc7a3ac78724692f01605ff76be495d9ee24f864 100644 (file)
@@ -1,15 +1,13 @@
-/** \file
- * Enhanced Metafile Input and Output.
+/** @file
+ * @brief Windows-only Enhanced Metafile input and output.
  */
-/*
- * Authors:
+/* Authors:
  *   Ulf Erikson <ulferikson@users.sf.net>
  *
  * Copyright (C) 2006-2008 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
- */
-/*
+ *
  * References:
  *  - How to Create & Play Enhanced Metafiles in Win32
  *      http://support.microsoft.com/kb/q145999/
@@ -2447,17 +2445,14 @@ EmfWin32::init (void)
 
 } } }  /* namespace Inkscape, Extension, Implementation */
 
-
 #endif /* WIN32 */
-
-
 /*
   Local Variables:
-  mode:cpp
+  mode:c++
   c-file-style:"stroustrup"
-  c-file-offsets:((innamespace . 0)(inline-open . 0))
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
   indent-tabs-mode:nil
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 01aa91bdcf6819be383dc65d255660a4b7a4d64b..49c1826e45f9af92f27f53bee9fc558389c96257 100644 (file)
@@ -1,17 +1,15 @@
-/*
- * Enhanced Metafile Input/Output.
- *
- * Authors:
+/** @file
+ * @brief Enhanced Metafile Input/Output
+ */
+/* Authors:
  *   Ulf Erikson <ulferikson@users.sf.net>
  *
  * Copyright (C) 2006-2008 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
-
-#ifndef EXTENSION_INTERNAL_EMF_WIN32_H
-#define EXTENSION_INTERNAL_EMF_WIN32_H
-
+#ifndef SEEN_EXTENSION_INTERNAL_EMF_WIN32_H
+#define SEEN_EXTENSION_INTERNAL_EMF_WIN32_H
 #ifdef WIN32
 
 #include "extension/implementation/implementation.h"
@@ -56,4 +54,4 @@ private:
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index d5bdcb6d3c5237ec9c29724b03b4fa76de1e8b73..8c92fc3209f8d3531093cf8f7a2ac02dbd085235 100644 (file)
@@ -1,8 +1,7 @@
-/** \file
- * Enhanced Metafile Printing.
+/** @file
+ * @brief Enhanced Metafile printing
  */
-/*
- * Authors:
+/* Authors:
  *   Ulf Erikson <ulferikson@users.sf.net>
  *
  * Copyright (C) 2006-2008 Authors
index 374aaef459c28da553c501acdd3b16fc555574b6..ab9a1a4cf9f3a64d103169b7bcf416cdfcfcab65 100644 (file)
@@ -1,16 +1,15 @@
-#ifndef __INKSCAPE_EXTENSION_INTERNAL_PRINT_EMF_WIN32_H__
-#define __INKSCAPE_EXTENSION_INTERNAL_PRINT_EMF_WIN32_H__
-
-/*
- * Enhanced Metafile Printing.
- *
- * Author:
+/** @file
+ * @brief Enhanced Metafile printing - implementation
+ */
+/* Author:
  *   Ulf Erikson <ulferikson@users.sf.net>
  *
  * Copyright (C) 2006-2008 Authors
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
+#ifndef __INKSCAPE_EXTENSION_INTERNAL_PRINT_EMF_WIN32_H__
+#define __INKSCAPE_EXTENSION_INTERNAL_PRINT_EMF_WIN32_H__
 
 #ifdef WIN32
 
@@ -100,11 +99,11 @@ protected:
 
 /*
   Local Variables:
-  mode:cpp
+  mode:c++
   c-file-style:"stroustrup"
-  c-file-offsets:((innamespace . 0)(inline-open . 0))
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
   indent-tabs-mode:nil
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index ecf66ca1fa8a9abdf84ee77830392cdb82f619e9..0fa70d7343981bbf6d32a020fa58eea03022e522 100644 (file)
@@ -1,14 +1,14 @@
-#define __SP_MODULE_WIN32_C__
-
-/*
- * Windows stuff
- *
- * Author:
+/** @file
+ * @brief Windows-specific stuff
+ */
+/* Author:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *
  * This code is in public domain
  */
 
+#ifdef WIN32
+
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
@@ -494,3 +494,16 @@ PrintWin32::init (void)
 }  /* namespace Internal */
 }  /* namespace Extension */
 }  /* namespace Inkscape */
+
+#endif // ifdef WIN32
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 4fb726faea342b105b2035725121446d87642471..9462115c679b463b10720dcf00d2ebed39e84234 100644 (file)
@@ -1,10 +1,7 @@
-#ifndef __INKSCAPE_EXTENSION_INTERNAL_PRINT_WIN32_H__
-#define __INKSCAPE_EXTENSION_INTERNAL_PRINT_WIN32_H__
-
-/*
- * Windows stuff
- *
- * Author:
+/** @file
+ * @brief Windows-specific stuff
+ */
+/* Author:
  *   Lauris Kaplinski <lauris@kaplinski.com>
  *   Ted Gould <ted@gould.cx>
  *
  * Ted: This code is released under the GNU GPL
  */
 
-#include <config.h>
+#ifndef __INKSCAPE_EXTENSION_INTERNAL_PRINT_WIN32_H__
+#define __INKSCAPE_EXTENSION_INTERNAL_PRINT_WIN32_H__
+#ifdef WIN32
 
-#ifndef WIN32
-#error "This file is only usable for Windows"
+#ifdef HAVE_CONFIG_H
+ #include <config.h>
 #endif
 
 #ifdef DATADIR
@@ -33,55 +32,65 @@ namespace Internal {
 /* Initialization */
 
 class PrintWin32 : public Inkscape::Extension::Implementation::Implementation {
-       /* Document dimensions */
-       float _PageWidth;
-       float _PageHeight;
+    /* Document dimensions */
+    float _PageWidth;
+    float _PageHeight;
 
-       HDC _hDC;
+    HDC _hDC;
 
-       unsigned int _landscape;
+    unsigned int _landscape;
 
-       void main_init (int argc, char **argv, const char *name);
-       void finish (void);
+    void main_init (int argc, char **argv, const char *name);
+    void finish (void);
 
-       /* File dialogs */
-       char *get_open_filename (unsigned char *dir, unsigned char *filter, unsigned char *title);
-       char *get_write_filename (unsigned char *dir, unsigned char *filter, unsigned char *title);
-       char *get_save_filename (unsigned char *dir, unsigned int *spns);
+    /* File dialogs */
+    char *get_open_filename (unsigned char *dir, unsigned char *filter, unsigned char *title);
+    char *get_write_filename (unsigned char *dir, unsigned char *filter, unsigned char *title);
+    char *get_save_filename (unsigned char *dir, unsigned int *spns);
 
-       VOID CALLBACK timer (HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
+    VOID CALLBACK timer (HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
 
 
 public:
-       PrintWin32 (void);
-       virtual ~PrintWin32 (void);
-
-       /* Tell modules about me */
-       static void init (void);
-
-       /* Platform detection */
-       static gboolean is_os_wide();
-
-       /* Print functions */
-       virtual unsigned int setup (Inkscape::Extension::Print * module);
-       //virtual unsigned int set_preview (Inkscape::Extension::Print * module);
-
-       virtual unsigned int begin (Inkscape::Extension::Print * module, SPDocument *doc);
-       virtual unsigned int finish (Inkscape::Extension::Print * module);
-
-       /* Rendering methods */
-       /*
-       virtual unsigned int bind (Inkscape::Extension::Print * module, const Geom::Matrix *transform, float opacity);
-       virtual unsigned int release (Inkscape::Extension::Print * module);
-       virtual unsigned int comment (Inkscape::Extension::Print * module, const char * comment);
-       virtual unsigned int image (Inkscape::Extension::Print * module, unsigned char *px, unsigned int w, unsigned int h, unsigned int rs,
-                               const Geom::Matrix *transform, const SPStyle *style);
-        */
-
+    PrintWin32 (void);
+    virtual ~PrintWin32 (void);
+
+    /* Tell modules about me */
+    static void init (void);
+
+    /* Platform detection */
+    static gboolean is_os_wide();
+
+    /* Print functions */
+    virtual unsigned int setup (Inkscape::Extension::Print * module);
+    //virtual unsigned int set_preview (Inkscape::Extension::Print * module);
+
+    virtual unsigned int begin (Inkscape::Extension::Print * module, SPDocument *doc);
+    virtual unsigned int finish (Inkscape::Extension::Print * module);
+
+    /* Rendering methods */
+    /*
+    virtual unsigned int bind (Inkscape::Extension::Print * module, const Geom::Matrix *transform, float opacity);
+    virtual unsigned int release (Inkscape::Extension::Print * module);
+    virtual unsigned int comment (Inkscape::Extension::Print * module, const char * comment);
+    virtual unsigned int image (Inkscape::Extension::Print * module, unsigned char *px, unsigned int w, unsigned int h, unsigned int rs,
+                           const Geom::Matrix *transform, const SPStyle *style);
+    */
 };
 
 }  /* namespace Internal */
 }  /* namespace Extension */
 }  /* namespace Inkscape */
 
+#endif // ifdef WIN32
 #endif /* __INKSCAPE_EXTENSION_INTERNAL_PRINT_WIN32_H__ */
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index ce26d2c5f2908f07a184f77573359441ab0d2a6b..0fa24ccad6c7ab22e6670c5e7b14ec2f1f6854e7 100644 (file)
@@ -443,7 +443,7 @@ sp_gradient_convert_to_userspace(SPGradient *gr, SPItem *item, gchar const *prop
 }
 
 void
-sp_gradient_transform_multiply(SPGradient *gradient, NR::Matrix postmul, bool set)
+sp_gradient_transform_multiply(SPGradient *gradient, Geom::Matrix postmul, bool set)
 {
     if (set) {
         gradient->gradientTransform = postmul;
@@ -819,7 +819,7 @@ Set the position of point point_type of the gradient applied to item (either fil
 p_w (in desktop coordinates). Write_repr if you want the change to become permanent.
 */
 void
-sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::Point p_w, bool fill_or_stroke, bool write_repr, bool scale)
+sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, Geom::Point p_w, bool fill_or_stroke, bool write_repr, bool scale)
 {
     SPGradient *gradient = sp_item_gradient (item, fill_or_stroke);
 
@@ -828,8 +828,8 @@ sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::
 
     gradient = sp_gradient_convert_to_userspace (gradient, item, fill_or_stroke? "fill" : "stroke");
 
-    NR::Matrix i2d (sp_item_i2d_affine (item));
-    NR::Point p = p_w * i2d.inverse();
+    Geom::Matrix i2d (sp_item_i2d_affine (item));
+    Geom::Point p = p_w * i2d.inverse();
     p *= (gradient->gradientTransform).inverse();
     // now p is in gradient's original coordinates
 
@@ -840,11 +840,11 @@ sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::
         switch (point_type) {
             case POINT_LG_BEGIN:
                 if (scale) {
-                    lg->x2.computed += (lg->x1.computed - p[NR::X]);
-                    lg->y2.computed += (lg->y1.computed - p[NR::Y]);
+                    lg->x2.computed += (lg->x1.computed - p[Geom::X]);
+                    lg->y2.computed += (lg->y1.computed - p[Geom::Y]);
                 }
-                lg->x1.computed = p[NR::X];
-                lg->y1.computed = p[NR::Y];
+                lg->x1.computed = p[Geom::X];
+                lg->y1.computed = p[Geom::Y];
                 if (write_repr) {
                     if (scale) {
                         sp_repr_set_svg_double(repr, "x2", lg->x2.computed);
@@ -858,11 +858,11 @@ sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::
                 break;
             case POINT_LG_END:
                 if (scale) {
-                    lg->x1.computed += (lg->x2.computed - p[NR::X]);
-                    lg->y1.computed += (lg->y2.computed - p[NR::Y]);
+                    lg->x1.computed += (lg->x2.computed - p[Geom::X]);
+                    lg->y1.computed += (lg->y2.computed - p[Geom::Y]);
                 }
-                lg->x2.computed = p[NR::X];
-                lg->y2.computed = p[NR::Y];
+                lg->x2.computed = p[Geom::X];
+                lg->y2.computed = p[Geom::Y];
                 if (write_repr) {
                     if (scale) {
                         sp_repr_set_svg_double(repr, "x1", lg->x1.computed);
@@ -877,7 +877,7 @@ sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::
             case POINT_LG_MID:
             {                              
                 // using X-coordinates only to determine the offset, assuming p has been snapped to the vector from begin to end.
-                double offset = get_offset_between_points (p, NR::Point(lg->x1.computed, lg->y1.computed), NR::Point(lg->x2.computed, lg->y2.computed));
+                double offset = get_offset_between_points (p, Geom::Point(lg->x1.computed, lg->y1.computed), Geom::Point(lg->x2.computed, lg->y2.computed));
                 SPGradient *vector = sp_gradient_get_forked_vector_if_necessary (lg, false);
                 sp_gradient_ensure_vector(lg);
                 lg->vector.stops.at(point_i).offset = offset;
@@ -895,21 +895,21 @@ sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::
                }
        } else if (SP_IS_RADIALGRADIENT(gradient)) {
         SPRadialGradient *rg = SP_RADIALGRADIENT(gradient);
-        NR::Point c (rg->cx.computed, rg->cy.computed);
-        NR::Point c_w = c * gradient->gradientTransform * i2d; // now in desktop coords
-        if ((point_type == POINT_RG_R1 || point_type == POINT_RG_R2) && NR::L2 (p_w - c_w) < 1e-3) {
+        Geom::Point c (rg->cx.computed, rg->cy.computed);
+        Geom::Point c_w = c * gradient->gradientTransform * i2d; // now in desktop coords
+        if ((point_type == POINT_RG_R1 || point_type == POINT_RG_R2) && Geom::L2 (p_w - c_w) < 1e-3) {
             // prevent setting a radius too close to the center
             return;
         }
-        NR::Matrix new_transform;
+        Geom::Matrix new_transform;
         bool transform_set = false;
 
                switch (point_type) {
                case POINT_RG_CENTER:
-                       rg->fx.computed = p[NR::X] + (rg->fx.computed - rg->cx.computed);
-                       rg->fy.computed = p[NR::Y] + (rg->fy.computed - rg->cy.computed);
-                       rg->cx.computed = p[NR::X];
-                       rg->cy.computed = p[NR::Y];
+                       rg->fx.computed = p[Geom::X] + (rg->fx.computed - rg->cx.computed);
+                       rg->fy.computed = p[Geom::Y] + (rg->fy.computed - rg->cy.computed);
+                       rg->cx.computed = p[Geom::X];
+                       rg->cy.computed = p[Geom::Y];
                        if (write_repr) {
                                sp_repr_set_svg_double(repr, "fx", rg->fx.computed);
                                sp_repr_set_svg_double(repr, "fy", rg->fy.computed);
@@ -920,8 +920,8 @@ sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::
                        }
                        break;
                case POINT_RG_FOCUS:
-                       rg->fx.computed = p[NR::X];
-                       rg->fy.computed = p[NR::Y];
+                       rg->fx.computed = p[Geom::X];
+                       rg->fy.computed = p[Geom::Y];
                        if (write_repr) {
                                sp_repr_set_svg_double(repr, "fx", rg->fx.computed);
                                sp_repr_set_svg_double(repr, "fy", rg->fy.computed);
@@ -931,17 +931,17 @@ sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::
                        break;
                case POINT_RG_R1:
                        {
-                NR::Point r1_w = (c + NR::Point(rg->r.computed, 0)) * gradient->gradientTransform * i2d;
-                               double r1_angle = NR::atan2(r1_w - c_w);
-                               double move_angle = NR::atan2(p_w - c_w) - r1_angle;
-                               double move_stretch = NR::L2(p_w - c_w) / NR::L2(r1_w - c_w);
-
-                               NR::Matrix move = NR::Matrix (Geom::Translate (-c_w)) *
-                                                                                                NR::Matrix (Geom::Rotate(-r1_angle)) *
-                                                                                                NR::Matrix (Geom::Scale(move_stretch, scale? move_stretch : 1)) *
-                                                                                                NR::Matrix (Geom::Rotate(r1_angle)) *
-                                                                                                NR::Matrix (Geom::Rotate(move_angle)) *
-                                                                                                NR::Matrix (Geom::Translate (c_w));
+                Geom::Point r1_w = (c + Geom::Point(rg->r.computed, 0)) * gradient->gradientTransform * i2d;
+                               double r1_angle = Geom::atan2(r1_w - c_w);
+                               double move_angle = Geom::atan2(p_w - c_w) - r1_angle;
+                               double move_stretch = Geom::L2(p_w - c_w) / Geom::L2(r1_w - c_w);
+
+                               Geom::Matrix move = Geom::Matrix (Geom::Translate (-c_w)) *
+                                                                                                Geom::Matrix (Geom::Rotate(-r1_angle)) *
+                                                                                                Geom::Matrix (Geom::Scale(move_stretch, scale? move_stretch : 1)) *
+                                                                                                Geom::Matrix (Geom::Rotate(r1_angle)) *
+                                                                                                Geom::Matrix (Geom::Rotate(move_angle)) *
+                                                                                                Geom::Matrix (Geom::Translate (c_w));
 
                                new_transform = gradient->gradientTransform * i2d * move * i2d.inverse();
                                transform_set = true;
@@ -950,17 +950,17 @@ sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::
                        }
                case POINT_RG_R2:
                        {
-                               NR::Point r2_w = (c + NR::Point(0, -rg->r.computed)) * gradient->gradientTransform * i2d;
-                               double r2_angle = NR::atan2(r2_w - c_w);
-                               double move_angle = NR::atan2(p_w - c_w) - r2_angle;
-                               double move_stretch = NR::L2(p_w - c_w) / NR::L2(r2_w - c_w);
-
-                               NR::Matrix move = NR::Matrix (Geom::Translate (-c_w)) *
-                                                                                                NR::Matrix (Geom::Rotate(-r2_angle)) *
-                                                                                                NR::Matrix (Geom::Scale(move_stretch, scale? move_stretch : 1)) *
-                                                                                                NR::Matrix (Geom::Rotate(r2_angle)) *
-                                                                                                NR::Matrix (Geom::Rotate(move_angle)) *
-                                                                                                NR::Matrix (Geom::Translate (c_w));
+                               Geom::Point r2_w = (c + Geom::Point(0, -rg->r.computed)) * gradient->gradientTransform * i2d;
+                               double r2_angle = Geom::atan2(r2_w - c_w);
+                               double move_angle = Geom::atan2(p_w - c_w) - r2_angle;
+                               double move_stretch = Geom::L2(p_w - c_w) / Geom::L2(r2_w - c_w);
+
+                               Geom::Matrix move = Geom::Matrix (Geom::Translate (-c_w)) *
+                                                                                                Geom::Matrix (Geom::Rotate(-r2_angle)) *
+                                                                                                Geom::Matrix (Geom::Scale(move_stretch, scale? move_stretch : 1)) *
+                                                                                                Geom::Matrix (Geom::Rotate(r2_angle)) *
+                                                                                                Geom::Matrix (Geom::Rotate(move_angle)) *
+                                                                                                Geom::Matrix (Geom::Translate (c_w));
 
                                new_transform = gradient->gradientTransform * i2d * move * i2d.inverse();
                                transform_set = true;
@@ -969,8 +969,8 @@ sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::
             }
         case POINT_RG_MID1:
             {
-                NR::Point start = NR::Point (rg->cx.computed, rg->cy.computed);
-                 NR::Point end   = NR::Point (rg->cx.computed + rg->r.computed, rg->cy.computed);
+                Geom::Point start = Geom::Point (rg->cx.computed, rg->cy.computed);
+                 Geom::Point end   = Geom::Point (rg->cx.computed + rg->r.computed, rg->cy.computed);
                 double offset = get_offset_between_points (p, start, end);
                 SPGradient *vector = sp_gradient_get_forked_vector_if_necessary (rg, false);
                 sp_gradient_ensure_vector(rg);
@@ -985,8 +985,8 @@ sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::
                 break;
             }
         case POINT_RG_MID2:
-                NR::Point start = NR::Point (rg->cx.computed, rg->cy.computed);
-                NR::Point end   = NR::Point (rg->cx.computed, rg->cy.computed - rg->r.computed);
+                Geom::Point start = Geom::Point (rg->cx.computed, rg->cy.computed);
+                Geom::Point end   = Geom::Point (rg->cx.computed, rg->cy.computed - rg->r.computed);
                 double offset = get_offset_between_points (p, start, end);
                 SPGradient *vector = sp_gradient_get_forked_vector_if_necessary(rg, false);
                 sp_gradient_ensure_vector(rg);
@@ -1040,7 +1040,7 @@ Returns the position of point point_type of the gradient applied to item (either
 in desktop coordinates.
 */
 
-NR::Point
+Geom::Point
 sp_item_gradient_get_coords (SPItem *item, guint point_type, guint point_i, bool fill_or_stroke)
 {
     SPGradient *gradient = sp_item_gradient (item, fill_or_stroke);
@@ -1054,10 +1054,10 @@ sp_item_gradient_get_coords (SPItem *item, guint point_type, guint point_i, bool
         SPLinearGradient *lg = SP_LINEARGRADIENT(gradient);
         switch (point_type) {
             case POINT_LG_BEGIN:
-                p = NR::Point (lg->x1.computed, lg->y1.computed);
+                p = Geom::Point (lg->x1.computed, lg->y1.computed);
                 break;
             case POINT_LG_END:
-                p = NR::Point (lg->x2.computed, lg->y2.computed);
+                p = Geom::Point (lg->x2.computed, lg->y2.computed);
                 break;
             case POINT_LG_MID:
                 {   
index 13e15e5b8c2a6a971aef29fb124d04a1bdb75a7d..73b9893bc69e833ee86069ee6355ceddb3826a3d 100644 (file)
@@ -66,11 +66,11 @@ guint32 average_color (guint32 c1, guint32 c2, gdouble p = 0.5);
 
 SPStop *sp_vector_add_stop (SPGradient *vector, SPStop* prev_stop, SPStop* next_stop, gfloat offset);
 
-void sp_gradient_transform_multiply (SPGradient *gradient, NR::Matrix postmul, bool set);
+void sp_gradient_transform_multiply (SPGradient *gradient, Geom::Matrix postmul, bool set);
 
 SPGradient * sp_item_gradient (SPItem *item, bool fill_or_stroke);
-void sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, NR::Point p_desk, bool fill_or_stroke, bool write_repr, bool scale);
-NR::Point sp_item_gradient_get_coords (SPItem *item, guint point_type, guint point_i, bool fill_or_stroke);
+void sp_item_gradient_set_coords (SPItem *item, guint point_type, guint point_i, Geom::Point p_desk, bool fill_or_stroke, bool write_repr, bool scale);
+Geom::Point sp_item_gradient_get_coords (SPItem *item, guint point_type, guint point_i, bool fill_or_stroke);
 SPGradient *sp_item_gradient_get_vector (SPItem *item, bool fill_or_stroke);
 SPGradientSpread sp_item_gradient_get_spread (SPItem *item, bool fill_or_stroke);
 
index 3f07931f8299135c0300376f2800696b380f47a4..5869633ead30e42510530d2c9626b15925366a36 100644 (file)
@@ -34,6 +34,8 @@ libgdl_libgdl_a_SOURCES =     \
        libgdl/gdl-stock.c              \
        libgdl/gdl-switcher.h           \
        libgdl/gdl-switcher.c           \
+       libgdl/gdl-win32.h              \
+       libgdl/gdl-win32.c              \
        libgdl/libgdltypebuiltins.h     \
        libgdl/libgdltypebuiltins.c     \
        libgdl/libgdlmarshal.h          \
index 68df2f67d1d4321824ea2e8e1a1d0f978dc30564..f23036ed6544516be0faa16f056088efa6b7c08b 100644 (file)
@@ -7,12 +7,10 @@
  *
  * This code is in public domain
  */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
+#ifdef WIN32
 
 #include "gdl-win32.h"
+#include <windows.h>
 
 /* Platform detection */
 gboolean
@@ -40,3 +38,5 @@ is_os_vista()
 
        return is_vista;
 }
+
+#endif
index 21361e98298115baf53cb3ccfeaa0a6dc1e05017..90c0cbafa7ae51958d577a43d52e0bd75f4426c9 100644 (file)
@@ -1,6 +1,3 @@
-#ifndef __INKSCAPE_GDL_WIN32_H__
-#define __INKSCAPE_GDL_WIN32_H__
-
 /*
  * Windows stuff
  *
@@ -9,22 +6,16 @@
  *
  * This code is in public domain
  */
+#ifndef __INKSCAPE_GDL_WIN32_H__
+#define __INKSCAPE_GDL_WIN32_H__
+#ifdef WIN32
 
-
-
-#define WIN32_MAJORVERSION_VISTA               0x0006
-
-
-
-#include <config.h>
-#include <windows.h>
 #include <gdk/gdk.h>
 
-#ifndef WIN32
-#error "This file is only usable for Windows"
-#endif
+#define WIN32_MAJORVERSION_VISTA               0x0006
 
 /* Platform detection */
 gboolean is_os_vista();
 
+#endif // ifdef WIN32
 #endif /* __INKSCAPE_GDL_WIN32_H__ */
index f2d3be60a1877615dadd91c93c77d79131c50beb..71387ac55f62d67616ae720f47bee4687e54f49c 100644 (file)
@@ -8,6 +8,8 @@
  *
  */
 
+#define PANGO_ENABLE_ENGINE
+
 #include "FontFactory.h"
 #include <libnrtype/font-instance.h>
 
index 25a6af935157b3ddd2a1242309e534852bf5374f..d7d45b1e3ddd28582eb5d5418c0aecc895684c36 100644 (file)
@@ -8,6 +8,8 @@
  *
  */
 
+#define PANGO_ENABLE_ENGINE
+
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
index dcf76b3bddc17d171339fbe8a7ffa1f62e531ef1..a5ae1cd81dcc92f17303effbac7364aabd92fa9f 100644 (file)
@@ -9,6 +9,8 @@
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#define PANGO_ENABLE_ENGINE
+
 #include <gtk/gtkversion.h>
 #include "Layout-TNG.h"
 #include "style.h"
index 229ef65f70831f614fe0398827f683040e237d30..5e1e6f64b357ce62f7ce185c6798f7aceefe6919 100644 (file)
@@ -515,19 +515,10 @@ static int set_extensions_env()
     char *oldenv = getenv("PYTHONPATH");
     Glib::ustring tmp = INKSCAPE_EXTENSIONDIR;
     if (oldenv != NULL) {
-#ifdef WIN32
-        tmp += ";";
-#else
-        tmp += ":";
-#endif
+        tmp += G_SEARCHPATH_SEPARATOR;
         tmp += oldenv;
     }
-#ifdef WIN32
-    /// \todo this does not work on windows, cannot find the setenv method or an equivalent.
-    //setenv("PYTHONPATH", tmp.c_str(), 1);
-#else
-    setenv("PYTHONPATH", tmp.c_str(), 1);
-#endif
+    g_setenv("PYTHONPATH", tmp.c_str(), TRUE);
     
     return 0;
 }
index bb63a014dbe485088b8a00bd6f63c7b13896e598..3481f6ed2cc0ac21afb3705954112d5e0ee09125 100644 (file)
@@ -2804,12 +2804,12 @@ static void sp_node_set_selected(Inkscape::NodePath::Node *node, gboolean select
     node->selected = selected;
 
     if (selected) {
-        node->knot->setSize ((node->type == Inkscape::NodePath::NODE_CUSP) ? 11 : 9);
+        node->knot->setSize ((node->type == Inkscape::NodePath::NODE_CUSP || node->type == Inkscape::NodePath::NODE_AUTO) ? 11 : 9);
         node->knot->setFill(NODE_FILL_SEL, NODE_FILL_SEL_HI, NODE_FILL_SEL_HI);
         node->knot->setStroke(NODE_STROKE_SEL, NODE_STROKE_SEL_HI, NODE_STROKE_SEL_HI);
         sp_knot_update_ctrl(node->knot);
     } else {
-        node->knot->setSize ((node->type == Inkscape::NodePath::NODE_CUSP) ? 9 : 7);
+        node->knot->setSize ((node->type == Inkscape::NodePath::NODE_CUSP || node->type == Inkscape::NodePath::NODE_AUTO) ? 9 : 7);
         node->knot->setFill(NODE_FILL, NODE_FILL_HI, NODE_FILL_HI);
         node->knot->setStroke(NODE_STROKE, NODE_STROKE_HI, NODE_STROKE_HI);
         sp_knot_update_ctrl(node->knot);
@@ -4600,12 +4600,11 @@ sp_nodepath_node_new(Inkscape::NodePath::SubPath *sp, Inkscape::NodePath::Node *
     n->knot = sp_knot_new(sp->nodepath->desktop, _("<b>Node</b>: drag to edit the path; with <b>Ctrl</b> to snap to horizontal/vertical; with <b>Ctrl+Alt</b> to snap to handles' directions"));
     sp_knot_set_position(n->knot, *pos, 0);
 
-    n->knot->setShape ((n->type == Inkscape::NodePath::NODE_CUSP)? SP_KNOT_SHAPE_DIAMOND : (n->type == Inkscape::NodePath::NODE_AUTO)? SP_KNOT_SHAPE_CIRCLE : SP_KNOT_SHAPE_SQUARE);
-    n->knot->setSize ((n->type == Inkscape::NodePath::NODE_CUSP)? 9 : 7);
     n->knot->setAnchor (GTK_ANCHOR_CENTER);
     n->knot->setFill(NODE_FILL, NODE_FILL_HI, NODE_FILL_HI);
     n->knot->setStroke(NODE_STROKE, NODE_STROKE_HI, NODE_STROKE_HI);
-    sp_knot_update_ctrl(n->knot);
+
+    sp_nodepath_update_node_knot(n);
 
     g_signal_connect(G_OBJECT(n->knot), "event", G_CALLBACK(node_event), n);
     g_signal_connect(G_OBJECT(n->knot), "clicked", G_CALLBACK(node_clicked), n);
index eb399d191b43dfc1105bf630f9c21820b3946a53..4f4d287ad1581796077f2565a34af73498b3aea2 100644 (file)
@@ -1110,7 +1110,7 @@ pen_handle_key_press(SPPenContext *const pc, GdkEvent *event)
         case GDK_BackSpace:
         case GDK_Delete:
         case GDK_KP_Delete:
-            if (pc->green_curve->is_empty()) {
+            if ( pc->green_curve->is_empty() || (pc->green_curve->last_segment() == NULL) ) {
                 if (!pc->red_curve->is_empty()) {
                     pen_cancel (pc);
                     ret = TRUE;
@@ -1132,8 +1132,7 @@ pen_handle_key_press(SPPenContext *const pc, GdkEvent *event)
                     break;
                 }
                 // The code below assumes that pc->green_curve has only ONE path !
-                Geom::Path const & path = pc->green_curve->get_pathvector().back();
-                Geom::Curve const * crv = &path.back_default();
+                Geom::Curve const * crv = pc->green_curve->last_segment();
                 pc->p[0] = crv->initialPoint();
                 if ( Geom::CubicBezier const * cubic = dynamic_cast<Geom::CubicBezier const *>(crv)) {
                     pc->p[1] = (*cubic)[1];
index 08449720d627800fb3d2c9abc4bbb0db7cf9ee48..86bf64f01c2a5e6ca975ab46225e1b2be91f50a8 100644 (file)
@@ -2220,7 +2220,7 @@ sp_selection_tile(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)) - (r->min() + Geom::Point (0, r->dimensions()[NR::Y]));
     move_p[Geom::Y] = -move_p[Geom::Y];
-    NR::Matrix move = NR::Matrix (Geom::Translate (move_p));
+    Geom::Matrix move = Geom::Matrix (Geom::Translate (move_p));
 
     GSList *items = g_slist_copy((GSList *) selection->itemList());
 
@@ -2229,7 +2229,7 @@ sp_selection_tile(SPDesktop *desktop, bool apply)
     // bottommost object, after sorting
     SPObject *parent = SP_OBJECT_PARENT (items->data);
 
-    NR::Matrix parent_transform (sp_item_i2root_affine(SP_ITEM(parent)));
+    Geom::Matrix parent_transform (sp_item_i2root_affine(SP_ITEM(parent)));
 
     // remember the position of the first item
     gint pos = SP_OBJECT_REPR (items->data)->position();
@@ -2243,7 +2243,7 @@ sp_selection_tile(SPDesktop *desktop, bool apply)
     // restore the z-order after prepends
     repr_copies = g_slist_reverse (repr_copies);
 
-    NR::Rect bounds(desktop->dt2doc(r->min()), desktop->dt2doc(r->max()));
+    Geom::Rect bounds(desktop->dt2doc(r->min()), desktop->dt2doc(r->max()));
 
     if (apply) {
         // delete objects so that their clones don't get alerted; this object will be restored shortly
@@ -2261,9 +2261,9 @@ sp_selection_tile(SPDesktop *desktop, bool apply)
     prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
 
     gchar const *pat_id = pattern_tile(repr_copies, bounds, doc,
-                                       ( NR::Matrix(Geom::Translate(desktop->dt2doc(NR::Point(r->min()[NR::X],
-                                                                                            r->max()[NR::Y]))))
-                                         * parent_transform.inverse() ),
+                                       ( Geom::Matrix(Geom::Translate(desktop->dt2doc(Geom::Point(r->min()[Geom::X],
+                                                                                            r->max()[Geom::Y]))))
+                                         * to_2geom(parent_transform.inverse()) ),
                                        parent_transform * move);
 
     // restore compensation setting
@@ -2273,13 +2273,13 @@ sp_selection_tile(SPDesktop *desktop, bool apply)
         Inkscape::XML::Node *rect = xml_doc->createElement("svg:rect");
         rect->setAttribute("style", g_strdup_printf("stroke:none;fill:url(#%s)", pat_id));
 
-        NR::Point min = bounds.min() * parent_transform.inverse();
-        NR::Point max = bounds.max() * parent_transform.inverse();
+        Geom::Point min = bounds.min() * to_2geom(parent_transform.inverse());
+        Geom::Point max = bounds.max() * to_2geom(parent_transform.inverse());
 
-        sp_repr_set_svg_double(rect, "width", max[NR::X] - min[NR::X]);
-        sp_repr_set_svg_double(rect, "height", max[NR::Y] - min[NR::Y]);
-        sp_repr_set_svg_double(rect, "x", min[NR::X]);
-        sp_repr_set_svg_double(rect, "y", min[NR::Y]);
+        sp_repr_set_svg_double(rect, "width", max[Geom::X] - min[Geom::X]);
+        sp_repr_set_svg_double(rect, "height", max[Geom::Y] - min[Geom::Y]);
+        sp_repr_set_svg_double(rect, "x", min[Geom::X]);
+        sp_repr_set_svg_double(rect, "y", min[Geom::Y]);
 
         // restore parent and position
         SP_OBJECT_REPR (parent)->appendChild(rect);
index 0b1c4f5c97bafafccbc7437dcf4ffa8dfc392317..614ce7584f7d4c0de05bd3ec9e5f151f36afe512 100644 (file)
@@ -932,8 +932,8 @@ gboolean Inkscape::SelTrans::scaleRequest(Geom::Point &pt, guint state)
             }
 
             // Snap along a suitable constraint vector from the origin.
-            bb = m.constrainedSnapScale(SnapPreferences::SNAPPOINT_BBOX, _bbox_points, default_scale, _origin_for_bboxpoints);
-            sn = m.constrainedSnapScale(SnapPreferences::SNAPPOINT_NODE, _snap_points, geom_scale, _origin_for_specpoints);
+            bb = m.constrainedSnapScale(SnapPreferences::SNAPPOINT_BBOX, _bbox_points, _point, default_scale, _origin_for_bboxpoints);
+            sn = m.constrainedSnapScale(SnapPreferences::SNAPPOINT_NODE, _snap_points, _point, geom_scale, _origin_for_specpoints);
 
             /* Choose the smaller difference in scale.  Since s[X] == s[Y] we can
             ** just compare difference in s[X].
@@ -942,8 +942,8 @@ gboolean Inkscape::SelTrans::scaleRequest(Geom::Point &pt, guint state)
             sd = sn.getSnapped() ? fabs(sn.getTransformation()[Geom::X] - geom_scale[Geom::X]) : NR_HUGE;
         } else {
             /* Scale aspect ratio is unlocked */
-            bb = m.freeSnapScale(SnapPreferences::SNAPPOINT_BBOX, _bbox_points, default_scale, _origin_for_bboxpoints);
-            sn = m.freeSnapScale(SnapPreferences::SNAPPOINT_NODE, _snap_points, geom_scale, _origin_for_specpoints);
+            bb = m.freeSnapScale(SnapPreferences::SNAPPOINT_BBOX, _bbox_points, _point, default_scale, _origin_for_bboxpoints);
+            sn = m.freeSnapScale(SnapPreferences::SNAPPOINT_NODE, _snap_points, _point, geom_scale, _origin_for_specpoints);
 
             /* Pick the snap that puts us closest to the original scale */
             bd = bb.getSnapped() ? fabs(Geom::L2(bb.getTransformation()) - Geom::L2(Geom::Point(default_scale[Geom::X], default_scale[Geom::Y]))) : NR_HUGE;
@@ -1031,8 +1031,8 @@ gboolean Inkscape::SelTrans::stretchRequest(SPSelTransHandle const &handle, Geom
 
         bool symmetrical = state & GDK_CONTROL_MASK;
 
-        bb = m.constrainedSnapStretch(SnapPreferences::SNAPPOINT_BBOX, _bbox_points, Geom::Coord(default_scale[axis]), _origin_for_bboxpoints, Geom::Dim2(axis), symmetrical);
-        sn = m.constrainedSnapStretch(SnapPreferences::SNAPPOINT_NODE, _snap_points, Geom::Coord(geom_scale[axis]), _origin_for_specpoints, Geom::Dim2(axis), symmetrical);
+        bb = m.constrainedSnapStretch(SnapPreferences::SNAPPOINT_BBOX, _bbox_points, _point, Geom::Coord(default_scale[axis]), _origin_for_bboxpoints, Geom::Dim2(axis), symmetrical);
+        sn = m.constrainedSnapStretch(SnapPreferences::SNAPPOINT_NODE, _snap_points, _point, Geom::Coord(geom_scale[axis]), _origin_for_specpoints, Geom::Dim2(axis), symmetrical);
 
         if (bb.getSnapped()) {
             // We snapped the bbox (which is either visual or geometric)
@@ -1149,7 +1149,7 @@ gboolean Inkscape::SelTrans::skewRequest(SPSelTransHandle const &handle, Geom::P
         Inkscape::Snapper::ConstraintLine const constraint(component_vectors[dim_b]);
         // When skewing, we cannot snap the corners of the bounding box, see the comment in "constrainedSnapSkew" for details
         Geom::Point const s(skew[dim_a], scale[dim_a]);
-        Inkscape::SnappedPoint sn = m.constrainedSnapSkew(Inkscape::SnapPreferences::SNAPPOINT_NODE, _snap_points, constraint, s, _origin, Geom::Dim2(dim_b));
+        Inkscape::SnappedPoint sn = m.constrainedSnapSkew(Inkscape::SnapPreferences::SNAPPOINT_NODE, _snap_points, _point, constraint, s, _origin, Geom::Dim2(dim_b));
 
         if (sn.getSnapped()) {
             // We snapped something, so change the skew to reflect it
@@ -1384,11 +1384,13 @@ void Inkscape::SelTrans::moveTo(Geom::Point const &xy, guint state)
                 // individually for each point to be snapped; this will be handled however by _snapTransformed()
                 s.push_back(m.constrainedSnapTranslation(Inkscape::SnapPreferences::SNAPPOINT_BBOX,
                                                          _bbox_points,
+                                                         _point, 
                                                          Inkscape::Snapper::ConstraintLine(component_vectors[dim]),
                                                          dxy));
 
                 s.push_back(m.constrainedSnapTranslation(Inkscape::SnapPreferences::SNAPPOINT_NODE,
                                                          _snap_points,
+                                                         _point, 
                                                          Inkscape::Snapper::ConstraintLine(component_vectors[dim]),
                                                          dxy));
             }
@@ -1401,8 +1403,8 @@ void Inkscape::SelTrans::moveTo(Geom::Point const &xy, guint state)
                g_get_current_time(&starttime); */
 
             /* Snap to things with no constraint */
-                       s.push_back(m.freeSnapTranslation(Inkscape::SnapPreferences::SNAPPOINT_BBOX, _bbox_points, dxy));
-               s.push_back(m.freeSnapTranslation(Inkscape::SnapPreferences::SNAPPOINT_NODE, _snap_points, dxy));
+                       s.push_back(m.freeSnapTranslation(Inkscape::SnapPreferences::SNAPPOINT_BBOX, _bbox_points, _point, dxy));
+               s.push_back(m.freeSnapTranslation(Inkscape::SnapPreferences::SNAPPOINT_NODE, _snap_points, _point, dxy));
 
                /*g_get_current_time(&endtime);
                double elapsed = ((((double)endtime.tv_sec - starttime.tv_sec) * G_USEC_PER_SEC + (endtime.tv_usec - starttime.tv_usec))) / 1000.0;
index f1ad0fd0df51c34da4efbe5115d3efec4f8d9bad..0bfd94c71f2e93384f744b824828cf2a14148bd6 100644 (file)
@@ -22,7 +22,8 @@ Inkscape::SnapPreferences::PointType const Inkscape::SnapPreferences::SNAPPOINT_
 
 Inkscape::SnapPreferences::SnapPreferences() :
        _include_item_center(false),
-    _snap_enabled_globally(true)
+    _snap_enabled_globally(true),
+    _snap_postponed_globally(false)
 {
        setSnapFrom(SNAPPOINT_BBOX | SNAPPOINT_NODE, true); //Snap any point. In v0.45 and earlier, this was controlled in the preferences tab
 }
index 6fa99f288aed7c8effad600a96d58742733fdc76..e0c83ad36363c56780b61cf25014104063baac06 100644 (file)
@@ -313,7 +313,8 @@ void SnapManager::guideSnap(Geom::Point &p, Geom::Point const &guide_normal) con
  *  of duplicated code.
  *
  *  \param type Type of points being snapped.
- *  \param points List of points to snap.
+ *  \param points List of points to snap (i.e. untransformed).
+ *  \param pointer Location of the mouse pointer, at the time when dragging started (i.e. "untransformed")
  *  \param constrained true if the snap is constrained.
  *  \param constraint Constraint line to use, if `constrained' is true, otherwise undefined.
  *  \param transformation_type Type of transformation to apply to points before trying to snap them.
@@ -326,6 +327,7 @@ void SnapManager::guideSnap(Geom::Point &p, Geom::Point const &guide_normal) con
 Inkscape::SnappedPoint SnapManager::_snapTransformed(
     Inkscape::SnapPreferences::PointType type,
     std::vector<Geom::Point> const &points,
+    Geom::Point const &pointer,
     bool constrained,
     Inkscape::Snapper::ConstraintLine const &constraint,
     Transformation transformation_type,
@@ -446,6 +448,7 @@ Inkscape::SnappedPoint SnapManager::_snapTransformed(
             } else {
                snapped_point = freeSnap(type, *j, i == points.begin(), bbox);
             }
+               snapped_point.setPointerDistance(Geom::L2(pointer - *i));
         }
 
         Geom::Point result;
@@ -592,9 +595,10 @@ Inkscape::SnappedPoint SnapManager::_snapTransformed(
 
 Inkscape::SnappedPoint SnapManager::freeSnapTranslation(Inkscape::SnapPreferences::PointType point_type,
                                                         std::vector<Geom::Point> const &p,
+                                                        Geom::Point const &pointer,
                                                         Geom::Point const &tr) const
 {
-    return _snapTransformed(point_type, p, false, Geom::Point(), TRANSLATION, tr, Geom::Point(), Geom::X, false);
+    return _snapTransformed(point_type, p, pointer, false, Geom::Point(), TRANSLATION, tr, Geom::Point(), Geom::X, false);
 }
 
 
@@ -612,10 +616,11 @@ Inkscape::SnappedPoint SnapManager::freeSnapTranslation(Inkscape::SnapPreference
 
 Inkscape::SnappedPoint SnapManager::constrainedSnapTranslation(Inkscape::SnapPreferences::PointType point_type,
                                                                std::vector<Geom::Point> const &p,
+                                                               Geom::Point const &pointer,
                                                                Inkscape::Snapper::ConstraintLine const &constraint,
                                                                Geom::Point const &tr) const
 {
-    return _snapTransformed(point_type, p, true, constraint, TRANSLATION, tr, Geom::Point(), Geom::X, false);
+    return _snapTransformed(point_type, p, pointer, true, constraint, TRANSLATION, tr, Geom::Point(), Geom::X, false);
 }
 
 
@@ -632,10 +637,11 @@ Inkscape::SnappedPoint SnapManager::constrainedSnapTranslation(Inkscape::SnapPre
 
 Inkscape::SnappedPoint SnapManager::freeSnapScale(Inkscape::SnapPreferences::PointType point_type,
                                                   std::vector<Geom::Point> const &p,
+                                                  Geom::Point const &pointer,
                                                   Geom::Scale const &s,
                                                   Geom::Point const &o) const
 {
-    return _snapTransformed(point_type, p, false, Geom::Point(), SCALE, Geom::Point(s[Geom::X], s[Geom::Y]), o, Geom::X, false);
+    return _snapTransformed(point_type, p, pointer, false, Geom::Point(), SCALE, Geom::Point(s[Geom::X], s[Geom::Y]), o, Geom::X, false);
 }
 
 
@@ -653,11 +659,12 @@ Inkscape::SnappedPoint SnapManager::freeSnapScale(Inkscape::SnapPreferences::Poi
 
 Inkscape::SnappedPoint SnapManager::constrainedSnapScale(Inkscape::SnapPreferences::PointType point_type,
                                                          std::vector<Geom::Point> const &p,
+                                                         Geom::Point const &pointer,
                                                          Geom::Scale const &s,
                                                          Geom::Point const &o) const
 {
     // When constrained scaling, only uniform scaling is supported.
-    return _snapTransformed(point_type, p, true, Geom::Point(), SCALE, Geom::Point(s[Geom::X], s[Geom::Y]), o, Geom::X, true);
+    return _snapTransformed(point_type, p, pointer, true, Geom::Point(), SCALE, Geom::Point(s[Geom::X], s[Geom::Y]), o, Geom::X, true);
 }
 
 
@@ -676,12 +683,13 @@ Inkscape::SnappedPoint SnapManager::constrainedSnapScale(Inkscape::SnapPreferenc
 
 Inkscape::SnappedPoint SnapManager::constrainedSnapStretch(Inkscape::SnapPreferences::PointType point_type,
                                                             std::vector<Geom::Point> const &p,
+                                                            Geom::Point const &pointer,
                                                             Geom::Coord const &s,
                                                             Geom::Point const &o,
                                                             Geom::Dim2 d,
                                                             bool u) const
 {
-   return _snapTransformed(point_type, p, true, Geom::Point(), STRETCH, Geom::Point(s, s), o, d, u);
+   return _snapTransformed(point_type, p, pointer, true, Geom::Point(), STRETCH, Geom::Point(s, s), o, d, u);
 }
 
 
@@ -699,6 +707,7 @@ Inkscape::SnappedPoint SnapManager::constrainedSnapStretch(Inkscape::SnapPrefere
 
 Inkscape::SnappedPoint SnapManager::constrainedSnapSkew(Inkscape::SnapPreferences::PointType point_type,
                                                  std::vector<Geom::Point> const &p,
+                                                 Geom::Point const &pointer,
                                                  Inkscape::Snapper::ConstraintLine const &constraint,
                                                  Geom::Point const &s,  
                                                  Geom::Point const &o,
@@ -712,7 +721,7 @@ Inkscape::SnappedPoint SnapManager::constrainedSnapSkew(Inkscape::SnapPreference
        // so it's corners have a different transformation. The snappers cannot handle this, therefore snapping
        // of bounding boxes is not allowed here.
        g_assert(!(point_type & Inkscape::SnapPreferences::SNAPPOINT_BBOX));
-       return _snapTransformed(point_type, p, true, constraint, SKEW, s, o, d, false);
+       return _snapTransformed(point_type, p, pointer, true, constraint, SKEW, s, o, d, false);
 }
 
 Inkscape::SnappedPoint SnapManager::findBestSnap(Geom::Point const &p, SnappedConstraints &sc, bool constrained) const
index 624f7adac7cc43774d6365d189831806344c577e..15b4bd0950fd71858e065bab60141b1f31eefe4a 100644 (file)
@@ -83,25 +83,30 @@ public:
 
     Inkscape::SnappedPoint freeSnapTranslation(Inkscape::SnapPreferences::PointType point_type,
                                                std::vector<Geom::Point> const &p,
+                                               Geom::Point const &pointer,
                                                Geom::Point const &tr) const;
 
     Inkscape::SnappedPoint constrainedSnapTranslation(Inkscape::SnapPreferences::PointType point_type,
                                                       std::vector<Geom::Point> const &p,
+                                                      Geom::Point const &pointer,
                                                       Inkscape::Snapper::ConstraintLine const &constraint,
                                                       Geom::Point const &tr) const;
 
     Inkscape::SnappedPoint freeSnapScale(Inkscape::SnapPreferences::PointType point_type,
                                          std::vector<Geom::Point> const &p,
+                                         Geom::Point const &pointer,
                                          Geom::Scale const &s,
                                          Geom::Point const &o) const;
 
     Inkscape::SnappedPoint constrainedSnapScale(Inkscape::SnapPreferences::PointType point_type,
                                                 std::vector<Geom::Point> const &p,
+                                                Geom::Point const &pointer,
                                                 Geom::Scale const &s,
                                                 Geom::Point const &o) const;
 
     Inkscape::SnappedPoint constrainedSnapStretch(Inkscape::SnapPreferences::PointType point_type,
                                                   std::vector<Geom::Point> const &p,
+                                                  Geom::Point const &pointer,
                                                   Geom::Coord const &s,
                                                   Geom::Point const &o,
                                                   Geom::Dim2 d,
@@ -109,6 +114,7 @@ public:
 
     Inkscape::SnappedPoint constrainedSnapSkew(Inkscape::SnapPreferences::PointType point_type,
                                                std::vector<Geom::Point> const &p,
+                                               Geom::Point const &pointer,
                                                Inkscape::Snapper::ConstraintLine const &constraint,
                                                Geom::Point const &s, // s[0] = skew factor, s[1] = scale factor
                                                Geom::Point const &o,
@@ -144,6 +150,7 @@ private:
     
     Inkscape::SnappedPoint _snapTransformed(Inkscape::SnapPreferences::PointType type,
                                             std::vector<Geom::Point> const &points,
+                                            Geom::Point const &pointer,
                                             bool constrained,
                                             Inkscape::Snapper::ConstraintLine const &constraint,
                                             Transformation transformation_type,
index 4176d4a3d40bade1cce8e966deb78259f0c62c47..1177e5f141c8720812b21dd2b539021b13b3c203 100644 (file)
@@ -21,6 +21,7 @@ Inkscape::SnappedPoint::SnappedPoint(Geom::Point const &p, SnapTargetType const
     _second_tolerance = 0;
     _second_always_snap = false;
     _transformation = Geom::Point(1,1);
+    _pointer_distance = 0;
 }
 
 Inkscape::SnappedPoint::SnappedPoint(Geom::Point const &p, SnapTargetType const &target, Geom::Coord const &d, Geom::Coord const &t, bool const &a, bool const &at_intersection, bool const &fully_constrained, Geom::Coord const &d2, Geom::Coord const &t2, bool const &a2)
@@ -28,6 +29,7 @@ Inkscape::SnappedPoint::SnappedPoint(Geom::Point const &p, SnapTargetType const
     _second_distance(d2), _second_tolerance(t2), _second_always_snap(a2)
 {
     _transformation = Geom::Point(1,1);
+    _pointer_distance = 0;
 }
 
 Inkscape::SnappedPoint::SnappedPoint()
@@ -42,45 +44,13 @@ Inkscape::SnappedPoint::SnappedPoint()
     _second_tolerance = 0;
     _second_always_snap = false;
     _transformation = Geom::Point(1,1);
+    _pointer_distance = 0;
 }
 
-
-
 Inkscape::SnappedPoint::~SnappedPoint()
 {
 }
 
-Geom::Coord Inkscape::SnappedPoint::getDistance() const
-{
-    return _distance;
-}
-
-Geom::Coord Inkscape::SnappedPoint::getTolerance() const
-{
-    return _tolerance;
-}
-
-bool Inkscape::SnappedPoint::getAlwaysSnap() const
-{
-    return _always_snap;
-}
-
-Geom::Coord Inkscape::SnappedPoint::getSecondDistance() const
-{
-    return _second_distance;
-}
-
-Geom::Coord Inkscape::SnappedPoint::getSecondTolerance() const
-{
-    return _second_tolerance;
-}
-
-bool Inkscape::SnappedPoint::getSecondAlwaysSnap() const
-{
-    return _second_always_snap;
-}
-
-
 void Inkscape::SnappedPoint::getPoint(Geom::Point &p) const
 {
     // When we have snapped
@@ -107,23 +77,26 @@ bool getClosestSP(std::list<Inkscape::SnappedPoint> &list, Inkscape::SnappedPoin
 
 bool Inkscape::SnappedPoint::isOtherOneBetter(Inkscape::SnappedPoint const &other_one) const
 {
-    // If it's closer
-    bool c2 = other_one.getDistance() < getDistance();
+    double const w = 0.25; // weigth factor: controls which node should be preferrerd for snapping, which is either
+    // the node with the closest snap (w = 0), or the node closest to the mousepointer (w = 1)
+    
+       // If it's closer
+    bool c1 = (w * other_one.getPointerDistance() + (1-w) * other_one.getDistance()) < (w * getPointerDistance() + (1-w) * getDistance());
     // or, if it's for a snapper with "always snap" turned on, and the previous wasn't
-    bool c3 = other_one.getAlwaysSnap() && !getAlwaysSnap();
+    bool c2 = other_one.getAlwaysSnap() && !getAlwaysSnap();
     // But in no case fall back from a snapper with "always snap" on to one with "always snap" off
-    bool c3n = !other_one.getAlwaysSnap() && getAlwaysSnap();
+    bool c2n = !other_one.getAlwaysSnap() && getAlwaysSnap();
     // or, if we have a fully constrained snappoint (e.g. to a node), while the previous one was only partly constrained (e.g. to a line)
-    bool c4 = other_one.getFullyConstrained() && !getFullyConstrained();
+    bool c3 = other_one.getFullyConstrained() && !getFullyConstrained();
     // But in no case fall back; (has less priority than c3n, so it is allowed to fall back when c3 is true, see below)       
-    bool c4n = !other_one.getFullyConstrained() && getFullyConstrained(); 
+    bool c3n = !other_one.getFullyConstrained() && getFullyConstrained(); 
     // or, if it's just as close then consider the second distance
     // (which is only relevant for points at an intersection)
-    bool c5a = (other_one.getDistance() == getDistance()); 
-    bool c5b = other_one.getSecondDistance() < getSecondDistance();
+    bool c4a = (other_one.getDistance() == getDistance()); 
+    bool c4b = other_one.getSecondDistance() < getSecondDistance();
     
-    // std::cout << "c2 = " << c2 << " | c3 = " << c3 << " | c3n = " << c3n << " | c4 = " << c4 << " | c4n = " << c4n << " | c5a = " << c5a << " | c5b = " << c5b;
-    return (c2 || c3 || c4 || (c5a && c5b)) && !c3n && (!c4n || c3);       
+    // std::cout << "c1 = " << c1 << " | c2 = " << c2 << " | c2n = " << c2n << " | c3 = " << c3 << " | c3n = " << c3n << " | c4a = " << c4a << " | c4b = " << c4b;
+    return (c1 || c2 || c3 || (c4a && c4b)) && !c2n && (!c3n || c2);       
 }
 
 /*
index 575fd0e1cd3d6a650cba0974ab6bfabe92e3fc96..254e464217bdfe5d8612978e98c454659b3c7506 100644 (file)
@@ -46,14 +46,16 @@ public:
     SnappedPoint(Geom::Point const &p, SnapTargetType const &target, Geom::Coord const &d, Geom::Coord const &t, bool const &a, bool const &fully_constrained);
     ~SnappedPoint();
 
-    Geom::Coord getDistance() const;
+    Geom::Coord getDistance() const {return _distance;}
     void setDistance(Geom::Coord const d) {_distance = d;}
-    Geom::Coord getTolerance() const;
-    bool getAlwaysSnap() const;
-    Geom::Coord getSecondDistance() const;
+    Geom::Coord getTolerance() const {return _tolerance;}
+    bool getAlwaysSnap() const {return _always_snap;}
+    Geom::Coord getSecondDistance() const {return _second_distance;}
     void setSecondDistance(Geom::Coord const d) {_second_distance = d;}
-    Geom::Coord getSecondTolerance() const;
-    bool getSecondAlwaysSnap() const;
+    Geom::Coord getSecondTolerance() const {return _second_tolerance;}
+    bool getSecondAlwaysSnap() const {return _second_always_snap;}
+    Geom::Coord getPointerDistance() const {return _pointer_distance;}
+    void setPointerDistance(Geom::Coord const d) {_pointer_distance = d;}
     
     /* This is the preferred method to find out which point we have snapped
      * to, because it only returns a point if snapping has actually occured
@@ -104,6 +106,8 @@ protected:
     bool _second_always_snap;
     /* The transformation (translation, scale, skew, or stretch) from the original point to the snapped point */
     Geom::Point _transformation;
+    /* Distance from the un-transformed point to the mouse pointer, measured at the point in time when dragging started */
+    Geom::Coord _pointer_distance;
 };    
 
 }
index b41ac5b9b57f8bea3cba1afe5120a714009194cf..bc188401bec90b927341ce6dd155c1ed8632a1ff 100644 (file)
@@ -9,6 +9,7 @@
 #include "svg/svg.h"
 #include "xml/repr.h"
 #include <2geom/transforms.h>
+#include "helper/geom.h"
 
 class SPGradientTest : public DocumentUsingTest
 {
@@ -32,8 +33,8 @@ public:
     {
         SPGradient *gr = static_cast<SPGradient *>(g_object_new(SP_TYPE_GRADIENT, NULL));
         if ( gr ) {
-            UTEST_ASSERT(gr->gradientTransform.test_identity());
-            UTEST_ASSERT(gr->gradientTransform == NR::identity());
+            UTEST_ASSERT(gr->gradientTransform.isIdentity());
+            UTEST_ASSERT(gr->gradientTransform == Geom::identity());
             g_object_unref(gr);
 
             dst = new SPGradientTest();
@@ -56,13 +57,13 @@ public:
         SP_OBJECT(gr)->document = _doc;
 
         sp_object_set(SP_OBJECT(gr), SP_ATTR_GRADIENTTRANSFORM, "translate(5, 8)");
-        TS_ASSERT_EQUALS( gr->gradientTransform, NR::Matrix(Geom::Translate(5, 8)) );
+        TS_ASSERT_EQUALS( gr->gradientTransform, Geom::Matrix(Geom::Translate(5, 8)) );
 
         sp_object_set(SP_OBJECT(gr), SP_ATTR_GRADIENTTRANSFORM, "");
-        TS_ASSERT_EQUALS( gr->gradientTransform, NR::identity() );
+        TS_ASSERT_EQUALS( gr->gradientTransform, Geom::identity() );
 
         sp_object_set(SP_OBJECT(gr), SP_ATTR_GRADIENTTRANSFORM, "rotate(90)");
-        TS_ASSERT_EQUALS( gr->gradientTransform, NR::Matrix(rotate_degrees(90)) );
+        TS_ASSERT_EQUALS( gr->gradientTransform, Geom::Matrix(rotate_degrees(90)) );
 
         g_object_unref(gr);
     }
@@ -79,10 +80,10 @@ public:
         SP_OBJECT(gr)->updateRepr(repr, SP_OBJECT_WRITE_ALL);
         {
             gchar const *tr = repr->attribute("gradientTransform");
-            NR::Matrix svd;
+            Geom::Matrix svd;
             bool const valid = sp_svg_transform_read(tr, &svd);
             TS_ASSERT( valid );
-            TS_ASSERT_EQUALS( svd, NR::Matrix(rotate_degrees(90)) );
+            TS_ASSERT_EQUALS( svd, Geom::Matrix(rotate_degrees(90)) );
         }
 
         g_object_unref(gr);
@@ -93,53 +94,53 @@ public:
     {
         SPGradient *gr = static_cast<SPGradient *>(g_object_new(SP_TYPE_GRADIENT, NULL));
         SP_OBJECT(gr)->document = _doc;
-        NR::Matrix const grXform(2, 1,
+        Geom::Matrix const grXform(2, 1,
                                  1, 3,
                                  4, 6);
         gr->gradientTransform = grXform;
-        NR::Rect const unit_rect(NR::Point(0, 0), NR::Point(1, 1));
+        Geom::Rect const unit_rect(Geom::Point(0, 0), Geom::Point(1, 1));
         {
-            NR::Matrix const g2d(sp_gradient_get_g2d_matrix(gr, NR::identity(), unit_rect));
-            NR::Matrix const gs2d(sp_gradient_get_gs2d_matrix(gr, NR::identity(), unit_rect));
-            TS_ASSERT_EQUALS( g2d, NR::identity() );
-            TS_ASSERT( NR::matrix_equalp(gs2d, gr->gradientTransform * g2d, 1e-12) );
+            Geom::Matrix const g2d(sp_gradient_get_g2d_matrix(gr, Geom::identity(), unit_rect));
+            Geom::Matrix const gs2d(sp_gradient_get_gs2d_matrix(gr, Geom::identity(), unit_rect));
+            TS_ASSERT_EQUALS( g2d, Geom::identity() );
+            TS_ASSERT( Geom::matrix_equalp(gs2d, gr->gradientTransform * g2d, 1e-12) );
 
-            sp_gradient_set_gs2d_matrix(gr, NR::identity(), unit_rect, gs2d);
-            TS_ASSERT( NR::matrix_equalp(gr->gradientTransform, grXform, 1e-12) );
+            sp_gradient_set_gs2d_matrix(gr, Geom::identity(), unit_rect, gs2d);
+            TS_ASSERT( Geom::matrix_equalp(gr->gradientTransform, grXform, 1e-12) );
         }
 
         gr->gradientTransform = grXform;
-        NR::Matrix const funny(2, 3,
+        Geom::Matrix const funny(2, 3,
                                4, 5,
                                6, 7);
         {
-            NR::Matrix const g2d(sp_gradient_get_g2d_matrix(gr, funny, unit_rect));
-            NR::Matrix const gs2d(sp_gradient_get_gs2d_matrix(gr, funny, unit_rect));
+            Geom::Matrix const g2d(sp_gradient_get_g2d_matrix(gr, funny, unit_rect));
+            Geom::Matrix const gs2d(sp_gradient_get_gs2d_matrix(gr, funny, unit_rect));
             TS_ASSERT_EQUALS( g2d, funny );
-            TS_ASSERT( NR::matrix_equalp(gs2d, gr->gradientTransform * g2d, 1e-12) );
+            TS_ASSERT( Geom::matrix_equalp(gs2d, gr->gradientTransform * g2d, 1e-12) );
 
             sp_gradient_set_gs2d_matrix(gr, funny, unit_rect, gs2d);
-            TS_ASSERT( NR::matrix_equalp(gr->gradientTransform, grXform, 1e-12) );
+            TS_ASSERT( Geom::matrix_equalp(gr->gradientTransform, grXform, 1e-12) );
         }
 
         gr->gradientTransform = grXform;
-        NR::Rect const larger_rect(NR::Point(5, 6), NR::Point(8, 10));
+        Geom::Rect const larger_rect(Geom::Point(5, 6), Geom::Point(8, 10));
         {
-            NR::Matrix const g2d(sp_gradient_get_g2d_matrix(gr, funny, larger_rect));
-            NR::Matrix const gs2d(sp_gradient_get_gs2d_matrix(gr, funny, larger_rect));
-            TS_ASSERT_EQUALS( g2d, NR::Matrix(3, 0,
+            Geom::Matrix const g2d(sp_gradient_get_g2d_matrix(gr, funny, larger_rect));
+            Geom::Matrix const gs2d(sp_gradient_get_gs2d_matrix(gr, funny, larger_rect));
+            TS_ASSERT_EQUALS( g2d, Geom::Matrix(3, 0,
                                               0, 4,
                                               5, 6) * funny );
-            TS_ASSERT( NR::matrix_equalp(gs2d, gr->gradientTransform * g2d, 1e-12) );
+            TS_ASSERT( Geom::matrix_equalp(gs2d, gr->gradientTransform * g2d, 1e-12) );
 
             sp_gradient_set_gs2d_matrix(gr, funny, larger_rect, gs2d);
-            TS_ASSERT( NR::matrix_equalp(gr->gradientTransform, grXform, 1e-12) );
+            TS_ASSERT( Geom::matrix_equalp(gr->gradientTransform, grXform, 1e-12) );
 
             sp_object_set(SP_OBJECT(gr), SP_ATTR_GRADIENTUNITS, "userSpaceOnUse");
-            NR::Matrix const user_g2d(sp_gradient_get_g2d_matrix(gr, funny, larger_rect));
-            NR::Matrix const user_gs2d(sp_gradient_get_gs2d_matrix(gr, funny, larger_rect));
+            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 );
-            TS_ASSERT( NR::matrix_equalp(user_gs2d, gr->gradientTransform * user_g2d, 1e-12) );
+            TS_ASSERT( Geom::matrix_equalp(user_gs2d, gr->gradientTransform * user_g2d, 1e-12) );
         }
         g_object_unref(gr);
     }
index 3383de8c8aaf201307d111686d1ea5eefca93bbe..5c973cf0df4ad04c76bf0cfc7111862ce2f5625f 100644 (file)
@@ -375,7 +375,7 @@ sp_gradient_init(SPGradient *gr)
     gr->units = SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX;
     gr->units_set = FALSE;
 
-    gr->gradientTransform = NR::identity();
+    gr->gradientTransform = Geom::identity();
     gr->gradientTransform_set = FALSE;
 
     gr->spread = SP_GRADIENT_SPREAD_PAD;
@@ -478,12 +478,12 @@ sp_gradient_set(SPObject *object, unsigned key, gchar const *value)
             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
             break;
         case SP_ATTR_GRADIENTTRANSFORM: {
-            NR::Matrix t;
+            Geom::Matrix t;
             if (value && sp_svg_transform_read(value, &t)) {
                 gr->gradientTransform = t;
                 gr->gradientTransform_set = TRUE;
             } else {
-                gr->gradientTransform = NR::identity();
+                gr->gradientTransform = Geom::identity();
                 gr->gradientTransform_set = FALSE;
             }
             object->requestModified(SP_OBJECT_MODIFIED_FLAG);
@@ -1248,8 +1248,8 @@ sp_gradient_render_vector_block_rgb(SPGradient *gradient, guchar *buf,
     }
 }
 
-NR::Matrix
-sp_gradient_get_g2d_matrix(SPGradient const *gr, NR::Matrix const &ctm, NR::Rect const &bbox)
+Geom::Matrix
+sp_gradient_get_g2d_matrix(SPGradient const *gr, Geom::Matrix const &ctm, Geom::Rect const &bbox)
 {
     if (gr->units == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) {
         return ( Geom::Scale(bbox.dimensions())
@@ -1260,8 +1260,8 @@ sp_gradient_get_g2d_matrix(SPGradient const *gr, NR::Matrix const &ctm, NR::Rect
     }
 }
 
-NR::Matrix
-sp_gradient_get_gs2d_matrix(SPGradient const *gr, NR::Matrix const &ctm, NR::Rect const &bbox)
+Geom::Matrix
+sp_gradient_get_gs2d_matrix(SPGradient const *gr, Geom::Matrix const &ctm, Geom::Rect const &bbox)
 {
     if (gr->units == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) {
         return ( gr->gradientTransform
@@ -1274,8 +1274,8 @@ sp_gradient_get_gs2d_matrix(SPGradient const *gr, NR::Matrix const &ctm, NR::Rec
 }
 
 void
-sp_gradient_set_gs2d_matrix(SPGradient *gr, NR::Matrix const &ctm,
-                            NR::Rect const &bbox, NR::Matrix const &gs2d)
+sp_gradient_set_gs2d_matrix(SPGradient *gr, Geom::Matrix const &ctm,
+                            Geom::Rect const &bbox, Geom::Matrix const &gs2d)
 {
     gr->gradientTransform = gs2d * ctm.inverse();
     if (gr->units == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX ) {
@@ -1313,8 +1313,8 @@ static Inkscape::XML::Node *sp_lineargradient_write(SPObject *object, Inkscape::
                                                     guint flags);
 
 static SPPainter *sp_lineargradient_painter_new(SPPaintServer *ps,
-                                                NR::Matrix const &full_transform,
-                                                NR::Matrix const &parent_transform,
+                                                Geom::Matrix const &full_transform,
+                                                Geom::Matrix const &parent_transform,
                                                 NRRect const *bbox);
 static void sp_lineargradient_painter_free(SPPaintServer *ps, SPPainter *painter);
 
@@ -1467,8 +1467,8 @@ sp_lineargradient_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inks
  */
 static SPPainter *
 sp_lineargradient_painter_new(SPPaintServer *ps,
-                              NR::Matrix const &full_transform,
-                              NR::Matrix const &/*parent_transform*/,
+                              Geom::Matrix const &full_transform,
+                              Geom::Matrix const &/*parent_transform*/,
                               NRRect const *bbox)
 {
     SPLinearGradient *lg = SP_LINEARGRADIENT(ps);
@@ -1490,31 +1490,32 @@ sp_lineargradient_painter_new(SPPaintServer *ps,
      * or something similar. Originally I had 1023.9999 here - not sure
      * whether we have really to cut out ceil int (Lauris).
      */
-    NR::Matrix color2norm(NR::identity());
-    NR::Matrix color2px;
+    Geom::Matrix color2norm(Geom::identity());
+    Geom::Matrix color2px;
     if (gr->units == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) {
-        NR::Matrix norm2pos(NR::identity());
+        Geom::Matrix norm2pos(Geom::identity());
 
         /* BBox to user coordinate system */
-        NR::Matrix bbox2user(bbox->x1 - bbox->x0, 0, 0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0);
+        Geom::Matrix bbox2user(bbox->x1 - bbox->x0, 0, 0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0);
 
-        NR::Matrix color2pos = color2norm * norm2pos;
-        NR::Matrix color2tpos = color2pos * gr->gradientTransform;
-        NR::Matrix color2user = color2tpos * bbox2user;
+        Geom::Matrix color2pos = color2norm * norm2pos;
+        Geom::Matrix color2tpos = color2pos * gr->gradientTransform;
+        Geom::Matrix color2user = color2tpos * bbox2user;
         color2px = color2user * full_transform;
 
     } else {
         /* Problem: What to do, if we have mixed lengths and percentages? */
         /* Currently we do ignore percentages at all, but that is not good (lauris) */
 
-        NR::Matrix norm2pos(NR::identity());
-        NR::Matrix color2pos = color2norm * norm2pos;
-        NR::Matrix color2tpos = color2pos * gr->gradientTransform;
+        Geom::Matrix norm2pos(Geom::identity());
+        Geom::Matrix color2pos = color2norm * norm2pos;
+        Geom::Matrix color2tpos = color2pos * gr->gradientTransform;
         color2px = color2tpos * full_transform;
 
     }
-
-    nr_lgradient_renderer_setup(&lgp->lgr, gr->color, sp_gradient_get_spread(gr), &color2px,
+    // TODO: remove color2px_nr after converting to 2geom
+    NR::Matrix color2px_nr = from_2geom(color2px);
+    nr_lgradient_renderer_setup(&lgp->lgr, gr->color, sp_gradient_get_spread(gr), &color2px_nr,
                                 lg->x1.computed, lg->y1.computed,
                                 lg->x2.computed, lg->y2.computed);
 
@@ -1587,8 +1588,8 @@ static Inkscape::XML::Node *sp_radialgradient_write(SPObject *object, Inkscape::
                                                     guint flags);
 
 static SPPainter *sp_radialgradient_painter_new(SPPaintServer *ps,
-                                                NR::Matrix const &full_transform,
-                                                NR::Matrix const &parent_transform,
+                                                Geom::Matrix const &full_transform,
+                                                Geom::Matrix const &parent_transform,
                                                 NRRect const *bbox);
 static void sp_radialgradient_painter_free(SPPaintServer *ps, SPPainter *painter);
 
@@ -1749,8 +1750,8 @@ sp_radialgradient_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inks
  */
 static SPPainter *
 sp_radialgradient_painter_new(SPPaintServer *ps,
-                              NR::Matrix const &full_transform,
-                              NR::Matrix const &/*parent_transform*/,
+                              Geom::Matrix const &full_transform,
+                              Geom::Matrix const &/*parent_transform*/,
                               NRRect const *bbox)
 {
     SPRadialGradient *rg = SP_RADIALGRADIENT(ps);
@@ -1765,7 +1766,7 @@ sp_radialgradient_painter_new(SPPaintServer *ps,
 
     rgp->rg = rg;
 
-    NR::Matrix gs2px;
+    Geom::Matrix gs2px;
 
     if (gr->units == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) {
         /** \todo
@@ -1774,9 +1775,9 @@ sp_radialgradient_painter_new(SPPaintServer *ps,
          */
 
         /* BBox to user coordinate system */
-        NR::Matrix bbox2user(bbox->x1 - bbox->x0, 0, 0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0);
+        Geom::Matrix bbox2user(bbox->x1 - bbox->x0, 0, 0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0);
 
-        NR::Matrix gs2user = gr->gradientTransform * bbox2user;
+        Geom::Matrix gs2user = gr->gradientTransform * bbox2user;
 
         gs2px = gs2user * full_transform;
     } else {
@@ -1788,9 +1789,10 @@ sp_radialgradient_painter_new(SPPaintServer *ps,
 
         gs2px = gr->gradientTransform * full_transform;
     }
-
+    // TODO: remove gs2px_nr after converting to 2geom
+    NR::Matrix gs2px_nr = from_2geom(gs2px);
     nr_rgradient_renderer_setup(&rgp->rgr, gr->color, sp_gradient_get_spread(gr),
-                                &gs2px,
+                                &gs2px_nr,
                                 rg->cx.computed, rg->cy.computed,
                                 rg->fx.computed, rg->fy.computed,
                                 rg->r.computed);
index 52234b50e47d6b1dcbce049d1ee0efe031dc0952..3a26f5e5a53d618e6738ec6e958d60a4d873abef 100644 (file)
@@ -68,7 +68,7 @@ struct SPGradient : public SPPaintServer {
        SPGradientUnits units;
        guint units_set : 1;
        /** gradientTransform attribute */
-       NR::Matrix gradientTransform;
+       Geom::Matrix gradientTransform;
        guint gradientTransform_set : 1;
        /** spreadMethod attribute */
        SPGradientSpread spread;
index 0176bfdd0640764cfdcdd78c8f359d2d5487e2bd..b85b0f279ccca975c0566f27c2d52d66f6429a63 100644 (file)
@@ -77,8 +77,8 @@ static void sp_paint_server_release(SPObject *object)
 }
 
 SPPainter *sp_paint_server_painter_new(SPPaintServer *ps,
-                                       NR::Matrix const &full_transform,
-                                       NR::Matrix const &parent_transform,
+                                       Geom::Matrix const &full_transform,
+                                       Geom::Matrix const &parent_transform,
                                        const NRRect *bbox)
 {
     g_return_val_if_fail(ps != NULL, NULL);
index 975ae542f53fbcb654d248f5e5548a646122ad14..998f1556bf9d29f17df364850a2970121d061def 100644 (file)
@@ -49,14 +49,14 @@ struct SPPaintServer : public SPObject {
 struct SPPaintServerClass {
        SPObjectClass sp_object_class;
        /* Get SPPaint instance */
-       SPPainter * (* painter_new) (SPPaintServer *ps, NR::Matrix const &full_transform, NR::Matrix const &parent_transform, const NRRect *bbox);
+       SPPainter * (* painter_new) (SPPaintServer *ps, Geom::Matrix const &full_transform, Geom::Matrix const &parent_transform, const NRRect *bbox);
        /* Free SPPaint instance */
        void (* painter_free) (SPPaintServer *ps, SPPainter *painter);
 };
 
 GType sp_paint_server_get_type (void);
 
-SPPainter *sp_paint_server_painter_new (SPPaintServer *ps, NR::Matrix const &full_transform, NR::Matrix const &parent_transform, const NRRect *bbox);
+SPPainter *sp_paint_server_painter_new (SPPaintServer *ps, Geom::Matrix const &full_transform, Geom::Matrix const &parent_transform, const NRRect *bbox);
 
 SPPainter *sp_painter_free (SPPainter *painter);
 
index 9d981c5f2a176279caaf86352348b4b39b3d8ea3..96ff50cda909f02ae1cfe2592dc51de8385cf0e7 100644 (file)
@@ -44,17 +44,17 @@ struct SPPatPainter {
        SPPainter painter;
        SPPattern *pat;
 
-       NR::Matrix ps2px;
-       NR::Matrix px2ps;
-       NR::Matrix pcs2px;
+       Geom::Matrix ps2px;
+       Geom::Matrix px2ps;
+       Geom::Matrix pcs2px;
 
        NRArena *arena;
        unsigned int dkey;
        NRArenaItem *root;
        
        bool         use_cached_tile;
-       NR::Matrix     ca2pa;
-       NR::Matrix     pa2ca;
+       Geom::Matrix     ca2pa;
+       Geom::Matrix     pa2ca;
        NRRectL      cached_bbox;
        NRPixBlock   cached_tile;
 };
@@ -72,7 +72,7 @@ static void sp_pattern_modified (SPObject *object, unsigned int flags);
 static void pattern_ref_changed(SPObject *old_ref, SPObject *ref, SPPattern *pat);
 static void pattern_ref_modified (SPObject *ref, guint flags, SPPattern *pattern);
 
-static SPPainter *sp_pattern_painter_new (SPPaintServer *ps, NR::Matrix const &full_transform, NR::Matrix const &parent_transform, const NRRect *bbox);
+static SPPainter *sp_pattern_painter_new (SPPaintServer *ps, Geom::Matrix const &full_transform, Geom::Matrix const &parent_transform, const NRRect *bbox);
 static void sp_pattern_painter_free (SPPaintServer *ps, SPPainter *painter);
 
 static SPPaintServerClass * pattern_parent_class;
@@ -474,7 +474,7 @@ sp_pattern_clone_if_necessary (SPItem *item, SPPattern *pattern, const gchar *pr
 }
 
 void
-sp_pattern_transform_multiply (SPPattern *pattern, NR::Matrix postmul, bool set)
+sp_pattern_transform_multiply (SPPattern *pattern, Geom::Matrix postmul, bool set)
 {
        // this formula is for a different interpretation of pattern transforms as described in (*) in sp-pattern.cpp
        // for it to work, we also need    sp_object_read_attr (SP_OBJECT (item), "transform");
@@ -494,15 +494,15 @@ sp_pattern_transform_multiply (SPPattern *pattern, NR::Matrix postmul, bool set)
 }
 
 const gchar *
-pattern_tile (GSList *reprs, NR::Rect bounds, SPDocument *document, NR::Matrix transform, NR::Matrix move)
+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::Node *defsrepr = SP_OBJECT_REPR (SP_DOCUMENT_DEFS (document));
 
        Inkscape::XML::Node *repr = xml_doc->createElement("svg:pattern");
        repr->setAttribute("patternUnits", "userSpaceOnUse");
-       sp_repr_set_svg_double(repr, "width", bounds.extent(NR::X));
-       sp_repr_set_svg_double(repr, "height", bounds.extent(NR::Y));
+       sp_repr_set_svg_double(repr, "width", bounds.dimensions()[Geom::X]);
+       sp_repr_set_svg_double(repr, "height", bounds.dimensions()[Geom::Y]);
 
        gchar *t=sp_svg_transform_write(transform);
        repr->setAttribute("patternTransform", t);
@@ -516,9 +516,9 @@ pattern_tile (GSList *reprs, NR::Rect bounds, SPDocument *document, NR::Matrix t
                Inkscape::XML::Node *node = (Inkscape::XML::Node *)(i->data);
                SPItem *copy = SP_ITEM(pat_object->appendChildRepr(node));
 
-               NR::Matrix dup_transform;
+               Geom::Matrix dup_transform;
                if (!sp_svg_transform_read (node->attribute("transform"), &dup_transform))
-                       dup_transform = NR::identity();
+                       dup_transform = Geom::identity();
                dup_transform *= move;
 
                sp_item_write_transform(copy, SP_OBJECT_REPR(copy), dup_transform);
@@ -562,7 +562,7 @@ guint pattern_patternContentUnits (SPPattern *pat)
        return pat->patternContentUnits;
 }
 
-NR::Matrix const &pattern_patternTransform(SPPattern const *pat)
+Geom::Matrix const &pattern_patternTransform(SPPattern const *pat)
 {
        for (SPPattern const *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) {
                if (pat_i->patternTransform_set)
@@ -637,7 +637,7 @@ Creates a painter (i.e. the thing that does actual filling at the given zoom).
 See (*) below for why the parent_transform may be necessary.
 */
 static SPPainter *
-sp_pattern_painter_new (SPPaintServer *ps, NR::Matrix const &full_transform, NR::Matrix const &/*parent_transform*/, const NRRect *bbox)
+sp_pattern_painter_new (SPPaintServer *ps, Geom::Matrix const &full_transform, Geom::Matrix const &/*parent_transform*/, const NRRect *bbox)
 {
        SPPattern *pat = SP_PATTERN (ps);
        SPPatPainter *pp = g_new (SPPatPainter, 1);
@@ -649,10 +649,10 @@ sp_pattern_painter_new (SPPaintServer *ps, NR::Matrix const &full_transform, NR:
 
        if (pattern_patternUnits (pat) == SP_PATTERN_UNITS_OBJECTBOUNDINGBOX) {
                /* BBox to user coordinate system */
-               NR::Matrix bbox2user (bbox->x1 - bbox->x0, 0.0, 0.0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0);
+               Geom::Matrix bbox2user (bbox->x1 - bbox->x0, 0.0, 0.0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0);
 
                // the final patternTransform, taking into account bbox
-               NR::Matrix const ps2user(pattern_patternTransform(pat) * bbox2user);
+               Geom::Matrix const ps2user(pattern_patternTransform(pat) * bbox2user);
 
                // see (*) comment below
                pp->ps2px = ps2user * full_transform;
@@ -683,9 +683,9 @@ sp_pattern_painter_new (SPPaintServer *ps, NR::Matrix const &full_transform, NR:
                gdouble tmp_y = pattern_height (pat) / (pattern_viewBox(pat)->y1 - pattern_viewBox(pat)->y0);
 
                // FIXME: preserveAspectRatio must be taken into account here too!
-               NR::Matrix vb2ps (tmp_x, 0.0, 0.0, tmp_y, pattern_x(pat) - pattern_viewBox(pat)->x0 * tmp_x, pattern_y(pat) - pattern_viewBox(pat)->y0 * tmp_y);
+               Geom::Matrix vb2ps (tmp_x, 0.0, 0.0, tmp_y, pattern_x(pat) - pattern_viewBox(pat)->x0 * tmp_x, pattern_y(pat) - pattern_viewBox(pat)->y0 * tmp_y);
 
-               NR::Matrix vb2us = vb2ps * pattern_patternTransform(pat);
+               Geom::Matrix vb2us = vb2ps * pattern_patternTransform(pat);
 
                // see (*)
                pp->pcs2px = vb2us * full_transform;
@@ -693,9 +693,9 @@ sp_pattern_painter_new (SPPaintServer *ps, NR::Matrix const &full_transform, NR:
                /* No viewbox, have to parse units */
                if (pattern_patternContentUnits (pat) == SP_PATTERN_UNITS_OBJECTBOUNDINGBOX) {
                        /* BBox to user coordinate system */
-                       NR::Matrix bbox2user (bbox->x1 - bbox->x0, 0.0, 0.0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0);
+                       Geom::Matrix bbox2user (bbox->x1 - bbox->x0, 0.0, 0.0, bbox->y1 - bbox->y0, bbox->x0, bbox->y0);
 
-                       NR::Matrix pcs2user = pattern_patternTransform(pat) * bbox2user;
+                       Geom::Matrix pcs2user = pattern_patternTransform(pat) * bbox2user;
 
                        // see (*)
                        pp->pcs2px = pcs2user * full_transform;
@@ -736,7 +736,9 @@ sp_pattern_painter_new (SPPaintServer *ps, NR::Matrix const &full_transform, NR:
                one_tile.y0=pattern_y(pp->pat);
                one_tile.x1=one_tile.x0+pattern_width (pp->pat);
                one_tile.y1=one_tile.y0+pattern_height (pp->pat);
-               nr_rect_d_matrix_transform (&tr_tile, &one_tile, &pp->ps2px);
+               // TODO: remove ps2px_nr after converting to 2geom
+               NR::Matrix ps2px_nr = from_2geom(pp->ps2px);
+               nr_rect_d_matrix_transform (&tr_tile, &one_tile, &ps2px_nr);
                int       tr_width=(int)ceil(1.3*(tr_tile.x1-tr_tile.x0));
                int       tr_height=(int)ceil(1.3*(tr_tile.y1-tr_tile.y0));
 //             if ( tr_width < 10000 && tr_height < 10000 && tr_width*tr_height < 1000000 ) {
@@ -948,7 +950,9 @@ sp_pat_fill (SPPainter *painter, NRPixBlock *pb)
             fabs(pp->px2ps[4]) < 1e6 &&
             fabs(pp->px2ps[5]) < 1e6) 
         {
-            nr_rect_d_matrix_transform (&psa, &ba, &pp->px2ps);
+           // TODO: remove px2ps_nr after converting to 2geom
+           NR::Matrix px2ps_nr = from_2geom(pp->px2ps);
+            nr_rect_d_matrix_transform (&psa, &ba, &px2ps_nr);
                
                psa.x0 = floor ((psa.x0 - pattern_x (pp->pat)) / pattern_width (pp->pat)) -1;
                psa.y0 = floor ((psa.y0 - pattern_y (pp->pat)) / pattern_height (pp->pat)) -1;
index b40b12d8a08dd7c37403638a946113f14446372c..f15285e277cd545791cde08ec1c3327263539ee0 100644 (file)
@@ -63,7 +63,7 @@ struct SPPattern : public SPPaintServer {
     guint patternContentUnits : 1;
     guint patternContentUnits_set : 1;
     /* patternTransform attribute */
-    NR::Matrix patternTransform;
+    Geom::Matrix patternTransform;
     guint patternTransform_set : 1;
     /* Tile rectangle */
     SVGLength x;
@@ -84,15 +84,15 @@ struct SPPatternClass {
 guint pattern_users (SPPattern *pattern);
 SPPattern *pattern_chain (SPPattern *pattern);
 SPPattern *sp_pattern_clone_if_necessary (SPItem *item, SPPattern *pattern, const gchar *property);
-void sp_pattern_transform_multiply (SPPattern *pattern, NR::Matrix postmul, bool set);
+void sp_pattern_transform_multiply (SPPattern *pattern, Geom::Matrix postmul, bool set);
 
-const gchar *pattern_tile (GSList *reprs, NR::Rect bounds, SPDocument *document, NR::Matrix transform, NR::Matrix move);
+const gchar *pattern_tile (GSList *reprs, Geom::Rect bounds, SPDocument *document, Geom::Matrix transform, Geom::Matrix move);
 
 SPPattern *pattern_getroot (SPPattern *pat);
 
 guint pattern_patternUnits (SPPattern *pat);
 guint pattern_patternContentUnits (SPPattern *pat);
-NR::Matrix const &pattern_patternTransform(SPPattern const *pat);
+Geom::Matrix const &pattern_patternTransform(SPPattern const *pat);
 gdouble pattern_x (SPPattern *pat);
 gdouble pattern_y (SPPattern *pat);
 gdouble pattern_width (SPPattern *pat);
index fb3bb9e6a7ce8af9d12ae35ad48062b8ebdd7e91..bf8fd2003bb0bd0336c25d55058590e7f9e1f745 100644 (file)
@@ -286,6 +286,9 @@ sp_shape_update (SPObject *object, SPCtx *ctx, unsigned int flags)
     if (sp_shape_has_markers (shape)) {
         /* 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));
+            }
             for (int i = 0 ; i < SP_MARKER_LOC_QTY ; i++) {
                 if (shape->marker[i]) {
                     sp_marker_show_dimension ((SPMarker *) shape->marker[i],
index c0e33fddd8a529e6da29233fd857ce9c854ee619..0baaf521ea59b1fbda10628f359c545489d6c07f 100644 (file)
@@ -65,28 +65,28 @@ void Inkscape::SVG::PathString::_appendOp(char abs_op, char rel_op) {
     if ( !rel_op_repeated ) _rel_state.appendOp(rel_op);
 }
 
-void Inkscape::SVG::PathString::State::append(NR::Coord v) {
+void Inkscape::SVG::PathString::State::append(Geom::Coord v) {
     str += ' ';
     appendNumber(v);
 }
 
-void Inkscape::SVG::PathString::State::append(NR::Point p) {
+void Inkscape::SVG::PathString::State::append(Geom::Point p) {
     str += ' ';
-    appendNumber(p[NR::X]);
+    appendNumber(p[Geom::X]);
     str += ',';
-    appendNumber(p[NR::Y]);
+    appendNumber(p[Geom::Y]);
 }
 
-void Inkscape::SVG::PathString::State::append(NR::Coord v, NR::Coord& rv) {
+void Inkscape::SVG::PathString::State::append(Geom::Coord v, Geom::Coord& rv) {
     str += ' ';
     appendNumber(v, rv);
 }
 
-void Inkscape::SVG::PathString::State::append(NR::Point p, NR::Point &rp) {
+void Inkscape::SVG::PathString::State::append(Geom::Point p, Geom::Point &rp) {
     str += ' ';
-    appendNumber(p[NR::X], rp[NR::X]);
+    appendNumber(p[Geom::X], rp[Geom::X]);
     str += ',';
-    appendNumber(p[NR::Y], rp[NR::Y]);
+    appendNumber(p[Geom::Y], rp[Geom::Y]);
 }
 
 // NOTE: The following appendRelativeCoord function will not be exact if the total number of digits needed
@@ -95,7 +95,7 @@ void Inkscape::SVG::PathString::State::append(NR::Point p, NR::Point &rp) {
 // than the absolute value).
 
 // NOTE: This assumes v and r are already rounded (this includes flushing to zero if they are < 10^minexp)
-void Inkscape::SVG::PathString::State::appendRelativeCoord(NR::Coord v, NR::Coord r) {
+void Inkscape::SVG::PathString::State::appendRelativeCoord(Geom::Coord v, Geom::Coord r) {
     int const minexp = minimumexponent-numericprecision+1;
     int const digitsEnd = (int)floor(log10(std::min(fabs(v),fabs(r)))) - numericprecision; // Position just beyond the last significant digit of the smallest (in absolute sense) number
     double const roundeddiff = floor((v-r)*pow(10.,-digitsEnd-1)+.5);
@@ -112,14 +112,14 @@ void Inkscape::SVG::PathString::State::appendRelativeCoord(NR::Coord v, NR::Coor
     }
 }
 
-void Inkscape::SVG::PathString::State::appendRelative(NR::Point p, NR::Point r) {
+void Inkscape::SVG::PathString::State::appendRelative(Geom::Point p, Geom::Point r) {
     str += ' ';
-    appendRelativeCoord(p[NR::X], r[NR::X]);
+    appendRelativeCoord(p[Geom::X], r[Geom::X]);
     str += ',';
-    appendRelativeCoord(p[NR::Y], r[NR::Y]);
+    appendRelativeCoord(p[Geom::Y], r[Geom::Y]);
 }
 
-void Inkscape::SVG::PathString::State::appendRelative(NR::Coord v, NR::Coord r) {
+void Inkscape::SVG::PathString::State::appendRelative(Geom::Coord v, Geom::Coord r) {
     str += ' ';
     appendRelativeCoord(v, r);
 }
index 01389a3d0e41e910926ff47ff3fb1b39ccb5125d..9079acfb44294cb7580ce538b6a53bcb8a75357d 100644 (file)
@@ -19,8 +19,7 @@
 #include <glibmm/ustring.h>
 #include <string>
 #include <stdio.h>
-#include "libnr/nr-point.h"
-#include "libnr/nr-point-ops.h"
+#include <2geom/point.h>
 
 namespace Inkscape {
 
@@ -53,11 +52,11 @@ public:
         return string().c_str();
     }
 
-    PathString &moveTo(NR::Coord x, NR::Coord y) {
-        return moveTo(NR::Point(x, y));
+    PathString &moveTo(Geom::Coord x, Geom::Coord y) {
+        return moveTo(Geom::Point(x, y));
     }
 
-    PathString &moveTo(NR::Point p) {
+    PathString &moveTo(Geom::Point p) {
         _appendOp('M','m');
         _appendPoint(p, true);
 
@@ -65,47 +64,47 @@ public:
         return *this;
     }
 
-    PathString &lineTo(NR::Coord x, NR::Coord y) {
-        return lineTo(NR::Point(x, y));
+    PathString &lineTo(Geom::Coord x, Geom::Coord y) {
+        return lineTo(Geom::Point(x, y));
     }
 
-    PathString &lineTo(NR::Point p) {
+    PathString &lineTo(Geom::Point p) {
         _appendOp('L','l');
         _appendPoint(p, true);
         return *this;
     }
 
-    PathString &horizontalLineTo(NR::Coord x) {
+    PathString &horizontalLineTo(Geom::Coord x) {
         _appendOp('H','h');
         _appendX(x, true);
         return *this;
     }
 
-    PathString &verticalLineTo(NR::Coord y) {
+    PathString &verticalLineTo(Geom::Coord y) {
         _appendOp('V','v');
         _appendY(y, true);
         return *this;
     }
 
-    PathString &quadTo(NR::Coord cx, NR::Coord cy, NR::Coord x, NR::Coord y) {
-        return quadTo(NR::Point(cx, cy), NR::Point(x, y));
+    PathString &quadTo(Geom::Coord cx, Geom::Coord cy, Geom::Coord x, Geom::Coord y) {
+        return quadTo(Geom::Point(cx, cy), Geom::Point(x, y));
     }
 
-    PathString &quadTo(NR::Point c, NR::Point p) {
+    PathString &quadTo(Geom::Point c, Geom::Point p) {
         _appendOp('Q','q');
         _appendPoint(c, false);
         _appendPoint(p, true);
         return *this;
     }
 
-    PathString &curveTo(NR::Coord x0, NR::Coord y0,
-                        NR::Coord x1, NR::Coord y1,
-                        NR::Coord x,  NR::Coord y)
+    PathString &curveTo(Geom::Coord x0, Geom::Coord y0,
+                        Geom::Coord x1, Geom::Coord y1,
+                        Geom::Coord x,  Geom::Coord y)
     {
-        return curveTo(NR::Point(x0, y0), NR::Point(x1, y1), NR::Point(x, y));
+        return curveTo(Geom::Point(x0, y0), Geom::Point(x1, y1), Geom::Point(x, y));
     }
 
-    PathString &curveTo(NR::Point c0, NR::Point c1, NR::Point p) {
+    PathString &curveTo(Geom::Point c0, Geom::Point c1, Geom::Point p) {
         _appendOp('C','c');
         _appendPoint(c0, false);
         _appendPoint(c1, false);
@@ -116,12 +115,12 @@ public:
     /**
      *  \param rot the angle in degrees
      */
-    PathString &arcTo(NR::Coord rx, NR::Coord ry, NR::Coord rot,
+    PathString &arcTo(Geom::Coord rx, Geom::Coord ry, Geom::Coord rot,
                       bool large_arc, bool sweep,
-                      NR::Point p)
+                      Geom::Point p)
     {
         _appendOp('A','a');
-        _appendValue(NR::Point(rx,ry));
+        _appendValue(Geom::Point(rx,ry));
         _appendValue(rot);
         _appendFlag(large_arc);
         _appendFlag(sweep);
@@ -145,32 +144,32 @@ private:
         _rel_state.append(flag);
     }
 
-    void _appendValue(NR::Coord v) {
+    void _appendValue(Geom::Coord v) {
         _abs_state.append(v);
         _rel_state.append(v);
     }
 
-    void _appendValue(NR::Point p) {
+    void _appendValue(Geom::Point p) {
         _abs_state.append(p);
         _rel_state.append(p);
     }
 
-    void _appendX(NR::Coord x, bool sc) {
+    void _appendX(Geom::Coord x, bool sc) {
         double rx;
         _abs_state.append(x, rx);
-        _rel_state.appendRelative(rx, _current_point[NR::X]);
-        if (sc) _current_point[NR::X] = rx;
+        _rel_state.appendRelative(rx, _current_point[Geom::X]);
+        if (sc) _current_point[Geom::X] = rx;
     }
 
-    void _appendY(NR::Coord y, bool sc) {
+    void _appendY(Geom::Coord y, bool sc) {
         double ry;
         _abs_state.append(y, ry);
-        _rel_state.appendRelative(ry, _current_point[NR::Y]);
-        if (sc) _current_point[NR::Y] = ry;
+        _rel_state.appendRelative(ry, _current_point[Geom::Y]);
+        if (sc) _current_point[Geom::Y] = ry;
     }
 
-    void _appendPoint(NR::Point p, bool sc) {
-        NR::Point rp;
+    void _appendPoint(Geom::Point p, bool sc) {
+        Geom::Point rp;
         _abs_state.append(p, rp);
         _rel_state.appendRelative(rp, _current_point);
         if (sc) _current_point = rp;
@@ -190,12 +189,12 @@ private:
             str += ( flag ? '1' : '0' );
         }
 
-        void append(NR::Coord v);
-        void append(NR::Point v);
-        void append(NR::Coord v, NR::Coord& rv);
-        void append(NR::Point p, NR::Point& rp);
-        void appendRelative(NR::Coord v, NR::Coord r);
-        void appendRelative(NR::Point p, NR::Point r);
+        void append(Geom::Coord v);
+        void append(Geom::Point v);
+        void append(Geom::Coord v, Geom::Coord& rv);
+        void append(Geom::Point p, Geom::Point& rp);
+        void appendRelative(Geom::Coord v, Geom::Coord r);
+        void appendRelative(Geom::Point p, Geom::Point r);
 
         bool operator<=(const State& s) const {
             if ( str.size() < s.str.size() ) return true;
@@ -214,11 +213,11 @@ private:
     private:
         void appendNumber(double v, int precision=numericprecision, int minexp=minimumexponent);
         void appendNumber(double v, double &rv, int precision=numericprecision, int minexp=minimumexponent);
-        void appendRelativeCoord(NR::Coord v, NR::Coord r);
+        void appendRelativeCoord(Geom::Coord v, Geom::Coord r);
     } _abs_state, _rel_state; // State with the last operator being an absolute/relative operator
 
-    NR::Point _initial_point;
-    NR::Point _current_point;
+    Geom::Point _initial_point;
+    Geom::Point _current_point;
 
     // If both states have a common prefix it is stored here.
     // Separating out the common prefix prevents repeated copying between the states
index 2b9a79d3d106b497b72688c68b145bae62db4aea..bcc685e8ad946f567ce1e5d63663c3ddc0918244 100644 (file)
@@ -49,123 +49,123 @@ sp_svg_transform_read(gchar const *str, Geom::Matrix *transform)
 bool
 sp_svg_transform_read(gchar const *str, NR::Matrix *transform)
 {
-       int idx;
-       char keyword[32];
-       double args[6];
-       int n_args;
-       size_t key_len;
+    int idx;
+    char keyword[32];
+    double args[6];
+    int n_args;
+    size_t key_len;
 
-       if (str == NULL) return false;
+    if (str == NULL) return false;
 
-       NR::Matrix a(NR::identity());
+    NR::Matrix a(NR::identity());
 
-       idx = 0;
-       while (str[idx]) {
-               /* skip initial whitespace */
-               while (g_ascii_isspace (str[idx])) idx++;
+    idx = 0;
+    while (str[idx]) {
+        /* skip initial whitespace */
+        while (g_ascii_isspace (str[idx])) idx++;
 
-               /* parse keyword */
-               for (key_len = 0; key_len < sizeof (keyword); key_len++) {
-                       char c;
+        /* parse keyword */
+        for (key_len = 0; key_len < sizeof (keyword); key_len++) {
+            char c;
 
-                       c = str[idx];
-                       if (g_ascii_isalpha (c) || c == '-') {
-                               keyword[key_len] = str[idx++];
-                       } else {
-                               break;
-                       }
-               }
-               if (key_len >= sizeof (keyword)) return false;
-               keyword[key_len] = '\0';
+            c = str[idx];
+            if (g_ascii_isalpha (c) || c == '-') {
+                keyword[key_len] = str[idx++];
+            } else {
+                break;
+            }
+        }
+        if (key_len >= sizeof (keyword)) return false;
+        keyword[key_len] = '\0';
 
-               /* skip whitespace */
-               while (g_ascii_isspace (str[idx])) idx++;
+        /* skip whitespace */
+        while (g_ascii_isspace (str[idx])) idx++;
 
-               if (str[idx] != '(') return false;
-               idx++;
+        if (str[idx] != '(') return false;
+        idx++;
 
-               for (n_args = 0; ; n_args++) {
-                       char c;
-                       char *end_ptr;
+        for (n_args = 0; ; n_args++) {
+            char c;
+            char *end_ptr;
 
-                       /* skip whitespace */
-                       while (g_ascii_isspace (str[idx])) idx++;
-                       c = str[idx];
-                       if (g_ascii_isdigit (c) || c == '+' || c == '-' || c == '.') {
-                               if (n_args == sizeof (args) / sizeof (args[0])) return false; /* Too many args */
-                               args[n_args] = g_ascii_strtod (str + idx, &end_ptr);
-                               
-                               //printf("took %d chars from '%s' to make %f\n",
-                               //              end_ptr-(str+idx),
-                               //              str+idx,
-                               //              args[n_args]);
+            /* skip whitespace */
+            while (g_ascii_isspace (str[idx])) idx++;
+            c = str[idx];
+            if (g_ascii_isdigit (c) || c == '+' || c == '-' || c == '.') {
+                if (n_args == sizeof (args) / sizeof (args[0])) return false; /* Too many args */
+                args[n_args] = g_ascii_strtod (str + idx, &end_ptr);
+                
+                //printf("took %d chars from '%s' to make %f\n",
+                //             end_ptr-(str+idx),
+                //             str+idx,
+                //             args[n_args]);
 
-                               idx = end_ptr - (char *) str;
+                idx = end_ptr - (char *) str;
 
-                               while (g_ascii_isspace (str[idx])) idx++;
+                while (g_ascii_isspace (str[idx])) idx++;
 
-                               /* skip optional comma */
-                               if (str[idx] == ',') idx++;
-                       } else if (c == ')') {
-                               break;
-                       } else {
-                               return false;
-                       }
-               }
-               idx++;
+                /* skip optional comma */
+                if (str[idx] == ',') idx++;
+            } else if (c == ')') {
+                break;
+            } else {
+                return false;
+            }
+        }
+        idx++;
 
-               /* ok, have parsed keyword and args, now modify the transform */
-               if (!strcmp (keyword, "matrix")) {
-                       if (n_args != 6) return false;
-                       a = (*NR_MATRIX_D_FROM_DOUBLE(args)) * a;
-               } else if (!strcmp (keyword, "translate")) {
-                       if (n_args == 1) {
-                               args[1] = 0;
-                       } else if (n_args != 2) {
-                               return false;
-                       }
-                       a = Geom::Translate(args[0], args[1]) * a;
-               } else if (!strcmp (keyword, "scale")) {
-                       if (n_args == 1) {
-                               args[1] = args[0];
-                       } else if (n_args != 2) {
-                               return false;
-                       }
-                       a = Geom::Scale(args[0], args[1]) * a;
-               } else if (!strcmp (keyword, "rotate")) {
-                       if (n_args != 1 && n_args != 3) {
-                               return false;
-                       }
-                       Geom::Rotate const rot(Geom::deg_to_rad(args[0]));
-                       if (n_args == 3) {
-                               a = ( Geom::Translate(-args[1], -args[2])
-                                     * rot
-                                     * Geom::Translate(args[1], args[2])
-                                     * Geom::Matrix(a) );
-                       } else {
-                               a = rot * a;
-                       }
-               } else if (!strcmp (keyword, "skewX")) {
-                       if (n_args != 1) return false;
-                       a = ( NR::Matrix(1, 0,
-                                        tan(args[0] * M_PI / 180.0), 1,
-                                        0, 0)
-                             * a );
-               } else if (!strcmp (keyword, "skewY")) {
-                       if (n_args != 1) return false;
-                       a = ( NR::Matrix(1, tan(args[0] * M_PI / 180.0),
-                                        0, 1,
-                                        0, 0)
-                             * a );
-               } else {
-                       return false; /* unknown keyword */
-               }
-               /* Skip trailing whitespace */
+        /* ok, have parsed keyword and args, now modify the transform */
+        if (!strcmp (keyword, "matrix")) {
+            if (n_args != 6) return false;
+            a = (*NR_MATRIX_D_FROM_DOUBLE(args)) * a;
+        } else if (!strcmp (keyword, "translate")) {
+            if (n_args == 1) {
+                args[1] = 0;
+            } else if (n_args != 2) {
+                return false;
+            }
+            a = Geom::Translate(args[0], args[1]) * a;
+        } else if (!strcmp (keyword, "scale")) {
+            if (n_args == 1) {
+                args[1] = args[0];
+            } else if (n_args != 2) {
+                return false;
+            }
+            a = Geom::Scale(args[0], args[1]) * a;
+        } else if (!strcmp (keyword, "rotate")) {
+            if (n_args != 1 && n_args != 3) {
+                return false;
+            }
+            Geom::Rotate const rot(Geom::deg_to_rad(args[0]));
+            if (n_args == 3) {
+                a = ( Geom::Translate(-args[1], -args[2])
+                      * rot
+                      * Geom::Translate(args[1], args[2])
+                      * Geom::Matrix(a) );
+            } else {
+                a = rot * a;
+            }
+        } else if (!strcmp (keyword, "skewX")) {
+            if (n_args != 1) return false;
+            a = ( NR::Matrix(1, 0,
+                     tan(args[0] * M_PI / 180.0), 1,
+                     0, 0)
+                  * a );
+        } else if (!strcmp (keyword, "skewY")) {
+            if (n_args != 1) return false;
+            a = ( NR::Matrix(1, tan(args[0] * M_PI / 180.0),
+                     0, 1,
+                     0, 0)
+                  * a );
+        } else {
+            return false; /* unknown keyword */
+        }
+        /* Skip trailing whitespace */
              while (g_ascii_isspace (str[idx])) idx++;
-       }
+    }
 
-       *transform = a;
-       return true;
+    *transform = a;
+    return true;
 }
 
 #define EQ(a,b) (fabs ((a) - (b)) < 1e-9)
@@ -173,112 +173,107 @@ sp_svg_transform_read(gchar const *str, NR::Matrix *transform)
 gchar *
 sp_svg_transform_write(Geom::Matrix const &transform)
 {
-    return sp_svg_transform_write(&transform);
+    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+
+    double e = 0.000001 * transform.descrim();
+    int prec = prefs->getInt("/options/svgoutput/numericprecision", 8);
+    int min_exp = prefs->getInt("/options/svgoutput/minimumexponent", -8);
+
+    /* fixme: We could use t1 * t1 + t2 * t2 here instead */
+    if ( Geom::are_near(transform[1], 0.0, e) && Geom::are_near (transform[2], 0.0, e)) {
+        if (Geom::are_near (transform[4], 0.0, e) && Geom::are_near (transform[5], 0.0, e)) {
+            if (Geom::are_near (transform[0], 1.0, e) && Geom::are_near (transform[3], 1.0, e)) {
+                /* We are more or less identity */
+                return NULL;
+            } else {
+                /* We are more or less scale */
+                gchar c[256];
+                unsigned p = 0;
+                strcpy (c + p, "scale(");
+                p += 6;
+                p += sp_svg_number_write_de (c + p, transform[0], prec, min_exp);
+                c[p++] = ',';
+                p += sp_svg_number_write_de (c + p, transform[3], prec, min_exp);
+                c[p++] = ')';
+                c[p] = '\000';
+                g_assert( p <= sizeof(c) );
+                return g_strdup(c);
+            }
+        } else {
+            if (Geom::are_near (transform[0], 1.0, e) && Geom::are_near (transform[3], 1.0, e)) {
+                /* We are more or less translate */
+                gchar c[256];
+                unsigned p = 0;
+                strcpy (c + p, "translate(");
+                p += 10;
+                p += sp_svg_number_write_de (c + p, transform[4], prec, min_exp);
+                c[p++] = ',';
+                p += sp_svg_number_write_de (c + p, transform[5], prec, min_exp);
+                c[p++] = ')';
+                c[p] = '\000';
+                g_assert( p <= sizeof(c) );
+                return g_strdup(c);
+            } else {
+                gchar c[256];
+                unsigned p = 0;
+                strcpy (c + p, "matrix(");
+                p += 7;
+                p += sp_svg_number_write_de (c + p, transform[0], prec, min_exp);
+                c[p++] = ',';
+                p += sp_svg_number_write_de (c + p, transform[1], prec, min_exp);
+                c[p++] = ',';
+                p += sp_svg_number_write_de (c + p, transform[2], prec, min_exp);
+                c[p++] = ',';
+                p += sp_svg_number_write_de (c + p, transform[3], prec, min_exp);
+                c[p++] = ',';
+                p += sp_svg_number_write_de (c + p, transform[4], prec, min_exp);
+                c[p++] = ',';
+                p += sp_svg_number_write_de (c + p, transform[5], prec, min_exp);
+                c[p++] = ')';
+                c[p] = '\000';
+                g_assert( p <= sizeof(c) );
+                return g_strdup(c);
+            }
+        }
+    } else {
+        gchar c[256];
+        unsigned p = 0;
+        strcpy (c + p, "matrix(");
+        p += 7;
+        p += sp_svg_number_write_de (c + p, transform[0], prec, min_exp);
+        c[p++] = ',';
+        p += sp_svg_number_write_de (c + p, transform[1], prec, min_exp);
+        c[p++] = ',';
+        p += sp_svg_number_write_de (c + p, transform[2], prec, min_exp);
+        c[p++] = ',';
+        p += sp_svg_number_write_de (c + p, transform[3], prec, min_exp);
+        c[p++] = ',';
+        p += sp_svg_number_write_de (c + p, transform[4], prec, min_exp);
+        c[p++] = ',';
+        p += sp_svg_number_write_de (c + p, transform[5], prec, min_exp);
+        c[p++] = ')';
+        c[p] = '\000';
+        g_assert( p <= sizeof(c) );
+        return g_strdup(c);
+    }
 }
 
 
 gchar *
 sp_svg_transform_write(Geom::Matrix const *transform)
 {
-    NR::Matrix const t(*transform);
-    return sp_svg_transform_write(&t);
+    return sp_svg_transform_write(*transform);
 }
 
 gchar *
 sp_svg_transform_write(NR::Matrix const &transform)
 {
-       NR::Matrix const t(transform);
-       return sp_svg_transform_write(&t);
+    return sp_svg_transform_write((Geom::Matrix)transform);
 }
 
 gchar *
 sp_svg_transform_write(NR::Matrix const *transform)
 {
-       if (!transform) {
-               return NULL;
-       }
-       Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-
-       double e = 0.000001 * NR::expansion(*transform);
-       int prec = prefs->getInt("/options/svgoutput/numericprecision", 8);
-       int min_exp = prefs->getInt("/options/svgoutput/minimumexponent", -8);
-
-       /* fixme: We could use t1 * t1 + t2 * t2 here instead */
-       if (NR_DF_TEST_CLOSE ((*transform)[1], 0.0, e) && NR_DF_TEST_CLOSE ((*transform)[2], 0.0, e)) {
-               if (NR_DF_TEST_CLOSE ((*transform)[4], 0.0, e) && NR_DF_TEST_CLOSE ((*transform)[5], 0.0, e)) {
-                       if (NR_DF_TEST_CLOSE ((*transform)[0], 1.0, e) && NR_DF_TEST_CLOSE ((*transform)[3], 1.0, e)) {
-                               /* We are more or less identity */
-                               return NULL;
-                       } else {
-                               /* We are more or less scale */
-                               gchar c[256];
-                               unsigned p = 0;
-                               strcpy (c + p, "scale(");
-                               p += 6;
-                               p += sp_svg_number_write_de (c + p, (*transform)[0], prec, min_exp);
-                               c[p++] = ',';
-                               p += sp_svg_number_write_de (c + p, (*transform)[3], prec, min_exp);
-                               c[p++] = ')';
-                               c[p] = '\000';
-                               g_assert( p <= sizeof(c) );
-                               return g_strdup(c);
-                       }
-               } else {
-                       if (NR_DF_TEST_CLOSE ((*transform)[0], 1.0, e) && NR_DF_TEST_CLOSE ((*transform)[3], 1.0, e)) {
-                               /* We are more or less translate */
-                               gchar c[256];
-                               unsigned p = 0;
-                               strcpy (c + p, "translate(");
-                               p += 10;
-                               p += sp_svg_number_write_de (c + p, (*transform)[4], prec, min_exp);
-                               c[p++] = ',';
-                               p += sp_svg_number_write_de (c + p, (*transform)[5], prec, min_exp);
-                               c[p++] = ')';
-                               c[p] = '\000';
-                               g_assert( p <= sizeof(c) );
-                               return g_strdup(c);
-                       } else {
-                               gchar c[256];
-                               unsigned p = 0;
-                               strcpy (c + p, "matrix(");
-                               p += 7;
-                               p += sp_svg_number_write_de (c + p, (*transform)[0], prec, min_exp);
-                               c[p++] = ',';
-                               p += sp_svg_number_write_de (c + p, (*transform)[1], prec, min_exp);
-                               c[p++] = ',';
-                               p += sp_svg_number_write_de (c + p, (*transform)[2], prec, min_exp);
-                               c[p++] = ',';
-                               p += sp_svg_number_write_de (c + p, (*transform)[3], prec, min_exp);
-                               c[p++] = ',';
-                               p += sp_svg_number_write_de (c + p, (*transform)[4], prec, min_exp);
-                               c[p++] = ',';
-                               p += sp_svg_number_write_de (c + p, (*transform)[5], prec, min_exp);
-                               c[p++] = ')';
-                               c[p] = '\000';
-                               g_assert( p <= sizeof(c) );
-                               return g_strdup(c);
-                       }
-               }
-       } else {
-               gchar c[256];
-               unsigned p = 0;
-               strcpy (c + p, "matrix(");
-               p += 7;
-               p += sp_svg_number_write_de (c + p, (*transform)[0], prec, min_exp);
-               c[p++] = ',';
-               p += sp_svg_number_write_de (c + p, (*transform)[1], prec, min_exp);
-               c[p++] = ',';
-               p += sp_svg_number_write_de (c + p, (*transform)[2], prec, min_exp);
-               c[p++] = ',';
-               p += sp_svg_number_write_de (c + p, (*transform)[3], prec, min_exp);
-               c[p++] = ',';
-               p += sp_svg_number_write_de (c + p, (*transform)[4], prec, min_exp);
-               c[p++] = ',';
-               p += sp_svg_number_write_de (c + p, (*transform)[5], prec, min_exp);
-               c[p++] = ')';
-               c[p] = '\000';
-               g_assert( p <= sizeof(c) );
-               return g_strdup(c);
-       }
+    return sp_svg_transform_write(*transform);
 }
 
index 6c75a6c81df07790a114fcff52b42782dc5d722a..638be28327d1d1db65fa55579227aaeead1deaae 100644 (file)
@@ -60,6 +60,8 @@ ui_dialog_libuidialog_a_SOURCES =             \
        ui/dialog/aboutbox.cpp              \
        ui/dialog/aboutbox.h            \
        ui/dialog/ocaldialogs.cpp       \
-       ui/dialog/ocaldialogs.h
+       ui/dialog/ocaldialogs.h \
+       ui/dialog/filedialogimpl-win32.h \
+       ui/dialog/filedialogimpl-win32.cpp 
 
 ui/dialog/aboutbox.$(OBJEXT): inkscape_version.h
index 1ac259221836e5c2ebb25252b3aa58dfe5ee29b1..90dddce59a51a8ba5858d32796a1fb9ffcc5d139 100644 (file)
@@ -1,22 +1,22 @@
-#ifndef __FILE_DIALOGIMPL_H__
-#define __FILE_DIALOGIMPL_H__
 /** @file
  * @brief Implementation of the file dialog interfaces defined in filedialogimpl.h
  */
 /* Authors:
  *   Bob Jamison
+ *   Johan Engelen <johan@shouraizou.nl>
  *   Joel Holdsworth
  *   Bruno Dilly
  *   Other dudes from The Inkscape Organization
  *
- * Copyright (C) 2004-2007 Bob Jamison
- * Copyright (C) 2006 Johan Engelen <johan@shouraizou.nl>
- * Copyright (C) 2007-2008 Joel Holdsworth
+ * Copyright (C) 2004-2008 Authors
  * Copyright (C) 2004-2007 The Inkscape Organization
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
 
+#ifndef __FILE_DIALOGIMPL_H__
+#define __FILE_DIALOGIMPL_H__
+
 #include "filedialog.h"
 
 //General includes
index 77a42df99c2b5482a366cf38f9a5d07a2453a63a..b47f2ccc74f0c77b7297e796db5fbf1eba5d1330 100644 (file)
@@ -9,13 +9,12 @@
  *
  * Released under GNU GPL, read the file 'COPYING' for more information
  */
+#ifdef WIN32
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-#ifdef WIN32
-
 //General includes
 #include <list>
 #include <unistd.h>
@@ -1694,11 +1693,9 @@ UINT_PTR CALLBACK FileSaveDialogImplWin32::GetSaveFileName_hookproc(
     return 0;
 }
 
-}
-}
-}
+} } } // namespace Dialog, UI, Inkscape
 
-#endif
+#endif // ifdef WIN32
 
 /*
   Local Variables:
index d31331a0de1dbee559034385379409f2a110e6cb..799bb2a245ba150705571f61d782dc1694147a1e 100644 (file)
@@ -1157,6 +1157,8 @@ FilterEffectsDialog::FilterModifier::FilterModifier(FilterEffectsDialog& d)
 
     g_signal_connect(G_OBJECT(INKSCAPE), "activate_desktop",
                      G_CALLBACK(&FilterModifier::on_activate_desktop), this);
+    g_signal_connect(G_OBJECT(INKSCAPE), "deactivate_desktop",
+                     G_CALLBACK(&FilterModifier::on_deactivate_desktop), this);
 
     on_activate_desktop(INKSCAPE, d.getDesktop(), this);
     update_filters();
@@ -1184,6 +1186,13 @@ void FilterEffectsDialog::FilterModifier::on_activate_desktop(Application*, SPDe
     me->update_filters();
 }
 
+void FilterEffectsDialog::FilterModifier::on_deactivate_desktop(Application*, SPDesktop* desktop, FilterModifier* me)
+{
+    me->_doc_replaced.disconnect();
+    me->_resource_changed.disconnect();
+    me->_dialog.setDesktop(NULL);
+}
+
 
 // When the selection changes, show the active filter(s) in the dialog
 void FilterEffectsDialog::FilterModifier::on_inkscape_change_selection(Application */*inkscape*/,
index 0522b7a9970652a29678397275677b02436cd48a..ccffb2a67d78be6356540bf913328b11d05dcca2 100644 (file)
@@ -87,6 +87,7 @@ private:
         };
 
         static void on_activate_desktop(Application*, SPDesktop*, FilterModifier*);
+        static void on_deactivate_desktop(Application*, SPDesktop*, FilterModifier*);
         void on_document_replaced(SPDesktop*, SPDocument*)
         {
             update_filters();
index f2fa9bcd3c2bae4b9b04021cbeb5ea7f20b09f88..9e39af75ff87bcaeaa1006d3e210e79613ea5bea 100644 (file)
@@ -33,7 +33,7 @@ namespace Inkscape {
 namespace UI {
 namespace Widget {
 
-void ObjectCompositeSettings::_on_desktop_switch(
+void ObjectCompositeSettings::_on_desktop_activate(
     Inkscape::Application */*application*/,
     SPDesktop *desktop,
     ObjectCompositeSettings *w
@@ -43,6 +43,16 @@ void ObjectCompositeSettings::_on_desktop_switch(
     }
 }
 
+void ObjectCompositeSettings::_on_desktop_deactivate(
+    Inkscape::Application */*application*/,
+    SPDesktop *desktop,
+    ObjectCompositeSettings *w
+) {
+    if (w->_subject) {
+        w->_subject->setDesktop(NULL);
+    }
+}
+
 ObjectCompositeSettings::ObjectCompositeSettings(unsigned int verb_code, char const *history_prefix, int flags)
 : _verb_code(verb_code),
   _blur_tag(Glib::ustring(history_prefix) + ":blur"),
@@ -77,7 +87,8 @@ ObjectCompositeSettings::ObjectCompositeSettings(unsigned int verb_code, char co
 
     show_all_children();
 
-    _desktop_activated = g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (&ObjectCompositeSettings::_on_desktop_switch), this );
+    _desktop_activated = g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (&ObjectCompositeSettings::_on_desktop_activate), this );
+    _desktop_activated = g_signal_connect ( G_OBJECT (INKSCAPE), "deactivate_desktop", G_CALLBACK (&ObjectCompositeSettings::_on_desktop_deactivate), this );
 }
 
 ObjectCompositeSettings::~ObjectCompositeSettings() {
index 725a8a42b18d2c121647f1da460a1a064b35c8f8..f778c3ac0da99073920bffa1491705075b841a05 100644 (file)
@@ -55,7 +55,8 @@ private:
     Gtk::VBox       _fe_vbox;
     Gtk::Alignment  _fe_alignment;
 
-    static void _on_desktop_switch(Inkscape::Application *application, SPDesktop *desktop, ObjectCompositeSettings *w);
+    static void _on_desktop_activate(Inkscape::Application *application, SPDesktop *desktop, ObjectCompositeSettings *w);
+    static void _on_desktop_deactivate(Inkscape::Application *application, SPDesktop *desktop, ObjectCompositeSettings *w);
     void _subjectChanged();
     sigc::connection _subject_changed;