diff options
| author | chr <chr> | 2017-05-23 19:48:22 +0000 |
|---|---|---|
| committer | chr <chr> | 2017-05-23 19:48:22 +0000 |
| commit | dc80e5d0bf82f005628881134b929aa4838308d5 (patch) | |
| tree | 0cbe1a5aaf0673816abe5ac2674a7fc3f327b87b /src/selection-chemistry.cpp | |
| parent | object panel: don't scroll to layer when leaving object group (diff) | |
| download | inkscape-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.cpp | 39 |
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 *) |
