Code

fix error in curve cxxtests
[inkscape.git] / src / sp-line.cpp
index a3964b171daed3db25feccb635b328c00ce6e346..d0ce32397d7ffe801b0447c7c5c8b39a902a42c7 100644 (file)
 #include "attributes.h"
 #include "style.h"
 #include "sp-line.h"
+#include "sp-guide.h"
 #include "display/curve.h"
 #include <glibmm/i18n.h>
 #include <libnr/nr-matrix-fns.h>
 #include <xml/repr.h>
 #include "document.h"
+#include "inkscape.h"
 
 static void sp_line_class_init (SPLineClass *klass);
 static void sp_line_init (SPLine *line);
@@ -35,6 +37,7 @@ static Geom::Matrix sp_line_set_transform(SPItem *item, Geom::Matrix const &xfor
 
 static void sp_line_update (SPObject *object, SPCtx *ctx, guint flags);
 static void sp_line_set_shape (SPShape *shape);
+static void sp_line_convert_to_guides(SPItem *item);
 
 static SPShapeClass *parent_class;
 
@@ -74,6 +77,7 @@ sp_line_class_init (SPLineClass *klass)
        SPItemClass *item_class = (SPItemClass *) klass;
        item_class->description = sp_line_description;
        item_class->set_transform = sp_line_set_transform;
+       item_class->convert_to_guides = sp_line_convert_to_guides;
 
        sp_object_class->update = sp_line_update;
 
@@ -142,13 +146,15 @@ sp_line_update (SPObject *object, SPCtx *ctx, guint flags)
                SPLine *line = SP_LINE (object);
 
                SPStyle const *style = object->style;
-               double const d = 1.0 / NR::expansion(((SPItemCtx const *) ctx)->i2vp);
+        SPItemCtx const *ictx = (SPItemCtx const *) ctx;
+        double const w = (ictx->vp.x1 - ictx->vp.x0);
+        double const h = (ictx->vp.y1 - ictx->vp.y0);
                double const em = style->font_size.computed;
                double const ex = em * 0.5;  // fixme: get from pango or libnrtype.
-               line->x1.update(em, ex, d);
-               line->x2.update(em, ex, d);
-               line->y1.update(em, ex, d);
-               line->y2.update(em, ex, d);
+               line->x1.update(em, ex, w);
+               line->x2.update(em, ex, w);
+               line->y1.update(em, ex, h);
+               line->y2.update(em, ex, h);
 
                sp_shape_set_shape ((SPShape *) object);
        }
@@ -188,6 +194,20 @@ sp_line_description(SPItem */*item*/)
     return g_strdup(_("<b>Line</b>"));
 }
 
+static void
+sp_line_convert_to_guides(SPItem *item)
+{
+       SPLine *line = SP_LINE(item);
+       Geom::Point points[2];
+
+       Geom::Matrix const i2d (sp_item_i2d_affine(item));
+
+       points[0] = Geom::Point(line->x1.computed, line->y1.computed)*i2d;
+       points[1] = Geom::Point(line->x2.computed, line->y2.computed)*i2d;
+
+       sp_guide_create(inkscape_active_desktop(), points[0], points[1]);
+}
+
 static Geom::Matrix
 sp_line_set_transform (SPItem *item, Geom::Matrix const &xform)
 {