summaryrefslogtreecommitdiffstats
path: root/src/object-snapper.cpp
diff options
context:
space:
mode:
authorDiederik van Lierop <mail@diedenrezi.nl>2008-07-24 21:02:18 +0000
committerdvlierop2 <dvlierop2@users.sourceforge.net>2008-07-24 21:02:18 +0000
commit73f0b50d4c646d3358e1c2412b1dc881ad99c1fc (patch)
tree4f64618e55c5e1cf72c133309b9cb6bf2dcc4b74 /src/object-snapper.cpp
parentfix 246944 (diff)
downloadinkscape-73f0b50d4c646d3358e1c2412b1dc881ad99c1fc.tar.gz
inkscape-73f0b50d4c646d3358e1c2412b1dc881ad99c1fc.zip
Snap to page corners too (you won't notice the difference yet because it will snap to the page's sides instead as these are always closer)
(bzr r6414)
Diffstat (limited to 'src/object-snapper.cpp')
-rw-r--r--src/object-snapper.cpp57
1 files changed, 33 insertions, 24 deletions
diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp
index 2e9f1b8de..a9f13c8ab 100644
--- a/src/object-snapper.cpp
+++ b/src/object-snapper.cpp
@@ -193,6 +193,11 @@ void Inkscape::ObjectSnapper::_collectNodes(Inkscape::Snapper::PointType const &
bbox_type = (prefs_bbox == 0)?
SPItem::APPROXIMATE_BBOX : SPItem::GEOMETRIC_BBOX;
}
+
+ // Consider the page border for snapping
+ if (_snap_to_page_border) {
+ _getBorderNodes(_points_to_snap_to);
+ }
for (std::vector<SnapCandidate>::const_iterator i = _candidates->begin(); i != _candidates->end(); i++) {
//NR::Matrix i2doc(NR::identity());
@@ -302,8 +307,7 @@ static unsigned sp_bpath_length(NArtBpath const bpath[])
}
void Inkscape::ObjectSnapper::_collectPaths(Inkscape::Snapper::PointType const &t,
- bool const &first_point,
- NArtBpath const *border_bpath) const
+ bool const &first_point) const
{
// Now, let's first collect all paths to snap to. If we have a whole bunch of points to snap,
// e.g. when translating an item using the selector tool, then we will only do this for the
@@ -323,14 +327,17 @@ void Inkscape::ObjectSnapper::_collectPaths(Inkscape::Snapper::PointType const &
}
// Consider the page border for snapping
- if (border_bpath != NULL) {
- // make our own copy of the const*
- NArtBpath *new_bpath;
- unsigned const len = sp_bpath_length(border_bpath);
- new_bpath = g_new(NArtBpath, len);
- memcpy(new_bpath, border_bpath, len * sizeof(NArtBpath));
-
- _bpaths_to_snap_to->push_back(new_bpath);
+ if (_snap_to_page_border) {
+ NArtBpath const *border_bpath = _getBorderBPath();
+ if (border_bpath != NULL) {
+ // make our own copy of the const*
+ NArtBpath *new_bpath;
+ unsigned const len = sp_bpath_length(border_bpath);
+ new_bpath = g_new(NArtBpath, len);
+ memcpy(new_bpath, border_bpath, len * sizeof(NArtBpath));
+
+ _bpaths_to_snap_to->push_back(new_bpath);
+ }
}
for (std::vector<SnapCandidate>::const_iterator i = _candidates->begin(); i != _candidates->end(); i++) {
@@ -417,10 +424,9 @@ void Inkscape::ObjectSnapper::_snapPaths(SnappedConstraints &sc,
NR::Point const &p,
bool const &first_point,
std::vector<NR::Point> *unselected_nodes,
- SPPath const *selected_path,
- NArtBpath const *border_bpath) const
+ SPPath const *selected_path) const
{
- _collectPaths(t, first_point, border_bpath);
+ _collectPaths(t, first_point);
// Now we can finally do the real snapping, using the paths collected above
SnappedPoint s;
bool success = false;
@@ -568,10 +574,7 @@ void Inkscape::ObjectSnapper::_snapPathsConstrained(SnappedConstraints &sc,
ConstraintLine const &c) const
{
- // Consider the page's border for snapping to
- NArtBpath const *border_bpath = _snap_to_page_border ? _getBorderBPath() : NULL;
-
- _collectPaths(t, first_point, border_bpath);
+ _collectPaths(t, first_point);
// Now we can finally do the real snapping, using the paths collected above
@@ -647,13 +650,10 @@ void Inkscape::ObjectSnapper::freeSnap(SnappedConstraints &sc,
_findCandidates(sp_document_root(_named_view->document), it, first_point, local_bbox_to_snap, TRANSL_SNAP_XY, false, NR::identity());
}
- if (_snap_to_itemnode || _snap_to_bboxnode) {
+ if (_snap_to_itemnode || _snap_to_bboxnode || _snap_to_page_border) {
_snapNodes(sc, t, p, first_point, unselected_nodes);
}
- // Consider the page's border for snapping to
- NArtBpath const *border_bpath = _snap_to_page_border ? _getBorderBPath() : NULL;
-
if (_snap_to_itempath || _snap_to_bboxpath || _snap_to_page_border) {
unsigned n = (unselected_nodes == NULL) ? 0 : unselected_nodes->size();
if (n > 0) {
@@ -668,9 +668,9 @@ void Inkscape::ObjectSnapper::freeSnap(SnappedConstraints &sc,
g_assert(it->size() == 1);
path = SP_PATH(*it->begin());
}
- _snapPaths(sc, t, p, first_point, unselected_nodes, path, border_bpath);
+ _snapPaths(sc, t, p, first_point, unselected_nodes, path);
} else {
- _snapPaths(sc, t, p, first_point, NULL, NULL, border_bpath);
+ _snapPaths(sc, t, p, first_point, NULL, NULL);
}
}
}
@@ -742,7 +742,6 @@ void Inkscape::ObjectSnapper::guideSnap(SnappedConstraints &sc,
_findCandidates(sp_document_root(_named_view->document), &it, true, NR::Rect(p, p), snap_dim, false, NR::identity());
_snapTranslatingGuideToNodes(sc, Inkscape::Snapper::SNAPPOINT_GUIDE, p, guide_normal);
-
// _snapRotatingGuideToNodes has not been implemented yet.
}
@@ -785,6 +784,16 @@ NArtBpath const* Inkscape::ObjectSnapper::_getBorderBPath() const
return border_bpath;
}
+
+void Inkscape::ObjectSnapper::_getBorderNodes(std::vector<NR::Point> *points) const
+{
+ Geom::Coord w = sp_document_width(_named_view->document);
+ Geom::Coord h = sp_document_height(_named_view->document);
+ points->push_back(from_2geom(Geom::Point(0,0)));
+ points->push_back(from_2geom(Geom::Point(0,h)));
+ points->push_back(from_2geom(Geom::Point(w,h)));
+ points->push_back(from_2geom(Geom::Point(w,0)));
+}
/*
Local Variables:
mode:c++