X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsnapper.cpp;h=751b663e30f8393fbc83dc0d5f211a6fc892abe1;hb=58088e3477232b7af917f0a7a9b7bde3b93b764d;hp=5f5261885fa75a6fb190e833617c31bb6aecb261;hpb=de19d0a8c684298be714d18c991965b370707ed8;p=inkscape.git diff --git a/src/snapper.cpp b/src/snapper.cpp index 5f5261885..751b663e3 100644 --- a/src/snapper.cpp +++ b/src/snapper.cpp @@ -9,71 +9,21 @@ * Released under GNU GPL, read the file 'COPYING' for more information. */ -#include "libnr/nr-values.h" #include "sp-namedview.h" #include "inkscape.h" #include "desktop.h" -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 tolerance. */ -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)); - - setSnapFrom(SNAPPOINT_BBOX | SNAPPOINT_NODE, true); //Snap any point. In v0.45 and earlier, this was controlled in the preferences tab -} - -/** - * Set snap tolerance. - * \param d New snap tolerance (desktop coordinates) - */ -void Inkscape::Snapper::setSnapperTolerance(NR::Coord const d) -{ - _snapper_tolerance = d; -} - -/** - * \return Snap tolerance (desktop coordinates); depends on current zoom so that it's always the same in screen pixels - */ -NR::Coord Inkscape::Snapper::getSnapperTolerance() const -{ - return _snapper_tolerance / SP_ACTIVE_DESKTOP->current_zoom(); -} - -bool Inkscape::Snapper::getSnapperAlwaysSnap() const +Inkscape::Snapper::Snapper(SnapManager *sm, Geom::Coord const /*t*/) : + _snapmanager(sm), + _snap_enabled(true), + _snap_visible_only(true) { - return _snapper_tolerance == 10000; //TODO: Replace this threshold of 10000 by a constant; see also tolerance-slider.cpp -} - -/** - * Turn on/off snapping of specific point types. - * \param t Point type. - * \param s true to snap to this point type, otherwise false; - */ -void Inkscape::Snapper::setSnapFrom(PointType t, bool s) -{ - if (s) { - _snap_from |= t; - } else { - _snap_from &= ~t; - } -} - -/** - * \param t Point type. - * \return true if snapper will snap this type of point, otherwise false. - */ -bool Inkscape::Snapper::getSnapFrom(PointType t) const -{ - return (_snap_from & t); + g_assert(_snapmanager != NULL); } /** @@ -85,111 +35,9 @@ void Inkscape::Snapper::setEnabled(bool s) _snap_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 - * grid or guide line) - * - * \param t Point type. - * \param p Point to snap (desktop coordinates). - * \param it Item that should not be snapped to. - * \return Snapped point. - */ - -void Inkscape::Snapper::freeSnap(SnappedConstraints &sc, - - PointType const &t, - NR::Point const &p, - bool const &first_point, - 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); -} - - -/** - * 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 - * grid or guide line) - * - * \param t Point type. - * \param p Point to snap (desktop coordinates). - * \param it Items that should not be snapped to. - * \return Snapped point. - */ - -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 +void Inkscape::Snapper::setSnapVisibleOnly(bool s) { - if (_snap_enabled == false || getSnapFrom(t) == false) { - return; - } - - _doFreeSnap(sc, t, p, first_point, points_to_snap, it); -} - - - - -/** - * Try to snap a point to whatever this snapper is interested in, where - * the snap point is constrained to lie along a specified vector from the - * original point. - * - * \param p Point to snap (desktop coordinates). - * \param c Vector to constrain the snap to. - * \param it Items that should not be snapped to. - * \return Snapped point. - */ - -void Inkscape::Snapper::constrainedSnap(SnappedConstraints &sc, - - PointType const &t, - NR::Point const &p, - bool const &first_point, - std::vector &points_to_snap, - ConstraintLine const &c, - SPItem const *it) const -{ - std::list lit; - lit.push_back(it); - constrainedSnap(sc, t, p, first_point, points_to_snap, c, lit); -} - - -/** - * Try to snap a point to whatever this snapper is interested in, where - * the snap point is constrained to lie along a specified vector from the - * original point. - * - * \param p Point to snap (desktop coordinates). - * \param c Vector to constrain the snap to. - * \param it Items that should not be snapped to. - * \return Snapped point. - */ - -void Inkscape::Snapper::constrainedSnap(SnappedConstraints &sc, - PointType const &t, - NR::Point const &p, - bool const &first_point, - std::vector &points_to_snap, - ConstraintLine const &c, - std::list const &it) const -{ - if (_snap_enabled == false || getSnapFrom(t) == false) { - return; - } - - _doConstrainedSnap(sc, t, p, first_point, points_to_snap, c, it); + _snap_visible_only = s; } /*