diff --git a/src/sp-ellipse.cpp b/src/sp-ellipse.cpp
index 4b68a2ca6b14094e9cbf4294dcb1c1af40377e41..889e8b8ffc5d23885feaefbc7730f8305f32e508 100644 (file)
--- a/src/sp-ellipse.cpp
+++ b/src/sp-ellipse.cpp
#endif
-#include "libnr/n-art-bpath.h"
-#include "libnr/nr-path.h"
#include "libnr/nr-matrix-fns.h"
#include "svg/svg.h"
#include "svg/path-string.h"
#include "style.h"
#include "display/curve.h"
#include <glibmm/i18n.h>
+#include <2geom/transforms.h>
#include "document.h"
#include "sp-ellipse.h"
static void sp_genericellipse_set_shape(SPShape *shape);
static void sp_genericellipse_update_patheffect (SPLPEItem *lpeitem, bool write);
-static Inkscape::XML::Node *sp_genericellipse_write(SPObject *object, Inkscape::XML::Node *repr,
+static Inkscape::XML::Node *sp_genericellipse_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr,
guint flags);
static gboolean sp_arc_set_elliptical_path_attribute(SPArc *arc, Inkscape::XML::Node *repr);
#define C1 0.552
/* fixme: Think (Lauris) */
-
+/* Can't we use arcto in this method? */
static void sp_genericellipse_set_shape(SPShape *shape)
{
double rx, ry, s, e;
double x0, y0, x1, y1, x2, y2, x3, y3;
double len;
gint slice = FALSE;
- gint i;
+ // gint i;
SPGenericEllipse *ellipse = (SPGenericEllipse *) shape;
slice = TRUE;
}
- NR::Matrix aff = NR::Matrix(NR::scale(rx, ry));
- aff[4] = ellipse->cx.computed;
- aff[5] = ellipse->cy.computed;
-
- NArtBpath bpath[16];
- i = 0;
- if (ellipse->closed) {
- bpath[i].code = NR_MOVETO;
- } else {
- bpath[i].code = NR_MOVETO_OPEN;
- }
- bpath[i].x3 = cos(ellipse->start);
- bpath[i].y3 = sin(ellipse->start);
- i++;
+ SPCurve * curve = new SPCurve();
+ curve->moveto(cos(ellipse->start), sin(ellipse->start));
for (s = ellipse->start; s < ellipse->end; s += M_PI_2) {
e = s + M_PI_2;
g_print("step %d s %f e %f coords %f %f %f %f %f %f\n",
i, s, e, x1, y1, x2, y2, x3, y3);
#endif
- bpath[i].code = NR_CURVETO;
- bpath[i].x1 = x1;
- bpath[i].y1 = y1;
- bpath[i].x2 = x2;
- bpath[i].y2 = y2;
- bpath[i].x3 = x3;
- bpath[i].y3 = y3;
- i++;
+ curve->curveto(x1,y1, x2,y2, x3,y3);
}
- if (slice && ellipse->closed) {
- bpath[i].code = NR_LINETO;
- bpath[i].x3 = 0.0;
- bpath[i].y3 = 0.0;
- i++;
- bpath[i].code = NR_LINETO;
- bpath[i].x3 = bpath[0].x3;
- bpath[i].y3 = bpath[0].y3;
- i++;
- } else if (ellipse->closed) {
- bpath[i-1].x3 = bpath[0].x3;
- bpath[i-1].y3 = bpath[0].y3;
+ if (slice && ellipse->closed) { // TODO: is this check for "ellipse->closed" necessary?
+ curve->lineto(0., 0.);
+ }
+ if (ellipse->closed) {
+ curve->closepath();
}
- bpath[i].code = NR_END;
- SPCurve *c = SPCurve::new_from_bpath(nr_artpath_affine(bpath, aff));
- g_assert(c != NULL);
+ Geom::Matrix aff = Geom::Scale(rx, ry) * Geom::Translate(ellipse->cx.computed, ellipse->cy.computed);
+ curve->transform(aff);
- sp_lpe_item_perform_path_effect(SP_LPE_ITEM (ellipse), c);
- sp_shape_set_curve_insync((SPShape *) ellipse, c, TRUE);
- c->unref();
+ sp_lpe_item_perform_path_effect(SP_LPE_ITEM (ellipse), curve);
+ sp_shape_set_curve_insync((SPShape *) ellipse, curve, TRUE);
+ curve->unref();
}
static void sp_genericellipse_snappoints(SPItem const *item, SnapPointsIter p)
/* Now we keep: 0 <= start < end <= 2*PI */
}
-static Inkscape::XML::Node *sp_genericellipse_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+static Inkscape::XML::Node *sp_genericellipse_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
SPGenericEllipse *ellipse = SP_GENERICELLIPSE(object);
if (flags & SP_OBJECT_WRITE_EXT) {
if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(object));
repr = xml_doc->createElement("svg:path");
}
@@ -362,7 +333,7 @@ static Inkscape::XML::Node *sp_genericellipse_write(SPObject *object, Inkscape::
}
if (((SPObjectClass *) ge_parent_class)->write)
- ((SPObjectClass *) ge_parent_class)->write(object, repr, flags);
+ ((SPObjectClass *) ge_parent_class)->write(object, xml_doc, repr, flags);
return repr;
}
static void sp_ellipse_init(SPEllipse *ellipse);
static void sp_ellipse_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static Inkscape::XML::Node *sp_ellipse_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+static Inkscape::XML::Node *sp_ellipse_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
static void sp_ellipse_set(SPObject *object, unsigned int key, gchar const *value);
static gchar *sp_ellipse_description(SPItem *item);
@@ -434,14 +405,13 @@ sp_ellipse_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *re
}
static Inkscape::XML::Node *
-sp_ellipse_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+sp_ellipse_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
SPGenericEllipse *ellipse;
ellipse = SP_GENERICELLIPSE(object);
if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(object));
repr = xml_doc->createElement("svg:ellipse");
}
sp_repr_set_svg_double(repr, "ry", ellipse->ry.computed);
if (((SPObjectClass *) ellipse_parent_class)->write)
- (* ((SPObjectClass *) ellipse_parent_class)->write) (object, repr, flags);
+ (* ((SPObjectClass *) ellipse_parent_class)->write) (object, xml_doc, repr, flags);
return repr;
}
static void sp_circle_init(SPCircle *circle);
static void sp_circle_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static Inkscape::XML::Node *sp_circle_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+static Inkscape::XML::Node *sp_circle_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
static void sp_circle_set(SPObject *object, unsigned int key, gchar const *value);
static gchar *sp_circle_description(SPItem *item);
@@ -582,14 +552,13 @@ sp_circle_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *rep
}
static Inkscape::XML::Node *
-sp_circle_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+sp_circle_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
SPGenericEllipse *ellipse;
ellipse = SP_GENERICELLIPSE(object);
if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(object));
repr = xml_doc->createElement("svg:circle");
}
sp_repr_set_svg_double(repr, "r", ellipse->rx.computed);
if (((SPObjectClass *) circle_parent_class)->write)
- ((SPObjectClass *) circle_parent_class)->write(object, repr, flags);
+ ((SPObjectClass *) circle_parent_class)->write(object, xml_doc, repr, flags);
return repr;
}
static void sp_arc_init(SPArc *arc);
static void sp_arc_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
-static Inkscape::XML::Node *sp_arc_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+static Inkscape::XML::Node *sp_arc_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
static void sp_arc_set(SPObject *object, unsigned int key, gchar const *value);
static void sp_arc_modified(SPObject *object, guint flags);
}
static Inkscape::XML::Node *
-sp_arc_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+sp_arc_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags)
{
SPGenericEllipse *ge = SP_GENERICELLIPSE(object);
SPArc *arc = SP_ARC(object);
if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) {
- Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(object));
repr = xml_doc->createElement("svg:path");
}
sp_arc_set_elliptical_path_attribute(arc, repr);
if (((SPObjectClass *) arc_parent_class)->write)
- ((SPObjectClass *) arc_parent_class)->write(object, repr, flags);
+ ((SPObjectClass *) arc_parent_class)->write(object, xml_doc, repr, flags);
return repr;
}