summaryrefslogtreecommitdiffstats
path: root/src/ui/tool
diff options
context:
space:
mode:
authorroot <root@jtx.marker.es>2013-04-17 21:03:51 +0000
committerroot <root@jtx.marker.es>2013-04-17 21:03:51 +0000
commit458ca2842297a5eae7e4f6fc394b227d61881c8d (patch)
treeb707b844e1265fd31ca3861c250778f7ad6329d8 /src/ui/tool
parentHalo (diff)
downloadinkscape-458ca2842297a5eae7e4f6fc394b227d61881c8d.tar.gz
inkscape-458ca2842297a5eae7e4f6fc394b227d61881c8d.zip
Update color lines overlay, with halo of 1 px matched by Gez. Fix some crash snapping. Added new button widget to make cusp node
(bzr r11950.1.96)
Diffstat (limited to 'src/ui/tool')
-rw-r--r--src/ui/tool/node.cpp17
-rw-r--r--src/ui/tool/path-manipulator.cpp12
2 files changed, 19 insertions, 10 deletions
diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp
index 8f1c37649..011d0d296 100644
--- a/src/ui/tool/node.cpp
+++ b/src/ui/tool/node.cpp
@@ -146,10 +146,8 @@ void Handle::move(Geom::Point const &new_pos)
Set &nodes = _parent->_selection.allPoints();
for (Set::iterator i = nodes.begin(); i != nodes.end(); ++i) {
Node *n = static_cast<Node*>(*i);
- if(n != _parent)
- _parent->_selection.erase(n);
+ _parent->_selection.erase(n);
}
- if(!_parent->selected())
_parent->_selection.insert(_parent);
}
//BSpline End
@@ -187,8 +185,8 @@ void Handle::move(Geom::Point const &new_pos)
//BSpline
if(_pm().isBSpline){
h = this;
- setPosition(_pm().BSplineHandleReposition(h));
_parent->bsplineWeight = _pm().BSplineHandlePosition(h);
+ setPosition(_pm().BSplineHandleReposition(h,_parent->bsplineWeight));
h2 = this->other();
this->other()->setPosition(_pm().BSplineHandleReposition(h2,_parent->bsplineWeight));
}
@@ -422,6 +420,16 @@ void Handle::dragged(Geom::Point &new_pos, GdkEventMotion *event)
sm.freeSnapReturnByRef(new_pos, SNAPSOURCE_NODE_HANDLE);
}
sm.unSetup();
+ //BSpline
+ if(_pm().isBSpline){
+ Handle *h = NULL;
+ _parent->bsplineWeight = 0;
+ h = this;
+ setPosition(new_pos);
+ _parent->bsplineWeight = _pm().BSplineHandlePosition(h);
+ new_pos=_pm().BSplineHandleReposition(h,_parent->bsplineWeight);
+ }
+ //BSpline End
}
@@ -452,6 +460,7 @@ void Handle::ungrabbed(GdkEventButton *event)
Geom::Point dist = _desktop->d2w(_parent->position()) - _desktop->d2w(position());
if (dist.length() <= drag_tolerance) {
move(_parent->position());
+ _parent->bsplineWeight = 0;
}
}
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp
index 6cad60fee..9da27e807 100644
--- a/src/ui/tool/path-manipulator.cpp
+++ b/src/ui/tool/path-manipulator.cpp
@@ -1204,14 +1204,14 @@ int PathManipulator::getSteps(){
double PathManipulator::BSplineHandlePosition(Handle *h){
using Geom::X;
using Geom::Y;
- double pos = 0;
+ double pos = 0.0000;
Node *n = h->parent();
SPCurve *lineInsideNodes = new SPCurve();
Node * nextNode = NULL;
if(!n->isEndNode())
nextNode = n->nodeToward(h);
Geom::Point positionH = h->position();
- positionH = Geom::Point(positionH[X] - 0.0625,positionH[Y] - 0.0625);
+ positionH = Geom::Point(positionH[X] + 0.0001,positionH[Y] + 0.0001);
if(nextNode && n->position() != h->position()){
lineInsideNodes->moveto(n->position());
lineInsideNodes->lineto(nextNode->position());
@@ -1235,12 +1235,12 @@ Geom::Point PathManipulator::BSplineHandleReposition(Handle *h,double pos){
Node * nextNode = NULL;
if(!n->isEndNode())
nextNode = n->nodeToward(h);
- if(nextNode && pos != 0){
+ if(nextNode && pos != 0.0000){
lineInsideNodes->moveto(n->position());
lineInsideNodes->lineto(nextNode->position());
SBasisInsideNodes = lineInsideNodes->first_segment()->toSBasis();
ret = SBasisInsideNodes.valueAt(pos);
- ret = Geom::Point(ret[X] + 0.0625,ret[Y] + 0.0625);
+ ret = Geom::Point(ret[X] + 0.0001,ret[Y] + 0.0001);
}else{
ret = n->position();
}
@@ -1251,8 +1251,8 @@ void PathManipulator::BSplineNodeHandlesReposition(Node *n){
if(n->selected()){
Node * nextNode = n->nodeToward(n->front());
Node * prevNode = n->nodeToward(n->back());
- double prevPos = 0;
- double nextPos = 0;
+ double prevPos = 0.0000;
+ double nextPos = 0.0000;
if(prevNode)
prevPos = BSplineHandlePosition(prevNode->front());
if(nextNode)