diff --git a/src/sp-star.cpp b/src/sp-star.cpp
index 3c8754a1147ebd148b99fbb6e34c3198ab891edf..9cffd952ca2c72bb2ea91ec0b26ebdc4a9eb1933 100644 (file)
--- a/src/sp-star.cpp
+++ b/src/sp-star.cpp
#include "xml/repr.h"
#include "document.h"
+#include <2geom/pathvector.h>
+
#include "sp-star.h"
static void sp_star_class_init (SPStarClass *klass);
case SP_ATTR_SODIPODI_SIDES:
if (value) {
star->sides = atoi (value);
- star->sides = CLAMP (star->sides, 3, 1024);
+ star->sides = NR_CLAMP(star->sides, 3, 1024);
} else {
star->sides = 5;
}
{
SPStar *star = SP_STAR (shape);
+ // perhaps we should convert all our shapes into LPEs without source path
+ // and with knotholders for parameters, then this situation will be handled automatically
+ // by disabling the entire stack (including the shape LPE)
+ if (sp_lpe_item_has_broken_path_effect(SP_LPE_ITEM(shape))) {
+ g_warning ("The star shape has unknown LPE on it! Convert to path to make it editable preserving the appearance; editing it as star will remove the bad LPE");
+ if (SP_OBJECT_REPR(shape)->attribute("d")) {
+ // unconditionally read the curve from d, if any, to preserve appearance
+ Geom::PathVector pv = sp_svg_read_pathv(SP_OBJECT_REPR(shape)->attribute("d"));
+ SPCurve *cold = new SPCurve(pv);
+ sp_shape_set_curve_insync (shape, cold, TRUE);
+ cold->unref();
+ }
+ return;
+ }
+
SPCurve *c = new SPCurve ();
gint sides = star->sides;
bool success = sp_lpe_item_perform_path_effect(SP_LPE_ITEM (shape), c_lpe);
if (success) {
sp_shape_set_curve_insync (shape, c_lpe, TRUE);
- }
+ }
c_lpe->unref();
}
c->unref();
@@ -512,13 +529,13 @@ sp_star_position_set (SPStar *star, gint sides, Geom::Point center, gdouble r1,
g_return_if_fail (star != NULL);
g_return_if_fail (SP_IS_STAR (star));
- star->sides = CLAMP (sides, 3, 1024);
+ star->sides = NR_CLAMP(sides, 3, 1024);
star->center = center;
star->r[0] = MAX (r1, 0.001);
if (isflat == false) {
- star->r[1] = CLAMP (r2, 0.0, star->r[0]);
+ star->r[1] = NR_CLAMP(r2, 0.0, star->r[0]);
} else {
- star->r[1] = CLAMP ( r1*cos(M_PI/sides) ,0.0, star->r[0] );
+ star->r[1] = NR_CLAMP( r1*cos(M_PI/sides) ,0.0, star->r[0] );
}
star->arg[0] = arg1;
star->arg[1] = arg2;
}
}
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :