Code

Fix issue with adding traced path to a layer with a transform
authorjohncoswell <johncoswell@users.sourceforge.net>
Wed, 28 Feb 2007 01:50:21 +0000 (01:50 +0000)
committerjohncoswell <johncoswell@users.sourceforge.net>
Wed, 28 Feb 2007 01:50:21 +0000 (01:50 +0000)
src/flood-context.cpp

index d1c2ad65b7c99e05c0ed63e7bdfa603bbdfe6093..467d47de7279842dc40581859a6686cc549143fc 100644 (file)
@@ -331,7 +331,24 @@ static void do_trace(GdkPixbuf *px, SPDesktop *desktop, NR::Matrix transform) {
         delete expanded_path;
         pathRepr->setAttribute("d", str);
         g_free(str);
-        
+
+        // premultiply the item transform by the accumulated parent transform in the paste layer
+        NR::Matrix local = sp_item_i2doc_affine(SP_GROUP(desktop->currentLayer()));
+        if (!local.test_identity()) {
+            gchar const *t_str = pathRepr->attribute("transform");
+            NR::Matrix item_t (NR::identity());
+            if (t_str)
+                sp_svg_transform_read(t_str, &item_t);
+            item_t *= local.inverse();
+            // (we're dealing with unattached repr, so we write to its attr instead of using sp_item_set_transform)
+            gchar affinestr[80];
+            if (sp_svg_transform_write(affinestr, 79, item_t)) {
+                pathRepr->setAttribute("transform", affinestr);
+            } else {
+                pathRepr->setAttribute("transform", NULL);
+            }
+        }
+
         layer_repr->addChild(pathRepr, NULL);
 
         SPObject *reprobj = document->getObjectByRepr(pathRepr);