diff options
| author | Diederik van Lierop <mail@diedenrezi.nl> | 2015-05-30 18:27:42 +0000 |
|---|---|---|
| committer | Diederik van Lierop <mail@diedenrezi.nl> | 2015-05-30 18:27:42 +0000 |
| commit | c4c42ebb66d55ca883ed93b2a72d26cd8a759a6d (patch) | |
| tree | 37b2f5771b29ccd54c1d1428501266d5bba6057f /src/ui/tool/curve-drag-point.cpp | |
| parent | Updating gtest version with newer attributes. (diff) | |
| download | inkscape-c4c42ebb66d55ca883ed93b2a72d26cd8a759a6d.tar.gz inkscape-c4c42ebb66d55ca883ed93b2a72d26cd8a759a6d.zip | |
Snapping in node tool now also works when:
- when double clicking to insert a node on a path
- when dragging a part of the path to deform it
Fixed bugs:
- https://launchpad.net/bugs/1448859
(bzr r14189)
Diffstat (limited to 'src/ui/tool/curve-drag-point.cpp')
| -rw-r--r-- | src/ui/tool/curve-drag-point.cpp | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/ui/tool/curve-drag-point.cpp b/src/ui/tool/curve-drag-point.cpp index 23640456e..d1756fa2c 100644 --- a/src/ui/tool/curve-drag-point.cpp +++ b/src/ui/tool/curve-drag-point.cpp @@ -15,6 +15,8 @@ #include "ui/tool/multi-path-manipulator.h" #include "ui/tool/path-manipulator.h" #include "ui/tool/node.h" +#include "sp-namedview.h" +#include "snap.h" namespace Inkscape { namespace UI { @@ -77,6 +79,16 @@ void CurveDragPoint::dragged(Geom::Point &new_pos, GdkEventMotion *event) return; } + if (_drag_initiated && !(event->state & GDK_SHIFT_MASK)) { + SnapManager &m = _desktop->namedview->snap_manager; + SPItem *path = static_cast<SPItem *>(_pm._path); + m.setup(_desktop, true, path); // We will not try to snap to "path" itself + Inkscape::SnapCandidatePoint scp(new_pos, Inkscape::SNAPSOURCE_OTHER_HANDLE); + Inkscape::SnappedPoint sp = m.freeSnap(scp, Geom::OptRect(), false); + new_pos = sp.getPoint(); + m.unSetup(); + } + // Magic Bezier Drag Equations follow! // "weight" describes how the influence of the drag should be distributed // among the handles; 0 = front handle only, 1 = back handle only. @@ -166,14 +178,8 @@ void CurveDragPoint::_insertNode(bool take_selection) // Otherwise clicks on the new node would only work after the user moves the mouse a bit. // PathManipulator will restore visibility when necessary. setVisible(false); - NodeList::iterator inserted = _pm.subdivideSegment(first, _t); - if (take_selection) { - _pm._selection.clear(); - } - _pm._selection.insert(inserted.ptr()); - _pm.update(true); - _pm._commit(_("Add node")); + _pm.insertNode(first, _t, take_selection); } Glib::ustring CurveDragPoint::_getTip(unsigned state) const |
