summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f4d1a99)
raw | patch | inline | side by side (parent: f4d1a99)
author | joncruz <joncruz@users.sourceforge.net> | |
Sun, 11 Jun 2006 05:24:48 +0000 (05:24 +0000) | ||
committer | joncruz <joncruz@users.sourceforge.net> | |
Sun, 11 Jun 2006 05:24:48 +0000 (05:24 +0000) |
ChangeLog | patch | blob | history | |
src/object-snapper.cpp | patch | blob | history | |
src/selection.cpp | patch | blob | history | |
src/selection.h | patch | blob | history | |
src/seltrans.cpp | patch | blob | history |
diff --git a/ChangeLog b/ChangeLog
index 213c912bc305d69d15816f7316bdea810dd212ef..6bdb03ed6701fbdb6a39a64f9466605a6d9e6975 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+2006-06-09 Jon A. Cruz <jon@joncruz.org>
+
+ * src/object-snapper.cpp, src/selection.cpp, src/selection.h, src/seltrans.cpp:
+
+ Applied patch #1503864.
+
2006-06-09 Jon A. Cruz <jon@joncruz.org>
* src/widgets/toolbox.cpp:
diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp
index 9439fea8b0d854e526c7ccbc2763b456ee17ae14..6b51f85085e44da72335c5db9f975c2658756b45 100644 (file)
--- a/src/object-snapper.cpp
+++ b/src/object-snapper.cpp
#include "document.h"
#include "sp-namedview.h"
#include "sp-path.h"
+#include "sp-item-group.h"
#include "display/curve.h"
#include "desktop.h"
#include "inkscape.h"
std::list<SPItem const *> const &it,
NR::Point const &p) const
{
- for (SPObject* o = r->children; o != NULL; o = o->next) {
- if (SP_IS_ITEM(o)) {
+ SPDesktop const *desktop = SP_ACTIVE_DESKTOP;
+ for (SPObject* o = sp_object_first_child(r); o != NULL; o = SP_OBJECT_NEXT(o)) {
+ if (SP_IS_ITEM(o) && !SP_ITEM(o)->isLocked() && !desktop->itemIsHidden(SP_ITEM(o))) {
/* See if this item is on the ignore list */
std::list<SPItem const *>::const_iterator i = it.begin();
if (i == it.end()) {
/* See if the item is within range */
- NR::Rect const b = NR::expand(sp_item_bbox_desktop(SP_ITEM(o)), -getDistance());
- if (b.contains(p)) {
- c.push_back(SP_ITEM(o));
+ if (SP_IS_GROUP(o)) {
+ _findCandidates(c, o, it, p);
+ } else {
+ NR::Rect const b = NR::expand(sp_item_bbox_desktop(SP_ITEM(o)), -getDistance());
+ if (b.contains(p)) {
+ c.push_back(SP_ITEM(o));
+ }
}
}
- }
- _findCandidates(c, o, it, p);
+ }
}
}
diff --git a/src/selection.cpp b/src/selection.cpp
index 413048f5c230f037312914b0b1bc0a806cd6e5d4..ae11a1432717c7a69453ed42cf188a1fa755aeb5 100644 (file)
--- a/src/selection.cpp
+++ b/src/selection.cpp
return p;
}
+std::vector<NR::Point> Selection::getBBoxPointsOuter() const {
+ std::vector<NR::Point> p;
+ NR::Rect bbox = bounds();
+ p.push_back(bbox.min());
+ p.push_back(bbox.max());
+ return p;
+}
+
void Selection::_removeObjectDescendants(SPObject *obj) {
GSList *iter, *next;
for ( iter = _objs ; iter ; iter = next ) {
diff --git a/src/selection.h b/src/selection.h
index c78a1fdbb04fd09fa0219768b1addd85a55b062b..be8cd8aff520aac35e2b7e74832eafe644f89637 100644 (file)
--- a/src/selection.h
+++ b/src/selection.h
*/
std::vector<NR::Point> getBBoxPoints() const;
+ /**
+ * @return A vector containing the 2 (top-left and bottom-right)
+ * corners of the selection bounding box.
+ */
+ std::vector<NR::Point> Selection::getBBoxPointsOuter() const;
+
/**
* @brief Connects a slot to be notified of selection changes
*
diff --git a/src/seltrans.cpp b/src/seltrans.cpp
index f6134a01c985cece95299382e1af11009ca25444..6b61beac49b796eb6d804b691b7f7d59ac2208b6 100644 (file)
--- a/src/seltrans.cpp
+++ b/src/seltrans.cpp
@@ -253,8 +253,8 @@ void Inkscape::SelTrans::grab(NR::Point const &p, gdouble x, gdouble y, bool sho
_point = p;
- _snap_points = selection->getSnapPoints();
- _bbox_points = selection->getBBoxPoints();
+ _snap_points = selection->getSnapPointsConvexHull();
+ _bbox_points = selection->getBBoxPointsOuter();
gchar const *scale_origin = prefs_get_string_attribute("tools.select", "scale_origin");
bool const origin_on_bbox = (scale_origin == NULL || !strcmp(scale_origin, "bbox"));