X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fobject-snapper.h;h=4933d84598ed72ec1acce5e3ca984c282b5eed59;hb=fe22d0226d17f9a17c6b1ae3e64ba97e40136f7a;hp=b3bf481adaa05a6708b0d1af774f115e2712507e;hpb=4e33f020dd832c0fa662afd97a40d6eba7f1fade;p=inkscape.git diff --git a/src/object-snapper.h b/src/object-snapper.h index b3bf481ad..4933d8459 100644 --- a/src/object-snapper.h +++ b/src/object-snapper.h @@ -7,8 +7,9 @@ * * Authors: * Carl Hetherington + * Diederik van Lierop * - * Copyright (C) 2005 Authors + * Copyright (C) 2005 - 2008 Authors * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -16,6 +17,7 @@ #include "snapper.h" #include "sp-path.h" #include "splivarot.h" +#include "snap-candidate.h" struct SPNamedView; struct SPItem; @@ -28,111 +30,84 @@ class ObjectSnapper : public Snapper { public: - ObjectSnapper(SPNamedView const *nv, NR::Coord const d); - ~ObjectSnapper(); - - enum DimensionToSnap {SNAP_X, SNAP_Y, SNAP_XY}; - - void setSnapToItemNode(bool s) { - _snap_to_itemnode = s; - } - - bool getSnapToItemNode() const { - return _snap_to_itemnode; - } - - void setSnapToItemPath(bool s) { - _snap_to_itempath = s; - } - - bool getSnapToItemPath() const { - return _snap_to_itempath; - } - - void setSnapToBBoxNode(bool s) { - _snap_to_bboxnode = s; - } - - bool getSnapToBBoxNode() const { - return _snap_to_bboxnode; - } - - void setSnapToBBoxPath(bool s) { - _snap_to_bboxpath = s; - } - - bool getSnapToBBoxPath() const { - return _snap_to_bboxpath; - } - - void setIncludeItemCenter(bool s) { - _include_item_center = s; - } - - bool getIncludeItemCenter() const { - return _include_item_center; - } - - void setStrictSnapping(bool enabled) { - _strict_snapping = enabled; - } - - void guideSnap(SnappedConstraints &sc, - NR::Point const &p, - DimensionToSnap const snap_dim) const; - - bool ThisSnapperMightSnap() const; - + ObjectSnapper(SnapManager *sm, Geom::Coord const d); + ~ObjectSnapper(); + + void guideFreeSnap(SnappedConstraints &sc, + Geom::Point const &p, + Geom::Point const &guide_normal) const; + + void guideConstrainedSnap(SnappedConstraints &sc, + Geom::Point const &p, + Geom::Point const &guide_normal, + SnapConstraint const &c) const; + + bool ThisSnapperMightSnap() const; + + Geom::Coord getSnapperTolerance() const; //returns the tolerance of the snapper in screen pixels (i.e. independent of zoom) + bool getSnapperAlwaysSnap() const; //if true, then the snapper will always snap, regardless of its tolerance + + void freeSnap(SnappedConstraints &sc, + Inkscape::SnapCandidatePoint const &p, + Geom::OptRect const &bbox_to_snap, + std::vector const *it, + std::vector *unselected_nodes) const; + + void constrainedSnap(SnappedConstraints &sc, + Inkscape::SnapCandidatePoint const &p, + Geom::OptRect const &bbox_to_snap, + SnapConstraint const &c, + std::vector const *it, + std::vector *unselected_nodes) const; + private: - //store some lists of candidates, points and paths, so we don't have to rebuild them for each point we want to snap - std::vector *_candidates; - std::vector *_points_to_snap_to; - std::vector *_paths_to_snap_to; - void _doFreeSnap(SnappedConstraints &sc, - Inkscape::Snapper::PointType const &t, - NR::Point const &p, - bool const &first_point, - std::vector &points_to_snap, - std::list const &it) const; - - void _doConstrainedSnap(SnappedConstraints &sc, - Inkscape::Snapper::PointType const &t, - NR::Point const &p, - bool const &first_point, - std::vector &points_to_snap, - ConstraintLine const &c, - std::list const &it) const; - - void _findCandidates(SPObject* r, - std::list const &it, + //store some lists of candidates, points and paths, so we don't have to rebuild them for each point we want to snap + std::vector *_candidates; + std::vector *_points_to_snap_to; + std::vector *_paths_to_snap_to; + + void _findCandidates(SPObject* parent, + std::vector const *it, bool const &first_point, - std::vector &points_to_snap, - DimensionToSnap const snap_dim) const; - - void _snapNodes(SnappedConstraints &sc, - Inkscape::Snapper::PointType const &t, - NR::Point const &p, - bool const &first_point, - DimensionToSnap const snap_dim) const; - - void _snapPaths(SnappedConstraints &sc, - Inkscape::Snapper::PointType const &t, - NR::Point const &p, - bool const &first_point) const; - - bool _snap_to_itemnode; - bool _snap_to_itempath; - bool _snap_to_bboxnode; - bool _snap_to_bboxpath; - - //If enabled, then bbox corners will only snap to bboxes, - //and nodes will only snap to nodes and paths. We will not - //snap bbox corners to nodes, or nodes to bboxes. - //(snapping to grids and guides is not affected by this) - bool _strict_snapping; - bool _include_item_center; -}; - -} + Geom::Rect const &bbox_to_snap, + bool const _clip_or_mask, + Geom::Matrix const additional_affine) const; + + void _snapNodes(SnappedConstraints &sc, + Inkscape::SnapCandidatePoint const &p, + std::vector *unselected_nodes, + SnapConstraint const &c = SnapConstraint()) const; // in desktop coordinates + + void _snapTranslatingGuide(SnappedConstraints &sc, + Geom::Point const &p, + Geom::Point const &guide_normal) const; + + void _collectNodes(Inkscape::SnapSourceType const &t, + bool const &first_point) const; + + void _snapPaths(SnappedConstraints &sc, + Inkscape::SnapCandidatePoint const &p, // in desktop coordinates + std::vector *unselected_nodes, // in desktop coordinates + SPPath const *selected_path) const; + + void _snapPathsConstrained(SnappedConstraints &sc, + Inkscape::SnapCandidatePoint const &p, // in desktop coordinates + SnapConstraint const &c) const; + + bool isUnselectedNode(Geom::Point const &point, std::vector const *unselected_nodes) const; + + void _collectPaths(Inkscape::SnapCandidatePoint const &p, + bool const &first_point) const; + + void _clear_paths() const; + Geom::PathVector* _getBorderPathv() const; + Geom::PathVector* _getPathvFromRect(Geom::Rect const rect) const; + void _getBorderNodes(std::vector *points) const; + +}; // end of ObjectSnapper class + +void getBBoxPoints(Geom::OptRect const bbox, std::vector *points, bool const isTarget, bool const includeCorners, bool const includeLineMidpoints, bool const includeObjectMidpoints); + +} // end of namespace Inkscape #endif