From ba0a43458620f76e235fc9d61539582d7887311f Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Mon, 2 Jan 2017 00:30:14 +0100 Subject: attemt to mirror (bzr r15356.1.11) --- src/live_effects/lpe-clone-original.cpp | 26 +++++++++++++++++--------- src/live_effects/lpe-clone-original.h | 1 + src/live_effects/parameter/item.cpp | 26 ++++++++++++++++---------- src/live_effects/parameter/originalitem.cpp | 15 +++++++++++++++ src/live_effects/parameter/originalitem.h | 2 ++ 5 files changed, 51 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-clone-original.cpp b/src/live_effects/lpe-clone-original.cpp index 76cc56b8f..4fc74b275 100644 --- a/src/live_effects/lpe-clone-original.cpp +++ b/src/live_effects/lpe-clone-original.cpp @@ -24,6 +24,7 @@ LPECloneOriginal::LPECloneOriginal(LivePathEffectObject *lpeobject) : linked_item(_("Linked Item:"), _("Item from which to take the original data"), "linked_item", &wr, this), scale(_("Scale %"), _("Scale item %"), "scale", &wr, this, 100.0), preserve_position(_("Preserve position"), _("Preserve position"), "preserve_position", &wr, this, false), + inverse(_("Inverse clone"), _("Use LPE item as origin. Destructive"), "inverse", &wr, this, false), use_center(_("Relative center of element"), _("Relative center of element"), "use_center", &wr, this, true), attributes("Attributes linked", "Attributes linked", "attributes", &wr, this,""), style_attributes("Style attributes linked", "Style attributes linked", "style_attributes", &wr, this,"") @@ -34,6 +35,7 @@ LPECloneOriginal::LPECloneOriginal(LivePathEffectObject *lpeobject) : registerParameter(&attributes); registerParameter(&style_attributes); registerParameter(&preserve_position); + registerParameter(&inverse); registerParameter(&use_center); scale.param_set_range(0.01, 999999.0); scale.param_set_increments(1, 1); @@ -132,13 +134,9 @@ LPECloneOriginal::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, co } else { SP_ITEM(dest)->getRepr()->setAttribute("transform",sp_svg_transform_write(affine_origin)); } - } else if ( shape_dest && shape_origin && live && (std::strcmp(attribute, "d") == 0 || std::strcmp(attribute, "inkscape:original-d") == 0)) { + } else if ( shape_dest && shape_origin && live && (std::strcmp(attribute, "d") == 0)) { SPCurve *c = NULL; - if (std::strcmp(attribute, "d") == 0) { - c = shape_origin->getCurve(); - } else { - c = shape_origin->getCurveBeforeLPE(); - } + c = shape_origin->getCurve(); if (c) { Geom::PathVector c_pv = c->get_pathvector(); Geom::OptRect orig_bbox = SP_ITEM(origin)->geometricBounds(); @@ -161,7 +159,12 @@ LPECloneOriginal::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, co c_pv *= Geom::Translate(dest_point - orig_point); } } - c_pv *= i2anc_affine(dest, sp_lpe_item); + if (inverse) { + c_pv *= i2anc_affine(origin, sp_lpe_item); + origin->getRepr()->setAttribute("inkscape:original-d", sp_svg_write_path(c_pv)); + } else { + c_pv *= i2anc_affine(dest, sp_lpe_item); + } c->set_pathvector(c_pv); if (!path_origin) { shape_dest->setCurveInsync(c, TRUE); @@ -203,7 +206,6 @@ LPECloneOriginal::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, co void LPECloneOriginal::doBeforeEffect (SPLPEItem const* lpeitem){ - original_bbox(lpeitem); if (linked_path.linksToPath()) { //Legacy staff Glib::ustring attributes_value("d"); attributes.param_setValue(attributes_value); @@ -222,7 +224,13 @@ LPECloneOriginal::doBeforeEffect (SPLPEItem const* lpeitem){ } preserve_position_changed = preserve_position; } - cloneAttrbutes(linked_item.getObject(), SP_OBJECT(sp_lpe_item), true, attributes.param_getSVGValue(), style_attributes.param_getSVGValue(), true); + if (inverse) { + linked_item.param_quit_listening(); + cloneAttrbutes(SP_OBJECT(sp_lpe_item), linked_item.getObject(), true, attributes.param_getSVGValue(), style_attributes.param_getSVGValue(), true); + } else { + linked_item.param_start_listening(linked_item.getObject()); + cloneAttrbutes(linked_item.getObject(), SP_OBJECT(sp_lpe_item), true, attributes.param_getSVGValue(), style_attributes.param_getSVGValue(), true); + } } } diff --git a/src/live_effects/lpe-clone-original.h b/src/live_effects/lpe-clone-original.h index 064fe84b2..aad6e9fa9 100644 --- a/src/live_effects/lpe-clone-original.h +++ b/src/live_effects/lpe-clone-original.h @@ -36,6 +36,7 @@ private: OriginalItemParam linked_item; ScalarParam scale; BoolParam preserve_position; + BoolParam inverse; BoolParam use_center; TextParam attributes; TextParam style_attributes; diff --git a/src/live_effects/parameter/item.cpp b/src/live_effects/parameter/item.cpp index 8caea4e26..0a46ec7ce 100644 --- a/src/live_effects/parameter/item.cpp +++ b/src/live_effects/parameter/item.cpp @@ -135,25 +135,31 @@ ItemParam::addCanvasIndicators(SPLPEItem const*/*lpeitem*/, std::vectorconnectDelete(sigc::mem_fun(*this, &ItemParam::linked_delete)); - linked_modified_connection = to->connectModified(sigc::mem_fun(*this, &ItemParam::linked_modified)); - if (SP_IS_ITEM(to)) { - linked_transformed_connection = SP_ITEM(to)->connectTransformed(sigc::mem_fun(*this, &ItemParam::linked_transformed)); + if (!linked_delete_connection.connected() || force) { + std::cout << "111111111111111111\n"; + linked_delete_connection = to->connectDelete(sigc::mem_fun(*this, &ItemParam::linked_delete)); + linked_modified_connection = to->connectModified(sigc::mem_fun(*this, &ItemParam::linked_modified)); + if (SP_IS_ITEM(to)) { + linked_transformed_connection = SP_ITEM(to)->connectTransformed(sigc::mem_fun(*this, &ItemParam::linked_transformed)); + } + linked_modified(to, SP_OBJECT_MODIFIED_FLAG); // simulate linked_modified signal, so that path data is updated } - linked_modified(to, SP_OBJECT_MODIFIED_FLAG); // simulate linked_modified signal, so that path data is updated } void ItemParam::quit_listening(void) { - linked_modified_connection.disconnect(); - linked_delete_connection.disconnect(); - linked_transformed_connection.disconnect(); + if (linked_delete_connection.connected()) { + std::cout << "2222222222222222222222\n"; + linked_modified_connection.disconnect(); + linked_delete_connection.disconnect(); + linked_transformed_connection.disconnect(); + } } void @@ -161,7 +167,7 @@ ItemParam::ref_changed(SPObject */*old_ref*/, SPObject *new_ref) { quit_listening(); if ( new_ref ) { - start_listening(new_ref); + start_listening(new_ref, true); } } diff --git a/src/live_effects/parameter/originalitem.cpp b/src/live_effects/parameter/originalitem.cpp index 015fa0bd4..dc7f2d634 100644 --- a/src/live_effects/parameter/originalitem.cpp +++ b/src/live_effects/parameter/originalitem.cpp @@ -83,6 +83,21 @@ OriginalItemParam::param_newWidget() return dynamic_cast (_widget); } +void +OriginalItemParam::param_start_listening(SPObject * to) +{ + if ( to == NULL ) { + return; + } + start_listening(to, false); +} + +void +OriginalItemParam::param_quit_listening(void) +{ + quit_listening(); +} + void OriginalItemParam::linked_modified_callback(SPObject *linked_obj, guint /*flags*/) { diff --git a/src/live_effects/parameter/originalitem.h b/src/live_effects/parameter/originalitem.h index 9c67571e8..5478a1e4b 100644 --- a/src/live_effects/parameter/originalitem.h +++ b/src/live_effects/parameter/originalitem.h @@ -26,6 +26,8 @@ public: bool linksToItem() const { return (href != NULL); } SPItem * getObject() const { return ref.getObject(); } + void param_start_listening(SPObject * to); + void param_quit_listening(void); virtual Gtk::Widget * param_newWidget(); -- cgit v1.2.3 From 0a19b6fbad1ada089488541e60f195a0943c01a8 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Mon, 2 Jan 2017 13:14:36 +0100 Subject: Fix inverse clone (bzr r15356.1.12) --- src/live_effects/lpe-clone-original.cpp | 18 ++++++++++-------- src/live_effects/parameter/item.cpp | 26 ++++++++++---------------- src/live_effects/parameter/originalitem.cpp | 21 ++++----------------- src/live_effects/parameter/originalitem.h | 5 ++--- 4 files changed, 26 insertions(+), 44 deletions(-) (limited to 'src') diff --git a/src/live_effects/lpe-clone-original.cpp b/src/live_effects/lpe-clone-original.cpp index 4fc74b275..33abd685a 100644 --- a/src/live_effects/lpe-clone-original.cpp +++ b/src/live_effects/lpe-clone-original.cpp @@ -24,7 +24,7 @@ LPECloneOriginal::LPECloneOriginal(LivePathEffectObject *lpeobject) : linked_item(_("Linked Item:"), _("Item from which to take the original data"), "linked_item", &wr, this), scale(_("Scale %"), _("Scale item %"), "scale", &wr, this, 100.0), preserve_position(_("Preserve position"), _("Preserve position"), "preserve_position", &wr, this, false), - inverse(_("Inverse clone"), _("Use LPE item as origin. Destructive"), "inverse", &wr, this, false), + inverse(_("Inverse clone"), _("Use LPE item as origin"), "inverse", &wr, this, false), use_center(_("Relative center of element"), _("Relative center of element"), "use_center", &wr, this, true), attributes("Attributes linked", "Attributes linked", "attributes", &wr, this,""), style_attributes("Style attributes linked", "Style attributes linked", "style_attributes", &wr, this,"") @@ -136,7 +136,11 @@ LPECloneOriginal::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, co } } else if ( shape_dest && shape_origin && live && (std::strcmp(attribute, "d") == 0)) { SPCurve *c = NULL; - c = shape_origin->getCurve(); + if (inverse) { + c = shape_origin->getCurveBeforeLPE(); + } else { + c = shape_origin->getCurve(); + } if (c) { Geom::PathVector c_pv = c->get_pathvector(); Geom::OptRect orig_bbox = SP_ITEM(origin)->geometricBounds(); @@ -155,13 +159,12 @@ LPECloneOriginal::cloneAttrbutes(SPObject *origin, SPObject *dest, bool live, co c_pv *= scale; c_pv *= Geom::Translate(orig_point); } - if (preserve_position && hasLinkedTransform(attributes)) { + if (preserve_position) { c_pv *= Geom::Translate(dest_point - orig_point); } } if (inverse) { c_pv *= i2anc_affine(origin, sp_lpe_item); - origin->getRepr()->setAttribute("inkscape:original-d", sp_svg_write_path(c_pv)); } else { c_pv *= i2anc_affine(dest, sp_lpe_item); } @@ -218,17 +221,16 @@ LPECloneOriginal::doBeforeEffect (SPLPEItem const* lpeitem){ } if (linked_item.linksToItem()) { - if ( preserve_position_changed != preserve_position ) { + linked_item.setInverse(inverse); + if ( preserve_position_changed != preserve_position ) { if (!preserve_position) { sp_svg_transform_read(SP_ITEM(sp_lpe_item)->getAttribute("transform"), &preserve_affine); } preserve_position_changed = preserve_position; } if (inverse) { - linked_item.param_quit_listening(); cloneAttrbutes(SP_OBJECT(sp_lpe_item), linked_item.getObject(), true, attributes.param_getSVGValue(), style_attributes.param_getSVGValue(), true); } else { - linked_item.param_start_listening(linked_item.getObject()); cloneAttrbutes(linked_item.getObject(), SP_OBJECT(sp_lpe_item), true, attributes.param_getSVGValue(), style_attributes.param_getSVGValue(), true); } } @@ -299,7 +301,7 @@ LPECloneOriginal::transform_multiply(Geom::Affine const& postmul, bool set) void LPECloneOriginal::doEffect (SPCurve * curve) { - if (linked_item.linksToItem()) { + if (linked_item.linksToItem() && !inverse) { SPShape * shape = getCurrentShape(); if(shape){ curve->set_pathvector(shape->getCurve()->get_pathvector()); diff --git a/src/live_effects/parameter/item.cpp b/src/live_effects/parameter/item.cpp index 0a46ec7ce..8caea4e26 100644 --- a/src/live_effects/parameter/item.cpp +++ b/src/live_effects/parameter/item.cpp @@ -135,31 +135,25 @@ ItemParam::addCanvasIndicators(SPLPEItem const*/*lpeitem*/, std::vectorconnectDelete(sigc::mem_fun(*this, &ItemParam::linked_delete)); - linked_modified_connection = to->connectModified(sigc::mem_fun(*this, &ItemParam::linked_modified)); - if (SP_IS_ITEM(to)) { - linked_transformed_connection = SP_ITEM(to)->connectTransformed(sigc::mem_fun(*this, &ItemParam::linked_transformed)); - } - linked_modified(to, SP_OBJECT_MODIFIED_FLAG); // simulate linked_modified signal, so that path data is updated + linked_delete_connection = to->connectDelete(sigc::mem_fun(*this, &ItemParam::linked_delete)); + linked_modified_connection = to->connectModified(sigc::mem_fun(*this, &ItemParam::linked_modified)); + if (SP_IS_ITEM(to)) { + linked_transformed_connection = SP_ITEM(to)->connectTransformed(sigc::mem_fun(*this, &ItemParam::linked_transformed)); } + linked_modified(to, SP_OBJECT_MODIFIED_FLAG); // simulate linked_modified signal, so that path data is updated } void ItemParam::quit_listening(void) { - if (linked_delete_connection.connected()) { - std::cout << "2222222222222222222222\n"; - linked_modified_connection.disconnect(); - linked_delete_connection.disconnect(); - linked_transformed_connection.disconnect(); - } + linked_modified_connection.disconnect(); + linked_delete_connection.disconnect(); + linked_transformed_connection.disconnect(); } void @@ -167,7 +161,7 @@ ItemParam::ref_changed(SPObject */*old_ref*/, SPObject *new_ref) { quit_listening(); if ( new_ref ) { - start_listening(new_ref, true); + start_listening(new_ref); } } diff --git a/src/live_effects/parameter/originalitem.cpp b/src/live_effects/parameter/originalitem.cpp index dc7f2d634..053062128 100644 --- a/src/live_effects/parameter/originalitem.cpp +++ b/src/live_effects/parameter/originalitem.cpp @@ -83,26 +83,13 @@ OriginalItemParam::param_newWidget() return dynamic_cast (_widget); } -void -OriginalItemParam::param_start_listening(SPObject * to) -{ - if ( to == NULL ) { - return; - } - start_listening(to, false); -} - -void -OriginalItemParam::param_quit_listening(void) -{ - quit_listening(); -} - void OriginalItemParam::linked_modified_callback(SPObject *linked_obj, guint /*flags*/) { - emit_changed(); - SP_OBJECT(param_effect->getLPEObj())->requestModified(SP_OBJECT_MODIFIED_FLAG); + if (!inverse) { + emit_changed(); + SP_OBJECT(param_effect->getLPEObj())->requestModified(SP_OBJECT_MODIFIED_FLAG); + } } void diff --git a/src/live_effects/parameter/originalitem.h b/src/live_effects/parameter/originalitem.h index 5478a1e4b..58d04e05a 100644 --- a/src/live_effects/parameter/originalitem.h +++ b/src/live_effects/parameter/originalitem.h @@ -23,11 +23,9 @@ public: Inkscape::UI::Widget::Registry* wr, Effect* effect); virtual ~OriginalItemParam(); - + void setInverse(bool inversed) { inverse = inversed; } bool linksToItem() const { return (href != NULL); } SPItem * getObject() const { return ref.getObject(); } - void param_start_listening(SPObject * to); - void param_quit_listening(void); virtual Gtk::Widget * param_newWidget(); @@ -38,6 +36,7 @@ protected: void on_select_original_button_click(); private: + bool inverse; OriginalItemParam(const OriginalItemParam&); OriginalItemParam& operator=(const OriginalItemParam&); }; -- cgit v1.2.3