X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsnap.h;h=ff3da3adbcdc4f2f868ee9da7ab15465b664eca5;hb=e7eb632a79283c0b7f36036594b166e2d8c0fe06;hp=49c4987898dc8ee454404a4c40dfc7de718faf14;hpb=54ea0b53861e527030823a451265564f8c9b5584;p=inkscape.git diff --git a/src/snap.h b/src/snap.h index 49c498789..ff3da3adb 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 Johan Engelen * Copyright (C) 2000-2002 Lauris Kaplinski * * Released under GNU GPL, read the file 'COPYING' for more information @@ -20,15 +21,26 @@ #include #include #include +#include #include "grid-snapper.h" #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; Inkscape::SnappedPoint freeSnap(Inkscape::Snapper::PointType t, @@ -41,12 +53,12 @@ public: 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 +68,69 @@ 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::GridSnapper grid; ///< grid snapper + Inkscape::AxonomGridSnapper axonomgrid; ///< axonometricgrid snapper + Inkscape::GuideSnapper guide; ///< guide snapper + Inkscape::ObjectSnapper object; ///< snapper to other objects typedef std::list SnapperList; SnapperList getSnappers() const; -}; +protected: + SPNamedView const *_named_view; -/* 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 - ); - -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 */