X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fguide-snapper.cpp;h=5cf97958a299390600e3c2eb0bda64dfbb301a80;hb=11c5de79de3c200331e168a745b0505a50aeffea;hp=b660bab9da473b163acc99bc54a12d94b566e1a8;hpb=00583082bf04dd7fd1729bee6489a97b2b56e4bc;p=inkscape.git diff --git a/src/guide-snapper.cpp b/src/guide-snapper.cpp index b660bab9d..5cf97958a 100644 --- a/src/guide-snapper.cpp +++ b/src/guide-snapper.cpp @@ -12,28 +12,45 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "libnr/nr-values.h" -#include "libnr/nr-point-fns.h" #include "sp-namedview.h" +#include "desktop.h" #include "sp-guide.h" -Inkscape::GuideSnapper::GuideSnapper(SPNamedView const *nv, NR::Coord const d) : LineSnapper(nv, d) +Inkscape::GuideSnapper::GuideSnapper(SnapManager *sm, Geom::Coord const d) : LineSnapper(sm, d) { } -Inkscape::GuideSnapper::LineList Inkscape::GuideSnapper::_getSnapLines(NR::Point const &/*p*/) const +/** + * \return Snap tolerance (desktop coordinates); depends on current zoom so that it's always the same in screen pixels + */ +Geom::Coord Inkscape::GuideSnapper::getSnapperTolerance() const +{ + SPDesktop const *dt = _snapmanager->getDesktop(); + double const zoom = dt ? dt->current_zoom() : 1; + return _snapmanager->snapprefs.getGuideTolerance() / zoom; +} + +bool Inkscape::GuideSnapper::getSnapperAlwaysSnap() const +{ + return _snapmanager->snapprefs.getGuideTolerance() == 10000; //TODO: Replace this threshold of 10000 by a constant; see also tolerance-slider.cpp +} + +Inkscape::GuideSnapper::LineList Inkscape::GuideSnapper::_getSnapLines(Geom::Point const &/*p*/) const { LineList s; - if ( NULL == _named_view || ThisSnapperMightSnap() == false) { + if ( NULL == _snapmanager->getNamedView() || ThisSnapperMightSnap() == false) { return s; } - for (GSList const *l = _named_view->guides; l != NULL; l = l->next) { + SPGuide const *guide_to_ignore = _snapmanager->getGuideToIgnore(); + + for (GSList const *l = _snapmanager->getNamedView()->guides; l != NULL; l = l->next) { SPGuide const *g = SP_GUIDE(l->data); - NR::Point point_on_line = (g->normal == component_vectors[NR::X]) ? NR::Point(g->position, 0) : NR::Point(0, g->position); - s.push_back(std::make_pair(g->normal, point_on_line)); + if (g != guide_to_ignore) { + s.push_back(std::make_pair(g->normal_to_line, g->point_on_line)); + } } return s; @@ -44,15 +61,32 @@ Inkscape::GuideSnapper::LineList Inkscape::GuideSnapper::_getSnapLines(NR::Point */ bool Inkscape::GuideSnapper::ThisSnapperMightSnap() const { - return _named_view == NULL ? false : (_snap_enabled && _snap_from != 0 && _named_view->showguides); + if (_snapmanager->getNamedView() == NULL) { + return false; + } + + return (_snap_enabled && _snapmanager->snapprefs.getSnapToGuides() && _snapmanager->getNamedView()->showguides); } -void Inkscape::GuideSnapper::_addSnappedLine(SnappedConstraints &sc, NR::Point const snapped_point, NR::Coord const snapped_distance, NR::Point const normal_to_line, NR::Point const point_on_line) const +void Inkscape::GuideSnapper::_addSnappedLine(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source, Geom::Point const normal_to_line, Geom::Point const point_on_line) const { - SnappedLine dummy = SnappedLine(snapped_point, snapped_distance, normal_to_line, point_on_line); + SnappedLine dummy = SnappedLine(snapped_point, snapped_distance, source, Inkscape::SNAPTARGET_GUIDE, getSnapperTolerance(), getSnapperAlwaysSnap(), normal_to_line, point_on_line); sc.guide_lines.push_back(dummy); } +void Inkscape::GuideSnapper::_addSnappedLinesOrigin(SnappedConstraints &sc, Geom::Point const origin, Geom::Coord const snapped_distance, SnapSourceType const &source) const +{ + SnappedPoint dummy = SnappedPoint(origin, source, Inkscape::SNAPTARGET_GUIDE_ORIGIN, snapped_distance, getSnapperTolerance(), getSnapperAlwaysSnap(), true); + sc.points.push_back(dummy); +} + + +void Inkscape::GuideSnapper::_addSnappedPoint(SnappedConstraints &sc, Geom::Point const snapped_point, Geom::Coord const snapped_distance, SnapSourceType const &source) const +{ + SnappedPoint dummy = SnappedPoint(snapped_point, source, Inkscape::SNAPTARGET_GUIDE, snapped_distance, getSnapperTolerance(), getSnapperAlwaysSnap(), true); + sc.points.push_back(dummy); +} + /* Local Variables: mode:c++