From 2819552fc4546cfb98a51e57d66858a9943c77d6 Mon Sep 17 00:00:00 2001 From: buliabyak Date: Tue, 6 May 2008 05:55:41 +0000 Subject: [PATCH] limit the change to the relative moves only --- src/ui/dialog/transformation.cpp | 123 ++++++++++++++++--------------- 1 file changed, 65 insertions(+), 58 deletions(-) diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index 5a7117db2..8dcda8dfb 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -601,72 +601,79 @@ Transformation::applyPageMove(Inkscape::Selection *selection) if (prefs_get_int_attribute_limited ("dialogs.transformation", "applyseparately", 0, 0, 1) == 0) { // move selection as a whole - if (_check_move_relative.get_active()) { - sp_selection_move_relative(selection, x, y); - } else { - NR::Maybe bbox = selection->bounds(); - if (bbox) { - sp_selection_move_relative(selection, - x - bbox->min()[NR::X], y - bbox->min()[NR::Y]); + if (_check_move_relative.get_active()) { + sp_selection_move_relative(selection, x, y); + } else { + NR::Maybe bbox = selection->bounds(); + if (bbox) { + sp_selection_move_relative(selection, + x - bbox->min()[NR::X], y - bbox->min()[NR::Y]); + } } - } } else { - // shift each object relatively to the previous one - - using Inkscape::Util::GSListConstIterator; - std::list selected; - selected.insert >(selected.end(), selection->itemList(), NULL); - if (selected.empty()) return; - - if (fabs(x) > 1e-6) { - std::vector< BBoxSort > sorted; - for (std::list::iterator it(selected.begin()); - it != selected.end(); - ++it) - { - NR::Maybe bbox = sp_item_bbox_desktop(*it); - if (bbox) { - sorted.push_back(BBoxSort(*it, *bbox, NR::X, x > 0? 1. : 0., x > 0? 0. : 1.)); + + if (_check_move_relative.get_active()) { + // shift each object relatively to the previous one + using Inkscape::Util::GSListConstIterator; + std::list selected; + selected.insert >(selected.end(), selection->itemList(), NULL); + if (selected.empty()) return; + + if (fabs(x) > 1e-6) { + std::vector< BBoxSort > sorted; + for (std::list::iterator it(selected.begin()); + it != selected.end(); + ++it) + { + NR::Maybe bbox = sp_item_bbox_desktop(*it); + if (bbox) { + sorted.push_back(BBoxSort(*it, *bbox, NR::X, x > 0? 1. : 0., x > 0? 0. : 1.)); + } + } + //sort bbox by anchors + std::sort(sorted.begin(), sorted.end()); + + double move = x; + for ( std::vector ::iterator it (sorted.begin()); + it < sorted.end(); + it ++ ) + { + sp_item_move_rel(it->item, NR::translate(move, 0)); + // move each next object by x relative to previous + move += x; } } - //sort bbox by anchors - std::sort(sorted.begin(), sorted.end()); - - double move = x; - for ( std::vector ::iterator it (sorted.begin()); - it < sorted.end(); - it ++ ) - { - sp_item_move_rel(it->item, NR::translate(move, 0)); - // move each next object by x relative to previous - move += x; - } - } - if (fabs(y) > 1e-6) { - std::vector< BBoxSort > sorted; - for (std::list::iterator it(selected.begin()); - it != selected.end(); - ++it) - { - NR::Maybe bbox = sp_item_bbox_desktop(*it); - if (bbox) { - sorted.push_back(BBoxSort(*it, *bbox, NR::Y, y > 0? 1. : 0., y > 0? 0. : 1.)); + if (fabs(y) > 1e-6) { + std::vector< BBoxSort > sorted; + for (std::list::iterator it(selected.begin()); + it != selected.end(); + ++it) + { + NR::Maybe bbox = sp_item_bbox_desktop(*it); + if (bbox) { + sorted.push_back(BBoxSort(*it, *bbox, NR::Y, y > 0? 1. : 0., y > 0? 0. : 1.)); + } + } + //sort bbox by anchors + std::sort(sorted.begin(), sorted.end()); + + double move = y; + for ( std::vector ::iterator it (sorted.begin()); + it < sorted.end(); + it ++ ) + { + sp_item_move_rel(it->item, NR::translate(0, move)); + // move each next object by x relative to previous + move += y; } } - //sort bbox by anchors - std::sort(sorted.begin(), sorted.end()); - - double move = y; - for ( std::vector ::iterator it (sorted.begin()); - it < sorted.end(); - it ++ ) - { - sp_item_move_rel(it->item, NR::translate(0, move)); - // move each next object by x relative to previous - move += y; + } else { + NR::Maybe bbox = selection->bounds(); + if (bbox) { + sp_selection_move_relative(selection, + x - bbox->min()[NR::X], y - bbox->min()[NR::Y]); } } - } sp_document_done ( sp_desktop_document (selection->desktop()) , SP_VERB_DIALOG_TRANSFORM, -- 2.30.2