X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsnapper.cpp;h=f8f7705f23d5e3963e72f6a2e51426d0255ad4a9;hb=57eb32794c2df43d60ee8f0a9aa8576567358ce6;hp=6eb4b5204e5b5f91f139445c22cfa152e3bc6191;hpb=ce5ed3e99d287e1df46a818cd31753d8cbb301f0;p=inkscape.git diff --git a/src/snapper.cpp b/src/snapper.cpp index 6eb4b5204..f8f7705f2 100644 --- a/src/snapper.cpp +++ b/src/snapper.cpp @@ -4,6 +4,7 @@ * * Authors: * Carl Hetherington + * Diederik van Lierop * * Released under GNU GPL, read the file 'COPYING' for more information. */ @@ -20,9 +21,9 @@ Inkscape::Snapper::PointType const Inkscape::Snapper::SNAPPOINT_GUIDE = 0x4; /** * Construct new Snapper for named view. * \param nv Named view. - * \param d Snap distance. + * \param d Snap tolerance. */ -Inkscape::Snapper::Snapper(SPNamedView const *nv, NR::Coord const d) : _named_view(nv), _enabled(true), _distance(d) +Inkscape::Snapper::Snapper(SPNamedView const *nv, NR::Coord const t) : _named_view(nv), _snap_enabled(true), _snapper_tolerance(t) { g_assert(_named_view != NULL); g_assert(SP_IS_NAMEDVIEW(_named_view)); @@ -31,20 +32,25 @@ Inkscape::Snapper::Snapper(SPNamedView const *nv, NR::Coord const d) : _named_vi } /** - * Set snap distance. - * \param d New snap distance (desktop coordinates) + * Set snap tolerance. + * \param d New snap tolerance (desktop coordinates) */ -void Inkscape::Snapper::setDistance(NR::Coord const d) +void Inkscape::Snapper::setSnapperTolerance(NR::Coord const d) { - _distance = d; + _snapper_tolerance = d; } /** - * \return Snap distance (desktop coordinates); depends on current zoom so that it's always the same in screen pixels + * \return Snap tolerance (desktop coordinates); depends on current zoom so that it's always the same in screen pixels */ -NR::Coord Inkscape::Snapper::getDistance() const +NR::Coord Inkscape::Snapper::getSnapperTolerance() const { - return _distance / SP_ACTIVE_DESKTOP->current_zoom(); + return _snapper_tolerance / SP_ACTIVE_DESKTOP->current_zoom(); +} + +bool Inkscape::Snapper::getSnapperAlwaysSnap() const +{ + return _snapper_tolerance == 10000; //TODO: Replace this threshold of 10000 by a constant; see also tolerance-slider.cpp } /** @@ -76,7 +82,7 @@ bool Inkscape::Snapper::getSnapFrom(PointType t) const void Inkscape::Snapper::setEnabled(bool s) { - _enabled = s; + _snap_enabled = s; } @@ -91,20 +97,21 @@ void Inkscape::Snapper::setEnabled(bool s) * \return Snapped point. */ -void Inkscape::Snapper::freeSnap(SnappedConstraints &sc, - +void Inkscape::Snapper::freeSnap(SnappedConstraints &sc, PointType const &t, NR::Point const &p, bool const &first_point, - std::vector &points_to_snap, + std::vector &points_to_snap, SPItem const *it) const { std::list lit; - lit.push_back(it); - freeSnap(sc, t, p, first_point, points_to_snap, lit); + if (it) { + lit.push_back(it); + } + + freeSnap(sc, t, p, first_point, points_to_snap, lit, NULL); } - /** * 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 @@ -121,14 +128,15 @@ void Inkscape::Snapper::freeSnap(SnappedConstraints &sc, PointType const &t, NR::Point const &p, bool const &first_point, - std::vector &points_to_snap, - std::list const &it) const + std::vector &points_to_snap, + std::list const &it, + std::vector *unselected_nodes) const { - if (_enabled == false || getSnapFrom(t) == false) { + if (_snap_enabled == false || getSnapFrom(t) == false) { return; } - _doFreeSnap(sc, t, p, first_point, points_to_snap, it); + _doFreeSnap(sc, t, p, first_point, points_to_snap, it, unselected_nodes); } @@ -172,15 +180,14 @@ void Inkscape::Snapper::constrainedSnap(SnappedConstraints &sc, */ void Inkscape::Snapper::constrainedSnap(SnappedConstraints &sc, - PointType const &t, NR::Point const &p, bool const &first_point, - std::vector &points_to_snap, + std::vector &points_to_snap, ConstraintLine const &c, std::list const &it) const { - if (_enabled == false || getSnapFrom(t) == false) { + if (_snap_enabled == false || getSnapFrom(t) == false) { return; }