summaryrefslogtreecommitdiffstats
path: root/src/object-snapper.cpp
diff options
context:
space:
mode:
authorDiederik van Lierop <mail@diedenrezi.nl>2009-07-29 20:55:51 +0000
committerdvlierop2 <dvlierop2@users.sourceforge.net>2009-07-29 20:55:51 +0000
commit2400be6dd81349d88a004ad61be6aac7772bf750 (patch)
tree3f47b18238094ff0ed969a29518d7f44b0581451 /src/object-snapper.cpp
parentFix for bug LP #383244 (patch by Hannes Hochreiner) (diff)
downloadinkscape-2400be6dd81349d88a004ad61be6aac7772bf750.tar.gz
inkscape-2400be6dd81349d88a004ad61be6aac7772bf750.zip
Snap guides to intersections of curves too (see bug #405419)
(bzr r8361)
Diffstat (limited to 'src/object-snapper.cpp')
-rw-r--r--src/object-snapper.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp
index 5dd9350dc..aece2e9ec 100644
--- a/src/object-snapper.cpp
+++ b/src/object-snapper.cpp
@@ -296,6 +296,13 @@ void Inkscape::ObjectSnapper::_snapTranslatingGuideToNodes(SnappedConstraints &s
// Iterate through all nodes, find out which one is the closest to this guide, and snap to it!
_collectNodes(t, true);
+ // Although we won't snap to paths here (which would give us under constrained snaps) we can still snap to intersections of paths.
+ if (_snapmanager->snapprefs.getSnapToItemPath() || _snapmanager->snapprefs.getSnapToBBoxPath() || _snapmanager->snapprefs.getSnapToPageBorder()) {
+ _collectPaths(t, true);
+ _snapPaths(sc, t, p, SNAPSOURCE_GUIDE, true, NULL, NULL);
+ // The paths themselves should be discarded in findBestSnap(), as we should only snap to their intersections
+ }
+
SnappedPoint s;
Geom::Coord tol = getSnapperTolerance();
@@ -683,7 +690,7 @@ void Inkscape::ObjectSnapper::guideFreeSnap(SnappedConstraints &sc,
_findCandidates(sp_document_root(_snapmanager->getDocument()), &it, true, Geom::Rect(p, p), snap_dim, false, Geom::identity());
_snapTranslatingGuideToNodes(sc, Inkscape::SnapPreferences::SNAPPOINT_GUIDE, p, guide_normal);
- // _snapRotatingGuideToNodes has not been implemented yet.
+
}
// This method is used to snap the origin of a guide to nodes/paths, while dragging the origin along the guide
@@ -707,7 +714,7 @@ void Inkscape::ObjectSnapper::guideConstrainedSnap(SnappedConstraints &sc,
_findCandidates(sp_document_root(_snapmanager->getDocument()), &it, true, Geom::Rect(p, p), snap_dim, false, Geom::identity());
_snapTranslatingGuideToNodes(sc, Inkscape::SnapPreferences::SNAPPOINT_GUIDE, p, guide_normal);
- // _snapRotatingGuideToNodes has not been implemented yet.
+
}
/**
@@ -734,7 +741,8 @@ bool Inkscape::ObjectSnapper::GuidesMightSnap() const // almost the same as This
|| (_snapmanager->snapprefs.getSnapModeBBox() && _snapmanager->snapprefs.getSnapToBBoxNode())
|| (_snapmanager->snapprefs.getSnapModeBBox() && (_snapmanager->snapprefs.getSnapBBoxEdgeMidpoints() || _snapmanager->snapprefs.getSnapBBoxMidpoints()))
|| (_snapmanager->snapprefs.getSnapModeNode() && (_snapmanager->snapprefs.getSnapLineMidpoints() || _snapmanager->snapprefs.getSnapObjectMidpoints()))
- || (_snapmanager->snapprefs.getSnapModeNode() && _snapmanager->snapprefs.getIncludeItemCenter());
+ || (_snapmanager->snapprefs.getSnapModeNode() && _snapmanager->snapprefs.getIncludeItemCenter())
+ || (_snapmanager->snapprefs.getSnapModeNode() && (_snapmanager->snapprefs.getSnapToItemPath() && _snapmanager->snapprefs.getSnapIntersectionCS()));
return (_snap_enabled && _snapmanager->snapprefs.getSnapModeGuide() && snap_to_something);
}