summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVinícius dos Santos Oliveira <vini.ipsmaker@gmail.com>2014-05-05 07:13:35 +0000
committerVinícius dos Santos Oliveira <vini.ipsmaker@gmail.com>2014-05-05 07:13:35 +0000
commit5a8b00f027b9eb3d4abb290d2ddf26d36d71cf80 (patch)
treef85f72eb8642eb842dcd02f20967e5bd2b8b95d1 /src
parentupdate to trunk (diff)
downloadinkscape-5a8b00f027b9eb3d4abb290d2ddf26d36d71cf80.tar.gz
inkscape-5a8b00f027b9eb3d4abb290d2ddf26d36d71cf80.zip
Enabling path manipulator to comunicate if paths are bspline when
accessing const objects. This change was required to correctly show on the GUI whether or not a node was a bspline. (bzr r11950.8.1)
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/effect.h1
-rw-r--r--src/sp-lpe-item.cpp16
-rw-r--r--src/sp-lpe-item.h1
-rw-r--r--src/ui/tool/node.cpp8
-rw-r--r--src/ui/tool/node.h6
-rw-r--r--src/ui/tool/path-manipulator.cpp12
-rw-r--r--src/ui/tool/path-manipulator.h3
7 files changed, 35 insertions, 12 deletions
diff --git a/src/live_effects/effect.h b/src/live_effects/effect.h
index 1da9b4cc9..940770616 100644
--- a/src/live_effects/effect.h
+++ b/src/live_effects/effect.h
@@ -101,6 +101,7 @@ public:
Inkscape::XML::Node * getRepr();
SPDocument * getSPDoc();
LivePathEffectObject * getLPEObj() {return lpeobj;};
+ LivePathEffectObject const * getLPEObj() const {return lpeobj;};
Parameter * getParameter(const char * key);
void readallParameters(Inkscape::XML::Node const* repr);
diff --git a/src/sp-lpe-item.cpp b/src/sp-lpe-item.cpp
index f59bc33ee..33359727a 100644
--- a/src/sp-lpe-item.cpp
+++ b/src/sp-lpe-item.cpp
@@ -606,6 +606,22 @@ SPLPEItem::getPathEffectOfType(int type)
return NULL;
}
+Inkscape::LivePathEffect::Effect const*
+SPLPEItem::getPathEffectOfType(int type) const
+{
+ std::list<Inkscape::LivePathEffect::LPEObjectReference *>::const_iterator i;
+ for (i = path_effect_list->begin(); i != path_effect_list->end(); ++i) {
+ LivePathEffectObject const *lpeobj = (*i)->lpeobject;
+ if (lpeobj) {
+ Inkscape::LivePathEffect::Effect const *lpe = lpeobj->get_lpe();
+ if (lpe && (lpe->effectType() == type)) {
+ return lpe;
+ }
+ }
+ }
+ return NULL;
+}
+
void SPLPEItem::editNextParamOncanvas(SPDesktop *dt)
{
Inkscape::LivePathEffect::LPEObjectReference *lperef = this->getCurrentLPEReference();
diff --git a/src/sp-lpe-item.h b/src/sp-lpe-item.h
index cd72ac55b..85878a95b 100644
--- a/src/sp-lpe-item.h
+++ b/src/sp-lpe-item.h
@@ -77,6 +77,7 @@ public:
bool hasPathEffectOfType(int const type) const;
bool hasPathEffectRecursive() const;
Inkscape::LivePathEffect::Effect* getPathEffectOfType(int type);
+ Inkscape::LivePathEffect::Effect const* getPathEffectOfType(int type) const;
bool hasBrokenPathEffect() const;
PathEffectList getEffectList();
diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp
index 7ba69b039..6cb254b7f 100644
--- a/src/ui/tool/node.cpp
+++ b/src/ui/tool/node.cpp
@@ -1421,13 +1421,7 @@ Node *Node::nodeAwayFrom(Handle *h)
Glib::ustring Node::_getTip(unsigned state) const
{
-
- /* if the node doesnt have strength, it marks it as bspline, we'll use it later
- to show the appropiate messages. We cannot do it in any other way, because the
- function is constant */
- bool isBSpline = false;
- //if( this->bsplineWeight != 0.0000)
- // isBSpline = true;
+ bool isBSpline = _pm().isBSpline();
if (state_held_shift(state)) {
bool can_drag_out = (_next() && _front.isDegenerate()) || (_prev() && _back.isDegenerate());
if (can_drag_out) {
diff --git a/src/ui/tool/node.h b/src/ui/tool/node.h
index 202dbb3cd..415563a7d 100644
--- a/src/ui/tool/node.h
+++ b/src/ui/tool/node.h
@@ -217,6 +217,7 @@ public:
Node *nodeAwayFrom(Handle *h);
NodeList &nodeList() { return *(static_cast<ListNode*>(this)->ln_list); }
+ NodeList &nodeList() const { return *(static_cast<ListNode const*>(this)->ln_list); }
/**
* Move the node to the bottom of its canvas group.
@@ -263,6 +264,7 @@ private:
Inkscape::SnapSourceType _snapSourceType() const;
Inkscape::SnapTargetType _snapTargetType() const;
inline PathManipulator &_pm();
+ inline PathManipulator &_pm() const;
/** Determine whether two nodes are joined by a linear segment. */
static bool _is_line_segment(Node *first, Node *second);
@@ -494,6 +496,10 @@ inline PathManipulator &Node::_pm() {
return nodeList().subpathList().pm();
}
+inline PathManipulator &Node::_pm() const {
+ return nodeList().subpathList().pm();
+}
+
// definitions for node iterator
template <typename N>
NodeIterator<N>::operator bool() const {
diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp
index 487c31b10..3beeed049 100644
--- a/src/ui/tool/path-manipulator.cpp
+++ b/src/ui/tool/path-manipulator.cpp
@@ -1181,14 +1181,14 @@ void PathManipulator::_createControlPointsFromGeometry()
}
//determines if the trace has a bspline effect and the number of steps that it takes
-int PathManipulator::BSplineGetSteps(){
+int PathManipulator::BSplineGetSteps() const {
- LivePathEffect::LPEBSpline *lpe_bsp = NULL;
+ LivePathEffect::LPEBSpline const *lpe_bsp = NULL;
if (SP_IS_LPE_ITEM(_path) && _path->hasPathEffect()){
- Inkscape::LivePathEffect::Effect* thisEffect = SP_LPE_ITEM(_path)->getPathEffectOfType(Inkscape::LivePathEffect::BSPLINE);
+ Inkscape::LivePathEffect::Effect const *thisEffect = SP_LPE_ITEM(_path)->getPathEffectOfType(Inkscape::LivePathEffect::BSPLINE);
if(thisEffect){
- lpe_bsp = dynamic_cast<LivePathEffect::LPEBSpline*>(thisEffect->getLPEObj()->get_lpe());
+ lpe_bsp = dynamic_cast<LivePathEffect::LPEBSpline const*>(thisEffect->getLPEObj()->get_lpe());
}
}
int steps = 0;
@@ -1206,6 +1206,10 @@ bool PathManipulator::isBSpline(bool recalculate){
return _is_bspline;
}
+bool PathManipulator::isBSpline() const {
+ return BSplineGetSteps() > 0;
+}
+
// returns the corresponding strength to the position of the handlers
double PathManipulator::BSplineHandlePosition(Handle *h, Handle *h2){
using Geom::X;
diff --git a/src/ui/tool/path-manipulator.h b/src/ui/tool/path-manipulator.h
index a85664ddf..151805c83 100644
--- a/src/ui/tool/path-manipulator.h
+++ b/src/ui/tool/path-manipulator.h
@@ -96,7 +96,7 @@ public:
NodeList::iterator extremeNode(NodeList::iterator origin, bool search_selected,
bool search_unselected, bool closest);
- int BSplineGetSteps();
+ int BSplineGetSteps() const;
// this is necessary for Tab-selection in MultiPathManipulator
SubpathList &subpathList() { return _subpaths; }
@@ -108,6 +108,7 @@ private:
void _createControlPointsFromGeometry();
bool isBSpline(bool recalculate = false);
+ bool isBSpline() const;
double BSplineHandlePosition(Handle *h, Handle *h2 = NULL);
Geom::Point BSplineHandleReposition(Handle *h, Handle *h2 = NULL);
Geom::Point BSplineHandleReposition(Handle *h, double pos);