Code

redo NR::Maybe to be less clever
[inkscape.git] / src / snapper.h
index 2f3c487d6b9bd672f4c987d154f07d6a201408f3..89e4f9d7288e8197d0ad536e6e798b35e95e85d9 100644 (file)
@@ -46,6 +46,8 @@ public:
 
     bool willSnapSomething() const;
 
+    void setEnabled(bool s);
+
     SnappedPoint freeSnap(PointType t,
                           NR::Point const &p,
                           SPItem const *it) const;
@@ -54,14 +56,39 @@ 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;
@@ -91,11 +118,12 @@ 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 
+    int _snap_to; ///< bitmap of point types that we will snap to
+    bool _enabled; ///< true if this snapper is enabled, otherwise false
 };
 
 }