diff --git a/src/guide-snapper.cpp b/src/guide-snapper.cpp
index fb16382d26eddc2862e6171be9d895e286991065..5cf97958a299390600e3c2eb0bda64dfbb301a80 100644 (file)
--- a/src/guide-snapper.cpp
+++ b/src/guide-snapper.cpp
* 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);
- s.push_back(std::make_pair(g->normal_to_line, g->point_on_line));
+ if (g != guide_to_ignore) {
+ s.push_back(std::make_pair(g->normal_to_line, g->point_on_line));
+ }
}
return s;
@@ -43,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++