summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2014-03-01 15:28:13 +0000
committerJabiertxof <jtx@jtx.marker.es>2014-03-01 15:28:13 +0000
commit616ae6e54d98f03dc1ff3ce7d3c528521fd7e233 (patch)
treea9a26ab46a7f508148c83ee8aac8de254a93a6fd /src
parentadding some comments (diff)
downloadinkscape-616ae6e54d98f03dc1ff3ce7d3c528521fd7e233.tar.gz
inkscape-616ae6e54d98f03dc1ff3ce7d3c528521fd7e233.zip
Substitute isBSpline property by a cached function isBSpline(bool)
(bzr r11950.1.261)
Diffstat (limited to 'src')
-rw-r--r--src/ui/tool/curve-drag-point.cpp4
-rw-r--r--src/ui/tool/node.cpp30
-rw-r--r--src/ui/tool/path-manipulator.cpp19
-rw-r--r--src/ui/tool/path-manipulator.h3
4 files changed, 29 insertions, 27 deletions
diff --git a/src/ui/tool/curve-drag-point.cpp b/src/ui/tool/curve-drag-point.cpp
index 0ee848f15..e5412fdc2 100644
--- a/src/ui/tool/curve-drag-point.cpp
+++ b/src/ui/tool/curve-drag-point.cpp
@@ -54,7 +54,7 @@ bool CurveDragPoint::grabbed(GdkEventMotion */*event*/)
// delta is a vector equal 1/3 of distance from first to second
Geom::Point delta = (second->position() - first->position()) / 3.0;
//spanish: solo actualizamos los nodos si no es bspline
- if(!_pm.isBSpline){
+ if(!_pm.isBSpline(false)){
first->front()->move(first->front()->position() + delta);
second->back()->move(second->back()->position() - delta);
}
@@ -90,7 +90,7 @@ void CurveDragPoint::dragged(Geom::Point &new_pos, GdkEventMotion *event)
Geom::Point offset0 = ((1-weight)/(3*t*(1-t)*(1-t))) * delta;
Geom::Point offset1 = (weight/(3*t*t*(1-t))) * delta;
//spanish: modificado para que, si el trazado es bspline solo actue si está presionada la tecla SHIFT
- if(!_pm.isBSpline){
+ if(!_pm.isBSpline(false)){
first->front()->move(first->front()->position() + offset0);
second->back()->move(second->back()->position() + offset1);
}else if(weight>=0.8 && !second->isEndNode() && held_shift(*event))second->back()->move(new_pos);
diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp
index 69f4a8e82..78d8fe833 100644
--- a/src/ui/tool/node.cpp
+++ b/src/ui/tool/node.cpp
@@ -168,7 +168,7 @@ void Handle::move(Geom::Point const &new_pos)
setPosition(new_pos);
//spanish: mueve el tirador y su opuesto la misma proporción
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
setPosition(_pm().BSplineHandleReposition(this));
this->other()->setPosition(_pm().BSplineHandleReposition(this->other(),_parent->bsplineWeight));
}
@@ -185,7 +185,7 @@ void Handle::move(Geom::Point const &new_pos)
setRelativePos(new_delta);
//spanish: mueve el tirador y su opuesto la misma proporción
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
setPosition(_pm().BSplineHandleReposition(this));
this->other()->setPosition(_pm().BSplineHandleReposition(this->other(),_parent->bsplineWeight));
}
@@ -211,7 +211,7 @@ void Handle::move(Geom::Point const &new_pos)
setPosition(new_pos);
//spanish: mueve el tirador y su opuesto la misma proporción
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
setPosition(_pm().BSplineHandleReposition(this));
this->other()->setPosition(_pm().BSplineHandleReposition(this->other(),_parent->bsplineWeight));
}
@@ -305,7 +305,7 @@ bool Handle::_eventHandler(Inkscape::UI::Tools::ToolBase *event_context, GdkEven
//spanish: función que mueve el tirador y su opuesto a la proporción por defecto de 0.3334
void Handle::handle_2button_press(){
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
setPosition(_pm().BSplineHandleReposition(this,0.3334));
this->other()->setPosition(_pm().BSplineHandleReposition(this->other(),_parent->bsplineWeight));
_pm().update();
@@ -361,7 +361,7 @@ void Handle::dragged(Geom::Point &new_pos, GdkEventMotion *event)
new_pos = result;
//spanish: mueve el tirador y su opuesto en X posiciones fijas depenfiendo de la configuración de el
//parametro "steps whith control" del efecto en vivo BSpline
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
setPosition(new_pos);
int steps = _pm().BSplineGetSteps();
_parent->bsplineWeight = ceilf(_pm().BSplineHandlePosition(this)*steps)/steps;
@@ -371,7 +371,7 @@ void Handle::dragged(Geom::Point &new_pos, GdkEventMotion *event)
std::vector<Inkscape::SnapCandidatePoint> unselected;
//spanish: si está activado el ajuste (snap) y no es bspline
- if (snap && !_pm().isBSpline) {
+ if (snap && !_pm().isBSpline(false)) {
ControlPointSelection::Set &nodes = _parent->_selection.allPoints();
for (ControlPointSelection::Set::iterator i = nodes.begin(); i != nodes.end(); ++i) {
Node *n = static_cast<Node*>(*i);
@@ -413,7 +413,7 @@ void Handle::dragged(Geom::Point &new_pos, GdkEventMotion *event)
}
//spanish: si es bspline pero no está presionado SHIFT o CONTROL
//lo fija en la posición original
- if(_pm().isBSpline && !held_shift(*event) && !held_control(*event)){
+ if(_pm().isBSpline(false) && !held_shift(*event) && !held_control(*event)){
new_pos=_last_drag_origin();
}
move(new_pos); // needed for correct update, even though it's redundant
@@ -433,7 +433,7 @@ void Handle::ungrabbed(GdkEventButton *event)
if (dist.length() <= drag_tolerance) {
move(_parent->position());
//spanish: marca la fuerza del bspline como 0.0000
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
_parent->bsplineWeight = 0.0000;
}
}
@@ -626,7 +626,7 @@ void Node::move(Geom::Point const &new_pos)
//de nuevo una vez sea movido el nodo
double oldPos = 0.0000;
Node *n = this;
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
oldPos = n->bsplineWeight;
}
@@ -640,7 +640,7 @@ void Node::move(Geom::Point const &new_pos)
_fixNeighbors(old_pos, new_pos);
//spanish: movemos los tiradores involucrados, primero los del nodo en cuestión
//y despues los de los nodos colindantes
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
_front.setPosition(_pm().BSplineHandleReposition(this->front(),oldPos));
_back.setPosition(_pm().BSplineHandleReposition(this->back(),oldPos));
_pm().BSplineNodeHandlesReposition(this);
@@ -652,7 +652,7 @@ void Node::transform(Geom::Affine const &m)
//spanish: guardamos la fuerza anterior del nodo para reaplicarsela
//de nuevo una vez sea movido el nodo
double oldPos = 0.0000;
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
oldPos = this->bsplineWeight;
}
Geom::Point old_pos = position();
@@ -665,7 +665,7 @@ void Node::transform(Geom::Affine const &m)
_fixNeighbors(old_pos, position());
//spanish: movemos los tiradores involucrados, primero los del nodo en cuestión
//y despues los de los nodos colindantes
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
_front.setPosition(_pm().BSplineHandleReposition(this->front(),oldPos));
_back.setPosition(_pm().BSplineHandleReposition(this->back(),oldPos));
_pm().BSplineNodeHandlesReposition(this);
@@ -759,7 +759,7 @@ 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())){
+ if(_pm().isBSpline(false) && (!_front.isDegenerate() || !_back.isDegenerate())){
if (!_front.isDegenerate()) {
_pm().BSplineHandlePosition(&_front);
}
@@ -871,7 +871,7 @@ void Node::setType(NodeType type, bool update_handles)
//spanish: en los cambios de tipo de nodo, sobre trazados bspline,
//o bien los mantenemos con potencia 0.0000 en modo esquina
//o les damos la potencia por defecto en modo de curva
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
if(this->bsplineWeight !=0.0000) this->bsplineWeight = 0.3334;
_front.setPosition(_pm().BSplineHandleReposition(this->front(),this->bsplineWeight));
_back.setPosition(_pm().BSplineHandleReposition(this->back(),this->bsplineWeight));
@@ -1124,7 +1124,7 @@ void Node::_setState(State state)
mgr.setActive(_canvas_item, true);
mgr.setPrelight(_canvas_item, false);
//spanish: esto muestra los tiradores al seleccionar los nodos
- if(_pm().isBSpline){
+ if(_pm().isBSpline(false)){
if(!this->back()->isDegenerate()){
_pm().BSplineHandlePosition(this->back());
}else if (!this->front()->isDegenerate()){
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp
index bad07daee..a6689d93d 100644
--- a/src/ui/tool/path-manipulator.cpp
+++ b/src/ui/tool/path-manipulator.cpp
@@ -103,11 +103,9 @@ private:
};
void build_segment(Geom::PathBuilder &, Node *, Node *);
-//spanish: una propiedad isBSpline, por defecto falsa y una función al final de la función (BSpline()) que la define realmente
PathManipulator::PathManipulator(MultiPathManipulator &mpm, SPPath *path,
Geom::Affine const &et, guint32 outline_color, Glib::ustring lpe_key)
: PointManipulator(mpm._path_data.node_data.desktop, *mpm._path_data.node_data.selection)
- , isBSpline(false)
, _subpaths(*this)
, _multi_path_manipulator(mpm)
, _path(path)
@@ -147,7 +145,7 @@ PathManipulator::PathManipulator(MultiPathManipulator &mpm, SPPath *path,
sigc::hide( sigc::mem_fun(*this, &PathManipulator::_updateOutlineOnZoomChange)));
_createControlPointsFromGeometry();
- BSpline();
+ isBSpline(true);
}
PathManipulator::~PathManipulator()
@@ -666,7 +664,7 @@ unsigned PathManipulator::_deleteStretch(NodeList::iterator start, NodeList::ite
start = next;
}
//spanish: si se borra, reajustamos los tiradores
- if(isBSpline){
+ if(isBSpline(false)){
double pos = 0.0000;
if(start.prev()){
pos = BSplineHandlePosition(start.prev()->back());
@@ -1203,11 +1201,16 @@ int PathManipulator::BSplineGetSteps(){
}
//spanish: determina si el trazado tiene efecto bspline
-void PathManipulator::BSpline(){
- isBSpline = false;
- if(this->BSplineGetSteps()>0){
+bool PathManipulator::isBSpline(bool recalculate){
+ static int BSplineSteps = this->BSplineGetSteps();
+ if(recalculate){
+ BSplineSteps = this->BSplineGetSteps();
+ }
+ bool isBSpline = false;
+ if(BSplineSteps>0){
isBSpline = true;
}
+ return isBSpline;
}
//spanish: devuelve la fuerza que le corresponderia a la posicón de un tirador
@@ -1283,7 +1286,7 @@ void PathManipulator::BSplineNodeHandlesReposition(Node *n){
void PathManipulator::_createGeometryFromControlPoints(bool alert_LPE)
{
Geom::PathBuilder builder;
- BSpline();
+ isBSpline(true);
for (std::list<SubpathPtr>::iterator spi = _subpaths.begin(); spi != _subpaths.end(); ) {
SubpathPtr subpath = *spi;
if (subpath->empty()) {
diff --git a/src/ui/tool/path-manipulator.h b/src/ui/tool/path-manipulator.h
index 5f075834e..5186bfc95 100644
--- a/src/ui/tool/path-manipulator.h
+++ b/src/ui/tool/path-manipulator.h
@@ -96,7 +96,6 @@ public:
NodeList::iterator extremeNode(NodeList::iterator origin, bool search_selected,
bool search_unselected, bool closest);
- bool isBSpline;
int BSplineGetSteps();
// this is necessary for Tab-selection in MultiPathManipulator
SubpathList &subpathList() { return _subpaths; }
@@ -107,7 +106,7 @@ private:
typedef boost::shared_ptr<NodeList> SubpathPtr;
void _createControlPointsFromGeometry();
- void BSpline();
+ bool isBSpline(bool recalculate);
double BSplineHandlePosition(Handle *h);
Geom::Point BSplineHandleReposition(Handle *h);
Geom::Point BSplineHandleReposition(Handle *h,double pos);