summaryrefslogtreecommitdiffstats
path: root/src/live_effects
diff options
context:
space:
mode:
authorJabiertxof <jtx@jtx>2017-05-29 00:09:29 +0000
committerJabiertxof <jtx@jtx>2017-05-29 00:09:29 +0000
commit5151c0569bb266461c3b6a6325c0d4be60b41a67 (patch)
treec88082a30788888ff942b63e6c2cfadbf68ccf07 /src/live_effects
parentFix bug on crash if undefined LPE load (diff)
downloadinkscape-5151c0569bb266461c3b6a6325c0d4be60b41a67.tar.gz
inkscape-5151c0569bb266461c3b6a6325c0d4be60b41a67.zip
Fix bug #1694111 also fixes noumerous bugfixes on LPE undo. And shapes are improved to only perform path effet one time each
Fixed bugs: - https://launchpad.net/bugs/1694111 (bzr r15713)
Diffstat (limited to 'src/live_effects')
-rw-r--r--src/live_effects/effect.cpp11
-rw-r--r--src/live_effects/lpe-copy_rotate.cpp9
-rw-r--r--src/live_effects/lpe-mirror_symmetry.cpp1
-rw-r--r--src/live_effects/lpeobject.cpp1
4 files changed, 14 insertions, 8 deletions
diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp
index 3a628b243..21136353c 100644
--- a/src/live_effects/effect.cpp
+++ b/src/live_effects/effect.cpp
@@ -452,10 +452,13 @@ Effect::processObjects(LpeAction lpe_action)
std::vector<SPItem*> item_selected;
SPCSSAttr *css;
Glib::ustring css_str;
+ SPItem *item = SP_ITEM(elemref);
switch (lpe_action){
case LPE_TO_OBJECTS:
- if (SP_ITEM(elemref)->isHidden()) {
- elemref->deleteObject();
+ if (item->isHidden()) {
+ sp_object_ref(item, 0 );
+ item->deleteObject(true);
+ sp_object_unref(item);
} else {
if (elemnode->attribute("inkscape:path-effect")) {
sp_item_list_to_curves(item_list, item_selected, item_to_select);
@@ -465,7 +468,9 @@ Effect::processObjects(LpeAction lpe_action)
break;
case LPE_ERASE:
- elemref->deleteObject();
+ sp_object_ref(item, 0 );
+ item->deleteObject(true);
+ sp_object_unref(item);
break;
case LPE_VISIBILITY:
diff --git a/src/live_effects/lpe-copy_rotate.cpp b/src/live_effects/lpe-copy_rotate.cpp
index b29b5e493..3abcbf217 100644
--- a/src/live_effects/lpe-copy_rotate.cpp
+++ b/src/live_effects/lpe-copy_rotate.cpp
@@ -199,15 +199,13 @@ LPECopyRotate::cloneD(SPObject *orig, SPObject *dest, Geom::Affine transform, bo
}
}
SPShape * shape = SP_SHAPE(orig);
- SPPath * path = SP_PATH(dest);
- if (shape && !path) {
+ if (shape && !SP_IS_PATH(dest)) {
const char * id = dest->getId();
Inkscape::XML::Node *dest_node = sp_selected_item_to_curved_repr(SP_ITEM(dest), 0);
dest->updateRepr(xml_doc, dest_node, SP_OBJECT_WRITE_ALL);
dest->getRepr()->setAttribute("d", id);
- path = SP_PATH(dest);
}
- if (path && shape) {
+ if (SP_IS_PATH(dest) && shape) {
SPCurve *c = NULL;
if (root) {
c = new SPCurve();
@@ -216,7 +214,7 @@ LPECopyRotate::cloneD(SPObject *orig, SPObject *dest, Geom::Affine transform, bo
c = shape->getCurve();
}
if (c) {
- path->setCurve(c, TRUE);
+ SP_PATH(dest)->setCurve(c, TRUE);
c->unref();
} else {
dest->getRepr()->setAttribute("d", NULL);
@@ -725,6 +723,7 @@ LPECopyRotate::doOnRemove (SPLPEItem const* /*lpeitem*/)
//set "keep paths" hook on sp-lpe-item.cpp
if (keep_paths) {
processObjects(LPE_TO_OBJECTS);
+ items.clear();
return;
}
processObjects(LPE_ERASE);
diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp
index 3fcc4ae3d..5d80d65fe 100644
--- a/src/live_effects/lpe-mirror_symmetry.cpp
+++ b/src/live_effects/lpe-mirror_symmetry.cpp
@@ -320,6 +320,7 @@ LPEMirrorSymmetry::doOnRemove (SPLPEItem const* /*lpeitem*/)
//set "keep paths" hook on sp-lpe-item.cpp
if (keep_paths) {
processObjects(LPE_TO_OBJECTS);
+ items.clear();
return;
}
processObjects(LPE_ERASE);
diff --git a/src/live_effects/lpeobject.cpp b/src/live_effects/lpeobject.cpp
index b5b27c984..ca3ae46e0 100644
--- a/src/live_effects/lpeobject.cpp
+++ b/src/live_effects/lpeobject.cpp
@@ -112,6 +112,7 @@ void LivePathEffectObject::set(unsigned key, gchar const *value) {
this->effecttype_set = true;
} else {
this->effecttype = Inkscape::LivePathEffect::INVALID_LPE;
+ this->lpe = NULL;
this->effecttype_set = false;
}