Code

now that selection description includes style (filtered, clipped), we need to update...
[inkscape.git] / src / sp-rect.cpp
index 2f3fc1864acab40039b0c3e3f4d4144df0c1b160..c88b9eb38df0899f11d88a972de5f35f64e53f3a 100644 (file)
@@ -174,9 +174,8 @@ sp_rect_update(SPObject *object, SPCtx *ctx, guint flags)
         SPRect *rect = (SPRect *) object;
         SPStyle *style = object->style;
         SPItemCtx const *ictx = (SPItemCtx const *) ctx;
-        double const d = ictx->i2vp.descrim();
-        double const w = (ictx->vp.x1 - ictx->vp.x0) / d;
-        double const h = (ictx->vp.y1 - ictx->vp.y0) / d;
+        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 = 0.5 * em;  // fixme: get x height from pango or libnrtype.
         rect->x.update(em, ex, w);
@@ -556,6 +555,11 @@ static void sp_rect_snappoints(SPItem const *item, SnapPointsIter p, Inkscape::S
     g_assert(item != NULL);
     g_assert(SP_IS_RECT(item));
 
+    // Help enforcing strict snapping, i.e. only return nodes when we're snapping nodes to nodes or a guide to nodes
+       if (!(snapprefs->getSnapModeNode() || snapprefs->getSnapModeGuide())) {
+               return;
+       }
+
     SPRect *rect = SP_RECT(item);
 
     Geom::Matrix const i2d (sp_item_i2d_affine (item));
@@ -565,17 +569,24 @@ static void sp_rect_snappoints(SPItem const *item, SnapPointsIter p, Inkscape::S
     Geom::Point p2 = Geom::Point(rect->x.computed + rect->width.computed, rect->y.computed + rect->height.computed) * i2d;
     Geom::Point p3 = Geom::Point(rect->x.computed + rect->width.computed, rect->y.computed) * i2d;
 
-    *p = p0;
-    *p = p1;
-    *p = p2;
-    *p = p3;
-
-    if (snapprefs->getSnapMidpoints()) {
-       *p = (p0 + p1)/2;
-       *p = (p1 + p2)/2;
-       *p = (p2 + p3)/2;
-       *p = (p3 + p0)/2;
+    if (snapprefs->getSnapToItemNode()) {
+               *p = p0;
+               *p = p1;
+               *p = p2;
+               *p = p3;
     }
+
+       if (snapprefs->getSnapLineMidpoints()) { // only do this when we're snapping nodes (enforce strict snapping)
+               *p = (p0 + p1)/2;
+               *p = (p1 + p2)/2;
+               *p = (p2 + p3)/2;
+               *p = (p3 + p0)/2;
+       }
+
+       if (snapprefs->getSnapObjectMidpoints()) { // only do this when we're snapping nodes (enforce strict snapping)
+               *p = (p0 + p2)/2;
+       }
+
 }
 
 void