Code

Filter effects dialog:
[inkscape.git] / src / snapper.h
index 02f7cb7e96998e6892388c326526e281a2852cba..25e345305e7e4a2bf0e199745a0fa7f2181dbc3e 100644 (file)
@@ -27,6 +27,7 @@ namespace Inkscape
 class Snapper
 {
 public:
+    Snapper() {}
     Snapper(SPNamedView const *nv, ::NR::Coord const d);
     virtual ~Snapper() {}
 
@@ -43,7 +44,13 @@ public:
     bool getSnapTo(PointType t) const;
     ::NR::Coord getDistance() const;
 
-    bool willSnapSomething() const;
+    /**
+    *  \return true if this Snapper will snap at least one kind of point.
+    */
+    virtual bool ThisSnapperMightSnap() const {return (_enabled && _snap_to != 0);} // will likely be overridden by derived classes
+
+
+    void setEnabled(bool s);
 
     SnappedPoint freeSnap(PointType t,
                           NR::Point const &p,
@@ -53,17 +60,44 @@ public:
                           NR::Point const &p,
                           std::list<SPItem const *> const &it) const;
 
+    class ConstraintLine
+    {
+    public:
+        ConstraintLine(NR::Point const &d) : _has_point(false), _direction(d) {}
+        ConstraintLine(NR::Point const &p, NR::Point const &d) : _has_point(true), _point(p), _direction(d) {}
+
+        bool hasPoint() const {
+            return _has_point;
+        }
+
+        NR::Point getPoint() const {
+            return _point;
+        }
+
+        NR::Point getDirection() const {
+            return _direction;
+        }
+        
+    private:
+
+        bool _has_point;
+        NR::Point _point;
+        NR::Point _direction;
+    };
+
     SnappedPoint constrainedSnap(PointType t,
                                  NR::Point const &p,
-                                 NR::Point const &c,
+                                 ConstraintLine const &c,
                                  SPItem const *it) const;
 
     SnappedPoint constrainedSnap(PointType t,
                                  NR::Point const &p,
-                                 NR::Point const &c,
+                                 ConstraintLine const &c,
                                  std::list<SPItem const *> const &it) const;
 protected:
     SPNamedView const *_named_view;
+    int _snap_to; ///< bitmap of point types that we will snap to
+    bool _enabled; ///< true if this snapper is enabled, otherwise false
     
 private:
 
@@ -90,11 +124,10 @@ private:
      *  \return Snapped point.
      */    
     virtual SnappedPoint _doConstrainedSnap(NR::Point const &p,
-                                            NR::Point const &c,
+                                            ConstraintLine const &c,
                                             std::list<SPItem const *> const &it) const = 0;
     
     ::NR::Coord _distance; ///< snap distance (desktop coordinates)
-    int _snap_to; ///< bitmap of point types that we will snap to 
 };
 
 }