summaryrefslogtreecommitdiffstats
path: root/src/selection-chemistry.cpp
diff options
context:
space:
mode:
authorchr <chr>2017-05-23 19:48:22 +0000
committerchr <chr>2017-05-23 19:48:22 +0000
commitdc80e5d0bf82f005628881134b929aa4838308d5 (patch)
tree0cbe1a5aaf0673816abe5ac2674a7fc3f327b87b /src/selection-chemistry.cpp
parentobject panel: don't scroll to layer when leaving object group (diff)
downloadinkscape-dc80e5d0bf82f005628881134b929aa4838308d5.tar.gz
inkscape-dc80e5d0bf82f005628881134b929aa4838308d5.zip
selection chemistry: implement z-stack order
Bug #1395452 "raise and lower objects" used to stack objects above/below the next overlapping object, which makes it impossible to change the z-order of objects that don't overlap. Fixes also the object manager panel Conflicts: src/selection-chemistry.cpp src/selection-chemistry.h src/sp-item.cpp (bzr r15698.1.7)
Diffstat (limited to 'src/selection-chemistry.cpp')
-rw-r--r--src/selection-chemistry.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp
index 39846ba2c..7d5d921b0 100644
--- a/src/selection-chemistry.cpp
+++ b/src/selection-chemistry.cpp
@@ -1140,6 +1140,45 @@ void ObjectSet::lowerToBottom(bool skip_undo){
}
}
+void ObjectSet::stackUp(bool skip_undo) {
+ if (isEmpty()) {
+ selection_display_message(desktop(), Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to stack up."));
+ return;
+ }
+
+ std::vector<SPItem*> selection(items().begin(), items().end());
+ sort(selection.begin(), selection.end(), sp_item_repr_compare_position_bool);
+
+ for (auto item: selection | boost::adaptors::reversed) {
+ if (!item->raiseOne()) // stop if top was reached
+ break;
+ }
+
+ if(document() && !skip_undo)
+ DocumentUndo::done(document(), SP_VERB_SELECTION_STACK_UP,
+ //TRANSLATORS: undo history: "stack up" means to raise an object of its ordinal position by 1
+ C_("Undo action", "stack up"));
+}
+
+void ObjectSet::stackDown(bool skip_undo) {
+ if (isEmpty()) {
+ selection_display_message(desktop(), Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to stack down."));
+ return;
+ }
+
+ std::vector<SPItem*> selection(items().begin(), items().end());
+ sort(selection.begin(), selection.end(), sp_item_repr_compare_position_bool);
+
+ for (auto item: selection) {
+ if (!item->lowerOne()) // stop if bottom was reached
+ break;
+ }
+
+ if(document() && !skip_undo)
+ DocumentUndo::done(document(), SP_VERB_SELECTION_STACK_DOWN,
+ //TRANSLATORS: undo history: "stack down" means to lower an object of its ordinal position by 1
+ C_("Undo action", "stack down"));
+}
void
sp_undo(SPDesktop *desktop, SPDocument *)