diff --git a/src/snapper.cpp b/src/snapper.cpp
index 27531b50b9f371b37c0772da44261a84622a69c6..17d7b7137467cf93615d3f2f790de9e0d060a77d 100644 (file)
--- a/src/snapper.cpp
+++ b/src/snapper.cpp
#include "libnr/nr-values.h"
#include "sp-namedview.h"
+#include "inkscape.h"
+#include "desktop.h"
-Inkscape::Snapper::PointType const Inkscape::Snapper::BBOX_POINT = 0x1;
-Inkscape::Snapper::PointType const Inkscape::Snapper::SNAP_POINT = 0x2;
+Inkscape::Snapper::PointType const Inkscape::Snapper::SNAPPOINT_BBOX = 0x1;
+Inkscape::Snapper::PointType const Inkscape::Snapper::SNAPPOINT_NODE = 0x2;
+Inkscape::Snapper::PointType const Inkscape::Snapper::SNAPPOINT_GUIDE = 0x4;
/**
* Construct new Snapper for named view.
* \param nv Named view.
* \param d Snap distance.
*/
-Inkscape::Snapper::Snapper(SPNamedView const *nv, NR::Coord const d) : _named_view(nv), _distance(d)
+Inkscape::Snapper::Snapper(SPNamedView const *nv, NR::Coord const d) : _named_view(nv), _enabled(true), _distance(d)
{
g_assert(_named_view != NULL);
g_assert(SP_IS_NAMEDVIEW(_named_view));
-
- setSnapTo(BBOX_POINT, true);
+
+ setSnapFrom(SNAPPOINT_BBOX | SNAPPOINT_NODE, true); //Snap any point. In v0.45 and earlier, this was controlled in the preferences tab
}
/**
}
/**
- * \return Snap distance (desktop coordinates)
+ * \return Snap distance (desktop coordinates); depends on current zoom so that it's always the same in screen pixels
*/
NR::Coord Inkscape::Snapper::getDistance() const
{
- return _distance;
+ return _distance / SP_ACTIVE_DESKTOP->current_zoom();
}
/**
* \param t Point type.
* \param s true to snap to this point type, otherwise false;
*/
-void Inkscape::Snapper::setSnapTo(PointType t, bool s)
+void Inkscape::Snapper::setSnapFrom(PointType t, bool s)
{
if (s) {
- _snap_to |= t;
+ _snap_from |= t;
} else {
- _snap_to &= ~t;
+ _snap_from &= ~t;
}
}
* \param t Point type.
* \return true if snapper will snap this type of point, otherwise false.
*/
-bool Inkscape::Snapper::getSnapTo(PointType t) const
+bool Inkscape::Snapper::getSnapFrom(PointType t) const
{
- return (_snap_to & t);
+ return (_snap_from & t);
}
/**
- * \return true if this Snapper will snap at least one kind of point.
+ * \param s true to enable this snapper, otherwise false.
*/
-bool Inkscape::Snapper::willSnapSomething() const
+
+void Inkscape::Snapper::setEnabled(bool s)
{
- return (_snap_to != 0);
+ _enabled = s;
}
-
/**
* Try to snap a point to whatever this snapper is interested in. Any
* snap that occurs will be to the nearest "interesting" thing (e.g. a
* \return Snapped point.
*/
-Inkscape::SnappedPoint Inkscape::Snapper::freeSnap(PointType t,
+Inkscape::SnappedPoint Inkscape::Snapper::freeSnap(PointType const &t,
NR::Point const &p,
+ bool const &first_point,
+ std::vector<NR::Point> &points_to_snap,
SPItem const *it) const
{
std::list<SPItem const *> lit;
lit.push_back(it);
- return freeSnap(t, p, lit);
+ return freeSnap(t, p, first_point, points_to_snap, lit);
}
* \return Snapped point.
*/
-Inkscape::SnappedPoint Inkscape::Snapper::freeSnap(PointType t,
+Inkscape::SnappedPoint Inkscape::Snapper::freeSnap(PointType const &t,
NR::Point const &p,
+ bool const &first_point,
+ std::vector<NR::Point> &points_to_snap,
std::list<SPItem const *> const &it) const
{
- if (getSnapTo(t) == false) {
+ if (_enabled == false || getSnapFrom(t) == false) {
return SnappedPoint(p, NR_HUGE);
}
- return _doFreeSnap(p, it);
+ return _doFreeSnap(t, p, first_point, points_to_snap, it);
}
* \return Snapped point.
*/
-Inkscape::SnappedPoint Inkscape::Snapper::constrainedSnap(PointType t,
+Inkscape::SnappedPoint Inkscape::Snapper::constrainedSnap(PointType const &t,
NR::Point const &p,
- NR::Point const &c,
+ bool const &first_point,
+ std::vector<NR::Point> &points_to_snap,
+ ConstraintLine const &c,
SPItem const *it) const
{
std::list<SPItem const *> lit;
lit.push_back(it);
- return constrainedSnap(t, p, c, lit);
+ return constrainedSnap(t, p, first_point, points_to_snap, c, lit);
}
* \return Snapped point.
*/
-Inkscape::SnappedPoint Inkscape::Snapper::constrainedSnap(PointType t,
+Inkscape::SnappedPoint Inkscape::Snapper::constrainedSnap(PointType const &t,
NR::Point const &p,
- NR::Point const &c,
+ bool const &first_point,
+ std::vector<NR::Point> &points_to_snap,
+ ConstraintLine const &c,
std::list<SPItem const *> const &it) const
{
- if (getSnapTo(t) == false) {
+ if (_enabled == false || getSnapFrom(t) == false) {
return SnappedPoint(p, NR_HUGE);
}
- return _doConstrainedSnap(p, c, it);
+ return _doConstrainedSnap(t, p, first_point, points_to_snap, c, it);
}
/*