X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsnap.h;h=e0217948fe3cfdb4b0f7a96b2841096512dd49c1;hb=724821145d62dee9f97465c706952582da6e432d;hp=49c4987898dc8ee454404a4c40dfc7de718faf14;hpb=54ea0b53861e527030823a451265564f8c9b5584;p=inkscape.git diff --git a/src/snap.h b/src/snap.h index 49c498789..e0217948f 100644 --- a/src/snap.h +++ b/src/snap.h @@ -3,13 +3,14 @@ /** * \file snap.h - * \brief Various snapping methods. + * \brief SnapManager class. * * Authors: * Lauris Kaplinski * Frank Felfe * Carl Hetherington * + * Copyright (C) 2006-2007 Johan Engelen * Copyright (C) 2000-2002 Lauris Kaplinski * * Released under GNU GPL, read the file 'COPYING' for more information @@ -20,16 +21,28 @@ #include #include #include -#include "grid-snapper.h" +#include #include "guide-snapper.h" #include "object-snapper.h" class SPNamedView; +/// Class to coordinate snapping operations + +/** + * Each SPNamedView has one of these. It offers methods to snap points to whatever + * snappers are defined (e.g. grid, guides etc.). It also allows callers to snap + * points which have undergone some transformation (e.g. translation, scaling etc.) + */ + class SnapManager { public: - bool willSnapSomething() const; + SnapManager(SPNamedView const *v); + + typedef std::list SnapperList; + + bool SomeSnapperMightSnap() const; Inkscape::SnappedPoint freeSnap(Inkscape::Snapper::PointType t, NR::Point const &p, @@ -38,15 +51,30 @@ public: Inkscape::SnappedPoint freeSnap(Inkscape::Snapper::PointType t, NR::Point const &p, std::list const &it) const; - + + Inkscape::SnappedPoint freeSnap( Inkscape::Snapper::PointType t, + NR::Point const &p, + std::list const &it, + SnapperList const &snappers ) const; + + Inkscape::SnappedPoint freeSnapAlways( Inkscape::Snapper::PointType t, + NR::Point const &p, + SPItem const *it, + SnapperList &snappers ); + + Inkscape::SnappedPoint freeSnapAlways( Inkscape::Snapper::PointType t, + NR::Point const &p, + std::list const &it, + SnapperList &snappers ); + Inkscape::SnappedPoint constrainedSnap(Inkscape::Snapper::PointType t, NR::Point const &p, - NR::Point const &c, + Inkscape::Snapper::ConstraintLine const &c, SPItem const *it) const; Inkscape::SnappedPoint constrainedSnap(Inkscape::Snapper::PointType t, NR::Point const &p, - NR::Point const &c, + Inkscape::Snapper::ConstraintLine const &c, std::list const &it) const; std::pair freeSnapTranslation(Inkscape::Snapper::PointType t, @@ -56,47 +84,67 @@ public: std::pair constrainedSnapTranslation(Inkscape::Snapper::PointType t, std::vector const &p, - NR::Point const &c, std::list const &it, + Inkscape::Snapper::ConstraintLine const &c, NR::Point const &tr) const; - Inkscape::GridSnapper grid; - Inkscape::GuideSnapper guide; - Inkscape::ObjectSnapper object; + std::pair freeSnapScale(Inkscape::Snapper::PointType t, + std::vector const &p, + std::list const &it, + NR::scale const &s, + NR::Point const &o) const; + + std::pair constrainedSnapScale(Inkscape::Snapper::PointType t, + std::vector const &p, + std::list const &it, + Inkscape::Snapper::ConstraintLine const &c, + NR::scale const &s, + NR::Point const &o) const; + + std::pair freeSnapStretch(Inkscape::Snapper::PointType t, + std::vector const &p, + std::list const &it, + NR::Coord const &s, + NR::Point const &o, + NR::Dim2 d, + bool uniform) const; + + std::pair freeSnapSkew(Inkscape::Snapper::PointType t, + std::vector const &p, + std::list const &it, + NR::Coord const &s, + NR::Point const &o, + NR::Dim2 d) const; + + Inkscape::GuideSnapper guide; ///< guide snapper + Inkscape::ObjectSnapper object; ///< snapper to other objects - typedef std::list SnapperList; SnapperList getSnappers() const; -}; - + SnapperList getGridSnappers() const; -/* Single point methods */ -NR::Coord namedview_vector_snap(SPNamedView const *nv, Inkscape::Snapper::PointType t, NR::Point &req, - NR::Point const &d, std::list const &it); -NR::Coord namedview_vector_snap(SPNamedView const *nv, Inkscape::Snapper::PointType t, NR::Point &req, - NR::Point const &d, SPItem const *it); -NR::Coord namedview_dim_snap(SPNamedView const *nv, Inkscape::Snapper::PointType t, NR::Point& req, - NR::Dim2 const dim, SPItem const *it); -NR::Coord namedview_dim_snap(SPNamedView const *nv, Inkscape::Snapper::PointType t, NR::Point& req, - NR::Dim2 const dim, std::list const &it); +protected: + SPNamedView const *_named_view; -/* List of points methods */ - -std::pair namedview_vector_snap_list(SPNamedView const *nv, - Inkscape::Snapper::PointType t, const std::vector &p, - NR::Point const &norm, NR::scale const &s, - std::list const &it - ); - -std::pair namedview_dim_snap_list_scale(SPNamedView const *nv, - Inkscape::Snapper::PointType t, const std::vector &p, - NR::Point const &norm, double const sx, - NR::Dim2 const dim, - std::list const &it); - -NR::Coord namedview_dim_snap_list_skew(SPNamedView const *nv, Inkscape::Snapper::PointType t, - const std::vector &p, - NR::Point const &norm, double const sx, NR::Dim2 const dim); +private: + enum Transformation { + TRANSLATION, + SCALE, + STRETCH, + SKEW + }; + + std::pair _snapTransformed(Inkscape::Snapper::PointType type, + std::vector const &points, + std::list const &ignore, + bool constrained, + Inkscape::Snapper::ConstraintLine const &constraint, + Transformation transformation_type, + NR::Point const &transformation, + NR::Point const &origin, + NR::Dim2 dim, + bool uniform) const; +}; #endif /* !SEEN_SNAP_H */