summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2007-08-19 13:18:04 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2007-08-19 13:18:04 +0000
commitf32471079e3f6c4cbd223a7b5c4d164a9315a912 (patch)
treeb220212e020290d91adb89d6ae43057f80a00cd4 /src
parentAdded a PDF import settings dialog (diff)
downloadinkscape-f32471079e3f6c4cbd223a7b5c4d164a9315a912.tar.gz
inkscape-f32471079e3f6c4cbd223a7b5c4d164a9315a912.zip
* Fixed path-along-path with correct filling now! (2geom fix)
* sp_shape_update_effect is now called much less than before. (bzr r3524)
Diffstat (limited to 'src')
-rw-r--r--src/2geom/sbasis-to-bezier.cpp30
-rw-r--r--src/sp-shape.cpp12
2 files changed, 34 insertions, 8 deletions
diff --git a/src/2geom/sbasis-to-bezier.cpp b/src/2geom/sbasis-to-bezier.cpp
index e823b29ca..613c39288 100644
--- a/src/2geom/sbasis-to-bezier.cpp
+++ b/src/2geom/sbasis-to-bezier.cpp
@@ -184,7 +184,7 @@ path_from_sbasis(D2<SBasis> const &B, double tol) {
//TODO: some of this logic should be lifted into svg-path
std::vector<Geom::Path>
path_from_piecewise(Geom::Piecewise<Geom::D2<Geom::SBasis> > const &B, double tol) {
-
+/*
Geom::PathBuilder pb;
if(B.size() == 0) return pb.peek();
Geom::Point start = B[0].at0();
@@ -205,11 +205,39 @@ path_from_piecewise(Geom::Piecewise<Geom::D2<Geom::SBasis> > const &B, double to
if(i+1 >= B.size()) break;
start = B[i+1].at0();
pb.moveTo(start);
+ i++;
}
build_from_sbasis(pb, B[i], tol);
}
pb.finish();
return pb.peek();
+*/
+ Geom::PathBuilder pb;
+ if(B.size() == 0) return pb.peek();
+ Geom::Point start = B[0].at0();
+ pb.moveTo(start);
+ for(unsigned i = 0; ; i++) {
+ if(i+1 == B.size() || !near(B[i+1].at0(), B[i].at1(), tol)) {
+ //start of a new path
+ if(near(start, B[i].at1())) {
+ //it's closed
+ pb.closePath();
+ if(sbasis_size(B[i]) <= 1) {
+ //last line seg already there
+ goto no_add;
+ }
+ }
+ build_from_sbasis(pb, B[i], tol);
+ no_add:
+ if(i+1 >= B.size()) break;
+ start = B[i+1].at0();
+ pb.moveTo(start);
+ } else {
+ build_from_sbasis(pb, B[i], tol);
+ }
+ }
+ pb.finish();
+ return pb.peek();
}
};
diff --git a/src/sp-shape.cpp b/src/sp-shape.cpp
index 9d08fc58d..76fd37af1 100644
--- a/src/sp-shape.cpp
+++ b/src/sp-shape.cpp
@@ -234,7 +234,6 @@ static void
sp_shape_set(SPObject *object, unsigned int key, gchar const *value)
{
SPShape *shape = (SPShape *) object;
- bool path_effect_changed = false;
switch (key) {
case SP_ATTR_INKSCAPE_PATH_EFFECT:
@@ -256,10 +255,10 @@ sp_shape_set(SPObject *object, unsigned int key, gchar const *value)
shape->path_effect_ref->detach();
}
} else {
+ // Detach, which emits the changed signal.
shape->path_effect_ref->detach();
}
}
- path_effect_changed = true; // updated twice now when connected to changed signal??
break;
default:
if (((SPObjectClass *) parent_class)->set) {
@@ -267,9 +266,6 @@ sp_shape_set(SPObject *object, unsigned int key, gchar const *value)
}
break;
}
-
- if (path_effect_changed)
- sp_shape_update_patheffect ((SPShape *) object, false);
}
static Inkscape::XML::Node *
@@ -1138,6 +1134,9 @@ sp_shape_get_livepatheffectobject(SPShape *shape) {
void
sp_shape_update_patheffect (SPShape *shape, bool write)
{
+#ifdef SHAPE_VERBOSE
+ g_message("sp_shape_update_patheffect");
+#endif
g_return_if_fail (shape != NULL);
g_return_if_fail (SP_IS_SHAPE (shape));
@@ -1168,9 +1167,8 @@ lpeobject_ref_changed(SPObject *old_ref, SPObject *ref, SPShape *shape)
if ( IS_LIVEPATHEFFECT(ref) && ref != shape )
{
ref->connectModified(sigc::bind(sigc::ptr_fun(&lpeobject_ref_modified), shape));
+ lpeobject_ref_modified(ref, 0, shape);
}
-
- lpeobject_ref_modified(ref, 0, shape);
}
/**