X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsnap.h;h=e0217948fe3cfdb4b0f7a96b2841096512dd49c1;hb=724821145d62dee9f97465c706952582da6e432d;hp=d7050d8229fba0b09fcbc8eadc181c953f0fc567;hpb=c3fab1b28454fe4b855580cfa3d6339528df292a;p=inkscape.git diff --git a/src/snap.h b/src/snap.h index d7050d822..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,18 +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: SnapManager(SPNamedView const *v); - - bool willSnapSomething() const; + + typedef std::list SnapperList; + + bool SomeSnapperMightSnap() const; Inkscape::SnappedPoint freeSnap(Inkscape::Snapper::PointType t, NR::Point const &p, @@ -40,7 +51,22 @@ 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, Inkscape::Snapper::ConstraintLine const &c, @@ -75,21 +101,39 @@ public: NR::scale const &s, NR::Point const &o) const; - Inkscape::GridSnapper grid; - Inkscape::GuideSnapper guide; - Inkscape::ObjectSnapper object; + 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; + +protected: + SPNamedView const *_named_view; private: - enum Transformation - { + enum Transformation { TRANSLATION, - SCALE + SCALE, + STRETCH, + SKEW }; - + std::pair _snapTransformed(Inkscape::Snapper::PointType type, std::vector const &points, std::list const &ignore, @@ -97,34 +141,11 @@ private: Inkscape::Snapper::ConstraintLine const &constraint, Transformation transformation_type, NR::Point const &transformation, - NR::Point const &origin) const; + NR::Point const &origin, + NR::Dim2 dim, + bool uniform) 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); - -/* 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 - ); - - -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); - - #endif /* !SEEN_SNAP_H */ /*