diff --git a/src/sp-path.cpp b/src/sp-path.cpp
index b25397a31b99b1fbc2685292ab3f432e9d97c261..e16147b120ad0ef3d304564fbd7d251aaece2ba9 100644 (file)
--- a/src/sp-path.cpp
+++ b/src/sp-path.cpp
sp_nodes_in_path(SPPath *path)
{
SPCurve *curve = SP_SHAPE(path)->curve;
- if (!curve) return 0;
- gint r = curve->end;
- gint i = curve->length - 1;
- if (i > r) i = r; // sometimes after switching from node editor length is wrong, e.g. f6 - draw - f2 - tab - f1, this fixes it
- for (; i >= 0; i --)
- if (SP_CURVE_BPATH(curve)[i].code == NR_MOVETO)
- r --;
- return r;
+ if (!curve)
+ return 0;
+ return curve->nodes_in_path();
}
static gchar *
SPCurve *curve = SP_SHAPE(path)->curve;
if (!curve) return;
- NArtBpath *bpath = SP_CURVE_BPATH(curve);
+ NArtBpath const *bpath = SP_CURVE_BPATH(curve);
NR::Point last_pt;
NR::Point pt;
}
if ( shape->curve != NULL ) {
- NArtBpath *abp = shape->curve->first_bpath();
- if (abp) {
- gchar *str = sp_svg_write_path(abp);
- repr->setAttribute("d", str);
- g_free(str);
- } else {
- repr->setAttribute("d", "");
- }
+ gchar *str = sp_svg_write_path(shape->curve->get_pathvector());
+ repr->setAttribute("d", str);
+ g_free(str);
} else {
repr->setAttribute("d", NULL);
}
SPPath *path = (SPPath *) object;
if ( path->original_curve != NULL ) {
- NArtBpath *abp = path->original_curve->first_bpath();
- if (abp) {
- gchar *str = sp_svg_write_path(abp);
- repr->setAttribute("inkscape:original-d", str);
- g_free(str);
- } else {
- repr->setAttribute("inkscape:original-d", "");
- }
+ gchar *str = sp_svg_write_path(path->original_curve->get_pathvector());
+ repr->setAttribute("inkscape:original-d", str);
+ g_free(str);
} else {
repr->setAttribute("inkscape:original-d", NULL);
}
}
// Transform the original-d path or the (ordinary) path
- bool original_path = (bool)path->original_curve;
- SPCurve *srccurve = original_path ? path->original_curve : shape->curve;
- SPCurve *dstcurve = srccurve->copy();
- if (dstcurve) {
- dstcurve->transform(xform);
- if (original_path) {
- sp_path_set_original_curve(path, dstcurve, TRUE, true);
- } else {
- sp_shape_set_curve(shape, dstcurve, TRUE);
- }
- dstcurve->unref();
+ if (path->original_curve) {
+ path->original_curve->transform(xform);
+ sp_lpe_item_update_patheffect(path, true, true);
+ } else {
+ shape->curve->transform(xform);
}
// Adjust stroke
SPPath *path = (SPPath *) lpeitem;
if (path->original_curve) {
SPCurve *curve = path->original_curve->copy();
+ sp_shape_set_curve_insync(shape, curve, TRUE);
sp_lpe_item_perform_path_effect(SP_LPE_ITEM(shape), curve);
- sp_shape_set_curve(shape, curve, TRUE);
+ SP_OBJECT(shape)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
curve->unref();
if (write) {
// could also do SP_OBJECT(shape)->updateRepr(); but only the d attribute needs updating.
Inkscape::XML::Node *repr = SP_OBJECT_REPR(shape);
if ( shape->curve != NULL ) {
- NArtBpath *abp = shape->curve->first_bpath();
- if (abp) {
- gchar *str = sp_svg_write_path(abp);
- repr->setAttribute("d", str);
- g_free(str);
- } else {
- repr->setAttribute("d", "");
- }
+ gchar *str = sp_svg_write_path(shape->curve->get_pathvector());
+ repr->setAttribute("d", str);
+ g_free(str);
} else {
repr->setAttribute("d", NULL);
}
* Adds a original_curve to the path. If owner is specified, a reference
* will be made, otherwise the curve will be copied into the path.
* Any existing curve in the path will be unreferenced first.
- * This routine triggers reapplication of the an effect is present
- * an also triggers a request to update the display. Does not write
-* result to XML when write=false.
+ * This routine triggers reapplication of an effect if present
+ * and also triggers a request to update the display. Does not write
+ * result to XML when write=false.
*/
void
sp_path_set_original_curve (SPPath *path, SPCurve *curve, unsigned int owner, bool write)
@@ -463,7 +438,7 @@ sp_path_set_original_curve (SPPath *path, SPCurve *curve, unsigned int owner, bo
path->original_curve = curve->copy();
}
}
- sp_path_update_patheffect(path, write);
+ sp_lpe_item_update_patheffect(path, true, write);
SP_OBJECT(path)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
}