diff options
| author | Diederik van Lierop <mailat-signdiedenrezidotnl> | 2010-09-25 13:01:50 +0000 |
|---|---|---|
| committer | Diederik van Lierop <mailat-signdiedenrezidotnl> | 2010-09-25 13:01:50 +0000 |
| commit | ef55eee4f799e4ea359ab918d91d8d318b9dc658 (patch) | |
| tree | 86037a081a0b7fd21fef1075fc7f4606ed5df6af /src | |
| parent | Addition to my previous commit: fix for trunk is a bit different from the fix... (diff) | |
| download | inkscape-ef55eee4f799e4ea359ab918d91d8d318b9dc658.tar.gz inkscape-ef55eee4f799e4ea359ab918d91d8d318b9dc658.zip | |
Implement snapping of vanishing points (LP #629333)
(bzr r9785)
Diffstat (limited to 'src')
| -rw-r--r-- | src/vanishing-point.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/vanishing-point.cpp b/src/vanishing-point.cpp index 78ceec467..5ee158234 100644 --- a/src/vanishing-point.cpp +++ b/src/vanishing-point.cpp @@ -22,6 +22,8 @@ #include "xml/repr.h" #include "perspective-line.h" #include "shape-editor.h" +#include "snap.h" +#include "sp-namedview.h" namespace Box3D { @@ -76,7 +78,7 @@ have_VPs_of_same_perspective (VPDragger *dr1, VPDragger *dr2) } static void -vp_knot_moved_handler (SPKnot */*knot*/, Geom::Point const *ppointer, guint state, gpointer data) +vp_knot_moved_handler (SPKnot *knot, Geom::Point const *ppointer, guint state, gpointer data) { VPDragger *dragger = (VPDragger *) data; VPDrag *drag = dragger->parent; @@ -170,10 +172,20 @@ vp_knot_moved_handler (SPKnot */*knot*/, Geom::Point const *ppointer, guint stat return; } } - } + // We didn't snap to another dragger, so we'll try a regular snap + SPDesktop *desktop = inkscape_active_desktop(); + SnapManager &m = desktop->namedview->snap_manager; + m.setup(desktop); + Inkscape::SnappedPoint s = m.freeSnap(Inkscape::SnapCandidatePoint(p, Inkscape::SNAPSOURCE_OTHER_HANDLE)); + m.unSetup(); + if (s.getSnapped()) { + p = s.getPoint(); + sp_knot_moveto(knot, p); + } + } - dragger->point = p; // FIXME: Brauchen wir dragger->point überhaupt? + dragger->point = p; // FIXME: Is dragger->point being used at all? dragger->updateVPs(p); dragger->updateBoxDisplays(); |
