summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2008-08-07 17:45:53 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2008-08-07 17:45:53 +0000
commit238f18ff7d05d690b399da7cf62305cbf748700e (patch)
tree265f4bb08a1e63e65eed8cedc3f09e6d85921e3a /src
parentKhmer translation updated (diff)
downloadinkscape-238f18ff7d05d690b399da7cf62305cbf748700e.tar.gz
inkscape-238f18ff7d05d690b399da7cf62305cbf748700e.zip
try to make LPE optimizations easier. example in LPE Bend
(bzr r6584)
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/lpe-bendpath.cpp13
-rw-r--r--src/live_effects/lpe-bendpath.h3
-rw-r--r--src/live_effects/parameter/path.cpp16
-rw-r--r--src/live_effects/parameter/path.h4
4 files changed, 28 insertions, 8 deletions
diff --git a/src/live_effects/lpe-bendpath.cpp b/src/live_effects/lpe-bendpath.cpp
index 47d029d60..fb305130d 100644
--- a/src/live_effects/lpe-bendpath.cpp
+++ b/src/live_effects/lpe-bendpath.cpp
@@ -83,14 +83,19 @@ LPEBendPath::doBeforeEffect (SPLPEItem *lpeitem)
Geom::Piecewise<Geom::D2<Geom::SBasis> >
LPEBendPath::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_in)
{
+g_message("doEffect_pwd2");
using namespace Geom;
/* Much credit should go to jfb and mgsloan of lib2geom development for the code below! */
- Piecewise<D2<SBasis> > uskeleton = arc_length_parametrization(Piecewise<D2<SBasis> >(bend_path.get_pwd2()),2,.1);
- uskeleton = remove_short_cuts(uskeleton,.01);
- Piecewise<D2<SBasis> > n = rot90(derivative(uskeleton));
- n = force_continuity(remove_short_cuts(n,.1));
+ if (bend_path.changed) {
+ uskeleton = arc_length_parametrization(Piecewise<D2<SBasis> >(bend_path.get_pwd2()),2,.1);
+ uskeleton = remove_short_cuts(uskeleton,.01);
+ n = rot90(derivative(uskeleton));
+ n = force_continuity(remove_short_cuts(n,.1));
+
+ bend_path.changed = false;
+ }
D2<Piecewise<SBasis> > patternd2 = make_cuts_independent(pwd2_in);
Piecewise<SBasis> x = vertical_pattern.get_value() ? Piecewise<SBasis>(patternd2[1]) : Piecewise<SBasis>(patternd2[0]);
diff --git a/src/live_effects/lpe-bendpath.h b/src/live_effects/lpe-bendpath.h
index 1d3a9861e..20871bc0f 100644
--- a/src/live_effects/lpe-bendpath.h
+++ b/src/live_effects/lpe-bendpath.h
@@ -47,6 +47,9 @@ private:
BoolParam scale_y_rel;
BoolParam vertical_pattern;
+ Geom::Piecewise<Geom::D2<Geom::SBasis> > uskeleton;
+ Geom::Piecewise<Geom::D2<Geom::SBasis> > n;
+
void on_pattern_pasted();
LPEBendPath(const LPEBendPath&);
diff --git a/src/live_effects/parameter/path.cpp b/src/live_effects/parameter/path.cpp
index 68cb5cd63..84aadff3c 100644
--- a/src/live_effects/parameter/path.cpp
+++ b/src/live_effects/parameter/path.cpp
@@ -49,6 +49,7 @@ PathParam::PathParam( const Glib::ustring& label, const Glib::ustring& tip,
const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
Effect* effect, const gchar * default_value)
: Parameter(label, tip, key, wr, effect),
+ changed(true),
_pathvector(),
_pwd2(),
must_recalculate_pwd2(false),
@@ -119,7 +120,7 @@ PathParam::param_readSVGValue(const gchar * strvalue)
_pathvector = sp_svg_read_pathv(strvalue);
}
- signal_path_changed.emit();
+ emit_changed();
return true;
}
@@ -254,7 +255,7 @@ PathParam::set_new_value (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & newpa
} else {
_pwd2 = newpath;
must_recalculate_pwd2 = false;
- signal_path_changed.emit();
+ emit_changed();
}
}
@@ -282,7 +283,7 @@ PathParam::set_new_value (std::vector<Geom::Path> const &newpath, bool write_to_
param_write_to_repr(svgd);
g_free(svgd);
} else {
- signal_path_changed.emit();
+ emit_changed();
}
}
@@ -300,6 +301,13 @@ PathParam::ensure_pwd2()
}
void
+PathParam::emit_changed()
+{
+ changed = true;
+ signal_path_changed.emit();
+}
+
+void
PathParam::start_listening(SPObject * to)
{
if ( to == NULL ) {
@@ -364,7 +372,7 @@ PathParam::linked_modified(SPObject *linked_obj, guint /*flags*/)
}
must_recalculate_pwd2 = true;
- signal_path_changed.emit();
+ emit_changed();
SP_OBJECT(param_effect->getLPEObj())->requestModified(SP_OBJECT_MODIFIED_FLAG);
}
diff --git a/src/live_effects/parameter/path.h b/src/live_effects/parameter/path.h
index 76f3fa774..23ad51417 100644
--- a/src/live_effects/parameter/path.h
+++ b/src/live_effects/parameter/path.h
@@ -53,6 +53,8 @@ public:
sigc::signal <void> signal_path_pasted;
sigc::signal <void> signal_path_changed;
+ bool changed; /* this gets set whenever the path is changed (this is set to true, and then the signal_path_changed signal is emitted).
+ * the user must set it back to false if she wants to use it sensibly */
void paste_param_path(const char *svgd);
void on_paste_button_click();
@@ -80,6 +82,8 @@ protected:
void on_copy_button_click();
void on_link_button_click();
+ void emit_changed();
+
gchar * defvalue;
private: