summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2014-01-09 16:46:40 +0000
committerJabiertxof <jtx@jtx.marker.es>2014-01-09 16:46:40 +0000
commit0b15b05d641661e6b1d5cb73520c7cdead1cfc89 (patch)
tree9e6b346f78c3df0398ae333a1594b62154727210 /src
parentupdate to trunk (diff)
downloadinkscape-0b15b05d641661e6b1d5cb73520c7cdead1cfc89.tar.gz
inkscape-0b15b05d641661e6b1d5cb73520c7cdead1cfc89.zip
Fix a bug whith oposite handles on node move,and a little cleanup
(bzr r11950.1.232)
Diffstat (limited to 'src')
-rw-r--r--src/ui/tool/node.cpp18
-rw-r--r--src/ui/tool/path-manipulator.cpp7
2 files changed, 11 insertions, 14 deletions
diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp
index 39b21ae6d..63556e499 100644
--- a/src/ui/tool/node.cpp
+++ b/src/ui/tool/node.cpp
@@ -170,7 +170,6 @@ void Handle::move(Geom::Point const &new_pos)
//spanish: mueve el tirador y su opuesto la misma proporción
if(_pm().isBSpline){
setPosition(_pm().BSplineHandleReposition(this));
- _parent->bsplineWeight = _pm().BSplineHandlePosition(this);
this->other()->setPosition(_pm().BSplineHandleReposition(this->other(),_parent->bsplineWeight));
}
return;
@@ -188,7 +187,6 @@ void Handle::move(Geom::Point const &new_pos)
//spanish: mueve el tirador y su opuesto la misma proporción
if(_pm().isBSpline){
setPosition(_pm().BSplineHandleReposition(this));
- _parent->bsplineWeight = _pm().BSplineHandlePosition(this);
this->other()->setPosition(_pm().BSplineHandleReposition(this->other(),_parent->bsplineWeight));
}
@@ -215,7 +213,6 @@ void Handle::move(Geom::Point const &new_pos)
//spanish: mueve el tirador y su opuesto la misma proporción
if(_pm().isBSpline){
setPosition(_pm().BSplineHandleReposition(this));
- _parent->bsplineWeight = _pm().BSplineHandlePosition(this);
this->other()->setPosition(_pm().BSplineHandleReposition(this->other(),_parent->bsplineWeight));
}
@@ -310,7 +307,6 @@ bool Handle::_eventHandler(Inkscape::UI::Tools::ToolBase *event_context, GdkEven
void Handle::handle_2button_press(){
if(_pm().isBSpline){
setPosition(_pm().BSplineHandleReposition(this,0.3334));
- _parent->bsplineWeight = 0.3334;
this->other()->setPosition(_pm().BSplineHandleReposition(this->other(),_parent->bsplineWeight));
_pm().update();
}
@@ -764,8 +760,14 @@ void Node::showHandles(bool v)
//Cada vez que actuemos sobre dichos tiradores en un trazado
//bspline esta fuerza se tiene que actualizar
this->bsplineWeight = 0.0000;
- if(_pm().isBSpline && (!_front.isDegenerate() || !_back.isDegenerate()))
- this->bsplineWeight = 0.3334;
+ if(_pm().isBSpline && (!_front.isDegenerate() || !_back.isDegenerate())){
+ if (!_front.isDegenerate()) {
+ _pm().BSplineHandlePosition(&_front);
+ }
+ if (!_back.isDegenerate()) {
+ _pm().BSplineHandlePosition(&_back);
+ }
+ }
}
void Node::updateHandles()
@@ -1125,9 +1127,9 @@ void Node::_setState(State state)
//spanish: esto muestra los tiradores al seleccionar los nodos
if(_pm().isBSpline){
if(!this->back()->isDegenerate()){
- this->bsplineWeight = _pm().BSplineHandlePosition(this->back());
+ _pm().BSplineHandlePosition(this->back());
}else if (!this->front()->isDegenerate()){
- this->bsplineWeight = _pm().BSplineHandlePosition(this->front());
+ _pm().BSplineHandlePosition(this->front());
}else{
this->bsplineWeight = 0.0000;
}
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp
index cda8374c5..8a0568fbd 100644
--- a/src/ui/tool/path-manipulator.cpp
+++ b/src/ui/tool/path-manipulator.cpp
@@ -1225,6 +1225,7 @@ double PathManipulator::BSplineHandlePosition(Handle *h){
lineInsideNodes->lineto(nextNode->position());
pos = Geom::nearest_point(h->position(),*lineInsideNodes->first_segment());
}
+ n->bsplineWeight = pos;
return pos;
}
@@ -1265,17 +1266,11 @@ void PathManipulator::BSplineNodeHandlesReposition(Node *n){
Node * nextNode = n->nodeToward(n->front());
Node * prevNode = n->nodeToward(n->back());
if(prevNode){
- n->back()->setPosition(BSplineHandleReposition(n->back(),n->bsplineWeight));
- if(prevNode->front()->position() == prevNode->position())
- prevNode->bsplineWeight = 0.000;
if(!prevNode->isEndNode())
prevNode->back()->setPosition(BSplineHandleReposition(prevNode->back(),prevNode->bsplineWeight));
prevNode->front()->setPosition(BSplineHandleReposition(prevNode->front(),prevNode->bsplineWeight));
}
if(nextNode){
- n->front()->setPosition(BSplineHandleReposition(n->front(),n->bsplineWeight));
- if(nextNode->front()->position() == nextNode->position())
- nextNode->bsplineWeight = 0.000;
if(!nextNode->isEndNode())
nextNode->front()->setPosition(BSplineHandleReposition(nextNode->front(),nextNode->bsplineWeight));
nextNode->back()->setPosition(BSplineHandleReposition(nextNode->back(),nextNode->bsplineWeight));