From 73d24d066094549193e1ceda7daa244e5c0dc1e8 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Tue, 28 Aug 2007 20:07:38 +0000 Subject: Implement snapping of guides while dragging them, and snap TO item centers (we only had snapping FROM item centers so far) (bzr r3603) --- src/snap.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/snap.cpp') diff --git a/src/snap.cpp b/src/snap.cpp index c585a9790..07e76362d 100644 --- a/src/snap.cpp +++ b/src/snap.cpp @@ -26,6 +26,8 @@ #include "inkscape.h" #include "desktop.h" +#include "sp-guide.h" +using std::vector; /** * Construct a SnapManager for a SPNamedView. @@ -145,6 +147,16 @@ bool SnapManager::getSnapModeNode() const return guide.getSnapFrom(Inkscape::Snapper::SNAPPOINT_NODE); } +void SnapManager::setSnapModeGuide(bool enabled) +{ + object.setSnapFrom(Inkscape::Snapper::SNAPPOINT_GUIDE, enabled); +} + +bool SnapManager::getSnapModeGuide() const +{ + return object.getSnapFrom(Inkscape::Snapper::SNAPPOINT_GUIDE); +} + /** * Try to snap a point to any interested snappers. * @@ -317,6 +329,21 @@ Inkscape::SnappedPoint SnapManager::constrainedSnap(Inkscape::Snapper::PointType return r; } +Inkscape::SnappedPoint SnapManager::guideSnap(NR::Point const &p, + SPGuide const &guide) const +{ + Inkscape::ObjectSnapper::DimensionToSnap snap_dim; + if (guide.normal == component_vectors[NR::Y]) { + snap_dim = Inkscape::ObjectSnapper::SNAP_Y; + } else if (guide.normal == component_vectors[NR::X]) { + snap_dim = Inkscape::ObjectSnapper::SNAP_X; + } else { + g_warning("WARNING: snapping of angled guides is not supported yet!"); + snap_dim = Inkscape::ObjectSnapper::SNAP_XY; + } + + return object.guideSnap(p, snap_dim); +} /** -- cgit v1.2.3