summaryrefslogtreecommitdiffstats
path: root/src/ui/tool/node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/tool/node.cpp')
-rw-r--r--src/ui/tool/node.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp
index c6a2df749..6dc6c7528 100644
--- a/src/ui/tool/node.cpp
+++ b/src/ui/tool/node.cpp
@@ -577,13 +577,29 @@ void Node::move(Geom::Point const &new_pos)
Geom::Point old_pos = position();
Geom::Point delta = new_pos - position();
//BSpline
+ double prevPos = 0;
double pos = 0;
+ double nextPos = 0;
+ Node *n = this;
+ Node * nextNode = n->nodeToward(n->front());
+ Node * prevNode = n->nodeToward(n->back());
if(_pm().isBSpline()){
- Node *n = this;
+ if(prevNode)
+ prevPos = _pm().BSplineHandlePosition(prevNode->front());
pos = _pm().BSplineHandlePosition(n->front());
+ if(nextNode)
+ nextPos = _pm().BSplineHandlePosition(nextNode->back());
}
//BSpline End
setPosition(new_pos);
+ //BSpline
+ if(prevNode){
+ prevNode->front()->setPosition(_pm().BSplineHandleReposition(prevNode->front(),prevPos));
+ }
+ if(nextNode){
+ nextNode->back()->setPosition(_pm().BSplineHandleReposition(nextNode->back(),nextPos));
+ }
+ //BSpline End
_front.setPosition(_front.position() + delta);
_back.setPosition(_back.position() + delta);
//BSpline