diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2007-04-15 17:05:40 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2007-04-15 17:05:40 +0000 |
| commit | 0a7239ba0bd51bac0eabd829f3058721bdf73165 (patch) | |
| tree | dded619db176e84e3d9015b70074abe6fc02f0e9 /src/snap.cpp | |
| parent | Remove some unneeded header includes (diff) | |
| download | inkscape-0a7239ba0bd51bac0eabd829f3058721bdf73165.tar.gz inkscape-0a7239ba0bd51bac0eabd829f3058721bdf73165.zip | |
Removal of old grid code - fully enabled new grid code.
(bzr r2904)
Diffstat (limited to 'src/snap.cpp')
| -rw-r--r-- | src/snap.cpp | 97 |
1 files changed, 91 insertions, 6 deletions
diff --git a/src/snap.cpp b/src/snap.cpp index 4f871e736..1714b6b67 100644 --- a/src/snap.cpp +++ b/src/snap.cpp @@ -33,7 +33,6 @@ */ SnapManager::SnapManager(SPNamedView const *v) : - grid(v, 0), guide(v, 0), object(v, 0), _named_view(v) @@ -45,15 +44,28 @@ SnapManager::SnapManager(SPNamedView const *v) : /** * \return List of snappers that we use. */ - -SnapManager::SnapperList SnapManager::getSnappers() const +SnapManager::SnapperList +SnapManager::getSnappers() const { SnapManager::SnapperList s; - s.push_back(&grid); s.push_back(&guide); s.push_back(&object); - //FIXME: this code should do this: add new grid snappers that are active for this desktop + SnapManager::SnapperList gs = getGridSnappers(); + s.splice(s.begin(), gs); + + return s; +} + +/** + * \return List of gridsnappers that we use. + */ +SnapManager::SnapperList +SnapManager::getGridSnappers() const +{ + SnapperList s; + + //FIXME: this code should actually do this: add new grid snappers that are active for this desktop. now it just adds all gridsnappers SPDesktop* desktop = SP_ACTIVE_DESKTOP; if (desktop && desktop->gridsEnabled()) { for ( GSList const *l = _named_view->grids; l != NULL; l = l->next) { @@ -114,9 +126,28 @@ Inkscape::SnappedPoint SnapManager::freeSnap(Inkscape::Snapper::PointType t, NR::Point const &p, std::list<SPItem const *> const &it) const { + SnapperList const snappers = getSnappers(); + + return freeSnap(t, p, it, snappers); +} + +/** + * Try to snap a point to any of the specified snappers. + * + * \param t Type of point. + * \param p Point. + * \param it List of items to ignore when snapping. + * \param snappers List of snappers to try to snap to + * \return Snapped point. + */ + +Inkscape::SnappedPoint SnapManager::freeSnap(Inkscape::Snapper::PointType t, + NR::Point const &p, + std::list<SPItem const *> const &it, + SnapperList const &snappers) const +{ Inkscape::SnappedPoint r(p, NR_HUGE); - SnapperList const snappers = getSnappers(); for (SnapperList::const_iterator i = snappers.begin(); i != snappers.end(); i++) { Inkscape::SnappedPoint const s = (*i)->freeSnap(t, p, it); if (s.getDistance() < r.getDistance()) { @@ -127,6 +158,60 @@ Inkscape::SnappedPoint SnapManager::freeSnap(Inkscape::Snapper::PointType t, return r; } +/** + * Try to snap a point to any of the specified snappers. Snap always, ignoring the snap-distance + * + * \param t Type of point. + * \param p Point. + * \param it Item to ignore when snapping. + * \param snappers List of snappers to try to snap to + * \return Snapped point. + */ + +Inkscape::SnappedPoint +SnapManager::freeSnapAlways( Inkscape::Snapper::PointType t, + NR::Point const &p, + SPItem const *it, + SnapperList &snappers ) +{ + std::list<SPItem const *> lit; + lit.push_back(it); + return freeSnapAlways(t, p, lit, snappers); +} + +/** + * Try to snap a point to any of the specified snappers. Snap always, ignoring the snap-distance + * + * \param t Type of point. + * \param p Point. + * \param it List of items to ignore when snapping. + * \param snappers List of snappers to try to snap to + * \return Snapped point. + */ + +Inkscape::SnappedPoint +SnapManager::freeSnapAlways( Inkscape::Snapper::PointType t, + NR::Point const &p, + std::list<SPItem const *> const &it, + SnapperList &snappers ) +{ + Inkscape::SnappedPoint r(p, NR_HUGE); + + for (SnapperList::iterator i = snappers.begin(); i != snappers.end(); i++) { + gdouble const curr_gridsnap = (*i)->getDistance(); + const_cast<Inkscape::Snapper*> (*i)->setDistance(NR_HUGE); + Inkscape::SnappedPoint const s = (*i)->freeSnap(t, p, it); + const_cast<Inkscape::Snapper*> (*i)->setDistance(curr_gridsnap); + + if (s.getDistance() < r.getDistance()) { + r = s; + } + } + + return r; +} + + /** * Try to snap a point to any interested snappers. A snap will only occur along |
