summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/tool/node.cpp2
-rw-r--r--src/ui/tool/path-manipulator.cpp18
2 files changed, 17 insertions, 3 deletions
diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp
index 1f609dfa0..8f1c37649 100644
--- a/src/ui/tool/node.cpp
+++ b/src/ui/tool/node.cpp
@@ -577,8 +577,8 @@ Node::Node(NodeSharedData const &data, Geom::Point const &initial_pos) :
_type(NODE_CUSP),
_handles_shown(false)
{
- // NOTE we do not set type here, because the handles are still degenerate
this->bsplineWeight = 0.3334;
+ // NOTE we do not set type here, because the handles are still degenerate
}
Node const *Node::_next() const
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp
index be5514e1f..6cad60fee 100644
--- a/src/ui/tool/path-manipulator.cpp
+++ b/src/ui/tool/path-manipulator.cpp
@@ -1248,8 +1248,22 @@ Geom::Point PathManipulator::BSplineHandleReposition(Handle *h,double pos){
}
void PathManipulator::BSplineNodeHandlesReposition(Node *n){
- n->front()->setPosition(BSplineHandleReposition(n->front(),n->bsplineWeight));
- n->back()->setPosition(BSplineHandleReposition(n->back(),n->bsplineWeight));
+ if(n->selected()){
+ Node * nextNode = n->nodeToward(n->front());
+ Node * prevNode = n->nodeToward(n->back());
+ double prevPos = 0;
+ double nextPos = 0;
+ if(prevNode)
+ prevPos = BSplineHandlePosition(prevNode->front());
+ if(nextNode)
+ nextPos = BSplineHandlePosition(nextNode->back());
+ n->front()->setPosition(BSplineHandleReposition(n->front(),n->bsplineWeight));
+ n->back()->setPosition(BSplineHandleReposition(n->back(),n->bsplineWeight));
+ if(prevNode)
+ prevNode->front()->setPosition(BSplineHandleReposition(prevNode->front(),prevPos));
+ if(nextNode)
+ nextNode->back()->setPosition(BSplineHandleReposition(nextNode->back(),nextPos));
+ }
}
/** Construct the geometric representation of nodes and handles, update the outline