summaryrefslogtreecommitdiffstats
path: root/src/live_effects
diff options
context:
space:
mode:
authorJabiertxof <jtx@jtx>2017-01-02 12:16:31 +0000
committerJabiertxof <jtx@jtx>2017-01-02 12:16:31 +0000
commit64eef0b28d78cffd397816df0f9740a2e2f2cc34 (patch)
tree91bb8ae20f667d157fb9915453768c9612a7b5dc /src/live_effects
parentattemt to mirror (diff)
parentFix inverse clone (diff)
downloadinkscape-64eef0b28d78cffd397816df0f9740a2e2f2cc34.tar.gz
inkscape-64eef0b28d78cffd397816df0f9740a2e2f2cc34.zip
merge mirror improvements
(bzr r15295.1.43)
Diffstat (limited to 'src/live_effects')
-rw-r--r--src/live_effects/lpe-clone-original.cpp30
-rw-r--r--src/live_effects/lpe-clone-original.h1
-rw-r--r--src/live_effects/parameter/originalitem.cpp6
-rw-r--r--src/live_effects/parameter/originalitem.h3
4 files changed, 27 insertions, 13 deletions
diff --git a/src/live_effects/lpe-clone-original.cpp b/src/live_effects/lpe-clone-original.cpp
index 76cc56b8f..33abd685a 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"), "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,12 +134,12 @@ 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 {
+ if (inverse) {
c = shape_origin->getCurveBeforeLPE();
+ } else {
+ c = shape_origin->getCurve();
}
if (c) {
Geom::PathVector c_pv = c->get_pathvector();
@@ -157,11 +159,15 @@ 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);
}
}
- c_pv *= i2anc_affine(dest, sp_lpe_item);
+ if (inverse) {
+ c_pv *= i2anc_affine(origin, sp_lpe_item);
+ } else {
+ c_pv *= i2anc_affine(dest, sp_lpe_item);
+ }
c->set_pathvector(c_pv);
if (!path_origin) {
shape_dest->setCurveInsync(c, TRUE);
@@ -203,7 +209,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);
@@ -216,13 +221,18 @@ 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;
}
- cloneAttrbutes(linked_item.getObject(), SP_OBJECT(sp_lpe_item), true, attributes.param_getSVGValue(), style_attributes.param_getSVGValue(), true);
+ if (inverse) {
+ cloneAttrbutes(SP_OBJECT(sp_lpe_item), linked_item.getObject(), true, attributes.param_getSVGValue(), style_attributes.param_getSVGValue(), true);
+ } else {
+ cloneAttrbutes(linked_item.getObject(), SP_OBJECT(sp_lpe_item), true, attributes.param_getSVGValue(), style_attributes.param_getSVGValue(), true);
+ }
}
}
@@ -291,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/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/originalitem.cpp b/src/live_effects/parameter/originalitem.cpp
index 015fa0bd4..053062128 100644
--- a/src/live_effects/parameter/originalitem.cpp
+++ b/src/live_effects/parameter/originalitem.cpp
@@ -86,8 +86,10 @@ OriginalItemParam::param_newWidget()
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 9c67571e8..58d04e05a 100644
--- a/src/live_effects/parameter/originalitem.h
+++ b/src/live_effects/parameter/originalitem.h
@@ -23,7 +23,7 @@ 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(); }
@@ -36,6 +36,7 @@ protected:
void on_select_original_button_click();
private:
+ bool inverse;
OriginalItemParam(const OriginalItemParam&);
OriginalItemParam& operator=(const OriginalItemParam&);
};