summaryrefslogtreecommitdiffstats
path: root/src/snapper.h
diff options
context:
space:
mode:
authorMenTaLguY <mental@rydia.net>2006-01-16 02:36:01 +0000
committermental <mental@users.sourceforge.net>2006-01-16 02:36:01 +0000
commit179fa413b047bede6e32109e2ce82437c5fb8d34 (patch)
treea5a6ac2c1708bd02288fbd8edb2ff500ff2e0916 /src/snapper.h
downloadinkscape-179fa413b047bede6e32109e2ce82437c5fb8d34.tar.gz
inkscape-179fa413b047bede6e32109e2ce82437c5fb8d34.zip
moving trunk for module inkscape
(bzr r1)
Diffstat (limited to 'src/snapper.h')
-rw-r--r--src/snapper.h113
1 files changed, 113 insertions, 0 deletions
diff --git a/src/snapper.h b/src/snapper.h
new file mode 100644
index 000000000..4c71be7f2
--- /dev/null
+++ b/src/snapper.h
@@ -0,0 +1,113 @@
+#ifndef SEEN_SNAPPER_H
+#define SEEN_SNAPPER_H
+
+/**
+ * \file src/snapper.h
+ * \brief Snapper class.
+ *
+ * Authors:
+ * Carl Hetherington <inkscape@carlh.net>
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information.
+ */
+
+#include <map>
+#include <list>
+#include "libnr/nr-coord.h"
+#include "libnr/nr-point.h"
+#include "snapped-point.h"
+
+struct SPNamedView;
+struct SPItem;
+
+namespace Inkscape
+{
+
+/// Parent for classes that can snap points to something
+class Snapper
+{
+public:
+ Snapper(SPNamedView const *nv, NR::Coord const d);
+ virtual ~Snapper() {}
+
+ /// Point types to snap.
+ typedef int PointType;
+ static const PointType SNAP_POINT;
+ static const PointType BBOX_POINT;
+
+ typedef std::pair<PointType, NR::Point> PointWithType;
+
+ void setSnapTo(PointType t, bool s);
+ void setDistance(NR::Coord d);
+
+ bool getSnapTo(PointType t) const;
+ NR::Coord getDistance() const;
+
+ bool willSnapSomething() const;
+
+ SnappedPoint freeSnap(PointType t,
+ NR::Point const &p,
+ SPItem const *it) const;
+
+ SnappedPoint freeSnap(PointType t,
+ NR::Point const &p,
+ std::list<SPItem const *> const &it) const;
+
+ SnappedPoint constrainedSnap(PointType t,
+ NR::Point const &p,
+ NR::Point const &c,
+ SPItem const *it) const;
+
+ SnappedPoint constrainedSnap(PointType t,
+ NR::Point const &p,
+ NR::Point const &c,
+ std::list<SPItem const *> const &it) const;
+protected:
+ SPNamedView const *_named_view;
+
+private:
+
+ /**
+ * Try to snap a point to whatever this snapper is interested in. Any
+ * snap that occurs will be to the nearest "interesting" thing (e.g. a
+ * grid or guide line)
+ *
+ * \param p Point to snap (desktop coordinates).
+ * \param it Items that should not be snapped to.
+ * \return Snapped point.
+ */
+ virtual SnappedPoint _doFreeSnap(NR::Point const &p,
+ std::list<SPItem const *> const &it) const = 0;
+
+ /**
+ * Try to snap a point to whatever this snapper is interested in, where
+ * the snap point is constrained to lie along a specified vector from the
+ * original point.
+ *
+ * \param p Point to snap (desktop coordinates).
+ * \param c Vector to constrain the snap to.
+ * \param it Items that should not be snapped to.
+ * \return Snapped point.
+ */
+ virtual SnappedPoint _doConstrainedSnap(NR::Point const &p,
+ NR::Point 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
+};
+
+}
+
+#endif /* !SEEN_SNAPPER_H */
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :