summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabiertxo Arraiza Cenoz <jtx@jtx-desktop.markerlab.es>2017-09-08 20:28:13 +0000
committerJabiertxo Arraiza Cenoz <jtx@jtx-desktop.markerlab.es>2017-09-08 20:28:13 +0000
commit1f0a20e9f4270de3aff4b9ce0484e1d26c6d58da (patch)
treeea5e92cebc8f3b38f9e607653095b2dde24ecff9 /src
parentCI/AppVeyor: now compiles with poppler 0.59 (diff)
downloadinkscape-1f0a20e9f4270de3aff4b9ce0484e1d26c6d58da.tar.gz
inkscape-1f0a20e9f4270de3aff4b9ce0484e1d26c6d58da.zip
Fix for bug: 1715433 :: Clone original LPE can no longer be used to fill a powerstroke path
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/lpe-fill-between-many.cpp1
-rw-r--r--src/live_effects/parameter/originalpath.cpp7
-rw-r--r--src/live_effects/parameter/originalpath.h2
-rw-r--r--src/live_effects/parameter/originalpatharray.cpp28
-rw-r--r--src/live_effects/parameter/originalpatharray.h5
-rw-r--r--src/live_effects/parameter/path.cpp7
-rw-r--r--src/live_effects/parameter/path.h2
7 files changed, 49 insertions, 3 deletions
diff --git a/src/live_effects/lpe-fill-between-many.cpp b/src/live_effects/lpe-fill-between-many.cpp
index 40fa91c68..ded8819fc 100644
--- a/src/live_effects/lpe-fill-between-many.cpp
+++ b/src/live_effects/lpe-fill-between-many.cpp
@@ -31,6 +31,7 @@ LPEFillBetweenMany::LPEFillBetweenMany(LivePathEffectObject *lpeobject) :
registerParameter(&join);
registerParameter(&close);
transformmultiply = false;
+ linked_paths.allowOnlyBsplineSpiro(true);
}
LPEFillBetweenMany::~LPEFillBetweenMany()
diff --git a/src/live_effects/parameter/originalpath.cpp b/src/live_effects/parameter/originalpath.cpp
index 62483d7fb..3f833d2ac 100644
--- a/src/live_effects/parameter/originalpath.cpp
+++ b/src/live_effects/parameter/originalpath.cpp
@@ -36,6 +36,7 @@ OriginalPathParam::OriginalPathParam( const Glib::ustring& label, const Glib::us
: PathParam(label, tip, key, wr, effect, "")
{
oncanvas_editable = false;
+ _from_original_d = false;
}
OriginalPathParam::~OriginalPathParam()
@@ -90,7 +91,11 @@ OriginalPathParam::linked_modified_callback(SPObject *linked_obj, guint /*flags*
{
SPCurve *curve = NULL;
if (SP_IS_SHAPE(linked_obj)) {
- curve = SP_SHAPE(linked_obj)->getCurve();
+ if (_from_original_d) {
+ curve = SP_SHAPE(linked_obj)->getCurveBeforeLPE();
+ } else {
+ curve = SP_SHAPE(linked_obj)->getCurve();
+ }
}
if (SP_IS_TEXT(linked_obj)) {
curve = SP_TEXT(linked_obj)->getNormalizedBpath();
diff --git a/src/live_effects/parameter/originalpath.h b/src/live_effects/parameter/originalpath.h
index b3feec41f..ec80d1026 100644
--- a/src/live_effects/parameter/originalpath.h
+++ b/src/live_effects/parameter/originalpath.h
@@ -32,6 +32,7 @@ public:
virtual void param_editOncanvas(SPItem * /*item*/, SPDesktop * /*dt*/) {};
/** Disable the canvas indicators of parent class by overriding this method */
virtual void addCanvasIndicators(SPLPEItem const* /*lpeitem*/, std::vector<Geom::PathVector> & /*hp_vec*/) {};
+ void setFromOriginalD(bool from_original_d){ _from_original_d = from_original_d; };
protected:
virtual void linked_modified_callback(SPObject *linked_obj, guint flags);
@@ -40,6 +41,7 @@ protected:
void on_select_original_button_click();
private:
+ bool _from_original_d;
OriginalPathParam(const OriginalPathParam&);
OriginalPathParam& operator=(const OriginalPathParam&);
};
diff --git a/src/live_effects/parameter/originalpatharray.cpp b/src/live_effects/parameter/originalpatharray.cpp
index 92859de05..2513a0d5e 100644
--- a/src/live_effects/parameter/originalpatharray.cpp
+++ b/src/live_effects/parameter/originalpatharray.cpp
@@ -9,6 +9,10 @@
#endif
#include "live_effects/parameter/originalpatharray.h"
+#include "live_effects/lpe-spiro.h"
+#include "live_effects/lpe-bspline.h"
+#include "live_effects/lpeobject.h"
+#include "live_effects/lpeobject-reference.h"
#include <gtkmm/widget.h>
#include <gtkmm/icontheme.h>
@@ -100,6 +104,8 @@ OriginalPathArrayParam::OriginalPathArrayParam( const Glib::ustring& label,
//_scroller.set_shadow_type(Gtk::SHADOW_IN);
oncanvas_editable = true;
+ _from_original_d = false;
+ _allow_only_bspline_spiro = false;
}
@@ -389,7 +395,27 @@ void OriginalPathArrayParam::setPathVector(SPObject *linked_obj, guint /*flags*/
}
SPCurve *curve = NULL;
if (SP_IS_SHAPE(linked_obj)) {
- curve = SP_SHAPE(linked_obj)->getCurve();
+ SPLPEItem * lpe_item = SP_LPE_ITEM(linked_obj);
+ if (_from_original_d) {
+ curve = SP_SHAPE(linked_obj)->getCurveBeforeLPE();
+ } else if (_allow_only_bspline_spiro && lpe_item && lpe_item->hasPathEffect()){
+ curve = SP_SHAPE(linked_obj)->getCurveBeforeLPE();
+ PathEffectList lpelist = lpe_item->getEffectList();
+ PathEffectList::iterator i;
+ for (i = lpelist.begin(); i != lpelist.end(); ++i) {
+ LivePathEffectObject *lpeobj = (*i)->lpeobject;
+ if (lpeobj) {
+ Inkscape::LivePathEffect::Effect *lpe = lpeobj->get_lpe();
+ if (dynamic_cast<Inkscape::LivePathEffect::LPEBSpline *>(lpe)) {
+ LivePathEffect::sp_bspline_do_effect(curve, 0);
+ } else if (dynamic_cast<Inkscape::LivePathEffect::LPESpiro *>(lpe)) {
+ LivePathEffect::sp_spiro_do_effect(curve);
+ }
+ }
+ }
+ } else {
+ curve = SP_SHAPE(linked_obj)->getCurve();
+ }
}
if (SP_IS_TEXT(linked_obj)) {
curve = SP_TEXT(linked_obj)->getNormalizedBpath();
diff --git a/src/live_effects/parameter/originalpatharray.h b/src/live_effects/parameter/originalpatharray.h
index fe9371644..eb1114c3f 100644
--- a/src/live_effects/parameter/originalpatharray.h
+++ b/src/live_effects/parameter/originalpatharray.h
@@ -70,6 +70,9 @@ public:
virtual void param_editOncanvas(SPItem * /*item*/, SPDesktop * /*dt*/) {};
/** Disable the canvas indicators of parent class by overriding this method */
virtual void addCanvasIndicators(SPLPEItem const* /*lpeitem*/, std::vector<Geom::PathVector> & /*hp_vec*/) {};
+ void setFromOriginalD(bool from_original_d){ _from_original_d = from_original_d; };
+ void allowOnlyBsplineSpiro(bool allow_only_bspline_spiro){ _allow_only_bspline_spiro = allow_only_bspline_spiro; };
+
std::vector<PathAndDirection*> _vector;
protected:
@@ -99,6 +102,8 @@ protected:
void on_reverse_toggled(const Glib::ustring& path);
private:
+ bool _from_original_d;
+ bool _allow_only_bspline_spiro;
OriginalPathArrayParam(const OriginalPathArrayParam&);
OriginalPathArrayParam& operator=(const OriginalPathArrayParam&);
};
diff --git a/src/live_effects/parameter/path.cpp b/src/live_effects/parameter/path.cpp
index ec011b855..470535314 100644
--- a/src/live_effects/parameter/path.cpp
+++ b/src/live_effects/parameter/path.cpp
@@ -68,6 +68,7 @@ PathParam::PathParam( const Glib::ustring& label, const Glib::ustring& tip,
defvalue = g_strdup(default_value);
param_readSVGValue(defvalue);
oncanvas_editable = true;
+ _from_original_d = false;
_edit_button = true;
_copy_button = true;
_paste_button = true;
@@ -444,7 +445,11 @@ PathParam::linked_modified_callback(SPObject *linked_obj, guint /*flags*/)
{
SPCurve *curve = NULL;
if (SP_IS_SHAPE(linked_obj)) {
- curve = SP_SHAPE(linked_obj)->getCurve();
+ if (_from_original_d) {
+ curve = SP_SHAPE(linked_obj)->getCurveBeforeLPE();
+ } else {
+ curve = SP_SHAPE(linked_obj)->getCurve();
+ }
}
if (SP_IS_TEXT(linked_obj)) {
curve = SP_TEXT(linked_obj)->getNormalizedBpath();
diff --git a/src/live_effects/parameter/path.h b/src/live_effects/parameter/path.h
index ff5e4f1b8..c8efb11e0 100644
--- a/src/live_effects/parameter/path.h
+++ b/src/live_effects/parameter/path.h
@@ -50,6 +50,7 @@ public:
virtual void addCanvasIndicators(SPLPEItem const* lpeitem, std::vector<Geom::PathVector> &hp_vec);
virtual void param_transform_multiply(Geom::Affine const& /*postmul*/, bool /*set*/);
+ void setFromOriginalD(bool from_original_d){ _from_original_d = from_original_d; };
sigc::signal <void> signal_path_pasted;
sigc::signal <void> signal_path_changed;
@@ -91,6 +92,7 @@ protected:
gchar * defvalue;
private:
+ bool _from_original_d;
bool _edit_button;
bool _copy_button;
bool _paste_button;