diff options
| author | Diederik van Lierop <mail@diedenrezi.nl> | 2008-08-03 22:31:19 +0000 |
|---|---|---|
| committer | dvlierop2 <dvlierop2@users.sourceforge.net> | 2008-08-03 22:31:19 +0000 |
| commit | 1e5e35ca72ded3593d420906bc1a9d436aeed2db (patch) | |
| tree | d2662ca2278012d6a08d019d5d4dc49ce181e20d /src/object-snapper.h | |
| parent | update 2geom: fixes long standing bug where closed paths are not converted co... (diff) | |
| download | inkscape-1e5e35ca72ded3593d420906bc1a9d436aeed2db.tar.gz inkscape-1e5e35ca72ded3593d420906bc1a9d436aeed2db.zip | |
Refactoring the object-snapper to use 2geom paths
(bzr r6552)
Diffstat (limited to 'src/object-snapper.h')
| -rw-r--r-- | src/object-snapper.h | 133 |
1 files changed, 66 insertions, 67 deletions
diff --git a/src/object-snapper.h b/src/object-snapper.h index 7f6221f8b..603466000 100644 --- a/src/object-snapper.h +++ b/src/object-snapper.h @@ -18,7 +18,6 @@ #include "sp-path.h" #include "splivarot.h" - struct SPNamedView; struct SPItem; struct SPObject; @@ -27,57 +26,57 @@ namespace Inkscape { class SnapCandidate - + { public: - SnapCandidate(SPItem* item, bool clip_or_mask, NR::Matrix _additional_affine); - ~SnapCandidate(); - - SPItem* item; // An item that is to be considered for snapping to - bool clip_or_mask; // If true, then item refers to a clipping path or a mask - - /* To find out the absolute position of a clipping path or mask, we not only need to know - * the transformation of the clipping path or mask itself, but also the transformation of - * the object to which the clip or mask is being applied; that transformation is stored here - */ - NR::Matrix additional_affine; + SnapCandidate(SPItem* item, bool clip_or_mask, NR::Matrix _additional_affine); + ~SnapCandidate(); + + SPItem* item; // An item that is to be considered for snapping to + bool clip_or_mask; // If true, then item refers to a clipping path or a mask + + /* To find out the absolute position of a clipping path or mask, we not only need to know + * the transformation of the clipping path or mask itself, but also the transformation of + * the object to which the clip or mask is being applied; that transformation is stored here + */ + NR::Matrix additional_affine; }; class ObjectSnapper : public Snapper { public: - ObjectSnapper(SPNamedView const *nv, NR::Coord const d); - ~ObjectSnapper(); + ObjectSnapper(SPNamedView const *nv, NR::Coord const d); + ~ObjectSnapper(); - enum DimensionToSnap { - GUIDE_TRANSL_SNAP_X, // For snapping a vertical guide (normal in the X-direction) to objects, - GUIDE_TRANSL_SNAP_Y, // For snapping a horizontal guide (normal in the Y-direction) to objects - ANGLED_GUIDE_TRANSL_SNAP, // For snapping an angled guide, while translating it accross the desktop - ANGLED_GUIDE_ROT_SNAP, // For snapping an angled guide, while rotating it around some pivot point - TRANSL_SNAP_XY}; // All other cases; for snapping to objects, other than guides + enum DimensionToSnap { + GUIDE_TRANSL_SNAP_X, // For snapping a vertical guide (normal in the X-direction) to objects, + GUIDE_TRANSL_SNAP_Y, // For snapping a horizontal guide (normal in the Y-direction) to objects + ANGLED_GUIDE_TRANSL_SNAP, // For snapping an angled guide, while translating it accross the desktop + ANGLED_GUIDE_ROT_SNAP, // For snapping an angled guide, while rotating it around some pivot point + TRANSL_SNAP_XY}; // All other cases; for snapping to objects, other than guides 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 setSnapToPageBorder(bool s) {_snap_to_page_border = s;} - bool getSnapToPageBorder() const {return _snap_to_page_border;} - 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, + 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 setSnapToPageBorder(bool s) {_snap_to_page_border = s;} + bool getSnapToPageBorder() const {return _snap_to_page_border;} + 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, NR::Point const &guide_normal) const; - bool ThisSnapperMightSnap() const; - bool GuidesMightSnap() const; + bool ThisSnapperMightSnap() const; + bool GuidesMightSnap() const; - void freeSnap(SnappedConstraints &sc, + void freeSnap(SnappedConstraints &sc, Inkscape::Snapper::PointType const &t, NR::Point const &p, bool const &first_point, @@ -85,7 +84,7 @@ public: std::vector<SPItem const *> const *it, std::vector<NR::Point> *unselected_nodes) const; - void constrainedSnap(SnappedConstraints &sc, + void constrainedSnap(SnappedConstraints &sc, Inkscape::Snapper::PointType const &t, NR::Point const &p, bool const &first_point, @@ -94,13 +93,12 @@ public: std::vector<SPItem const *> const *it) 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<SnapCandidate> *_candidates; - std::vector<NR::Point> *_points_to_snap_to; - std::vector<NArtBpath*> *_bpaths_to_snap_to; - std::vector<Path*> *_paths_to_snap_to; - - void _findCandidates(SPObject* parent, + //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<SnapCandidate> *_candidates; + std::vector<NR::Point> *_points_to_snap_to; + std::vector<Geom::PathVector*> *_paths_to_snap_to; + + void _findCandidates(SPObject* parent, std::vector<SPItem const *> const *it, bool const &first_point, NR::Rect const &bbox_to_snap, @@ -108,54 +106,55 @@ private: bool const _clip_or_mask, NR::Matrix const additional_affine) const; - void _snapNodes(SnappedConstraints &sc, + void _snapNodes(SnappedConstraints &sc, Inkscape::Snapper::PointType const &t, NR::Point const &p, bool const &first_point, std::vector<NR::Point> *unselected_nodes) const; - void _snapTranslatingGuideToNodes(SnappedConstraints &sc, + void _snapTranslatingGuideToNodes(SnappedConstraints &sc, Inkscape::Snapper::PointType const &t, NR::Point const &p, NR::Point const &guide_normal) const; - void _collectNodes(Inkscape::Snapper::PointType const &t, + void _collectNodes(Inkscape::Snapper::PointType const &t, bool const &first_point) const; - void _snapPaths(SnappedConstraints &sc, + void _snapPaths(SnappedConstraints &sc, Inkscape::Snapper::PointType const &t, NR::Point const &p, bool const &first_point, std::vector<NR::Point> *unselected_nodes, SPPath const *selected_path) const; - void _snapPathsConstrained(SnappedConstraints &sc, + void _snapPathsConstrained(SnappedConstraints &sc, Inkscape::Snapper::PointType const &t, NR::Point const &p, bool const &first_point, ConstraintLine const &c) const; - bool isUnselectedNode(NR::Point const &point, std::vector<NR::Point> const *unselected_nodes) const; + bool isUnselectedNode(NR::Point const &point, std::vector<NR::Point> const *unselected_nodes) const; - void _collectPaths(Inkscape::Snapper::PointType const &t, + void _collectPaths(Inkscape::Snapper::PointType const &t, bool const &first_point) const; - void _clear_paths() const; - NArtBpath const* _getBorderBPath() const; - void _getBorderNodes(std::vector<NR::Point> *points) const; + void _clear_paths() const; + Geom::PathVector* _getBorderPathv() const; + Geom::PathVector* _getPathvFromRect(Geom::Rect const rect) const; + void _getBorderNodes(std::vector<NR::Point> *points) const; - bool _snap_to_itemnode; - bool _snap_to_itempath; - bool _snap_to_bboxnode; - bool _snap_to_bboxpath; - bool _snap_to_page_border; + bool _snap_to_itemnode; + bool _snap_to_itempath; + bool _snap_to_bboxnode; + bool _snap_to_bboxpath; + bool _snap_to_page_border; - //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; + //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; }; } |
