diff options
| author | Marc Jeanmougin <marc@jeanmougin.fr> | 2017-05-23 20:48:47 +0000 |
|---|---|---|
| committer | Marc Jeanmougin <marcjeanmougin@free.fr> | 2017-05-23 20:48:47 +0000 |
| commit | de37ea2c3d4a1c857186dda0b113da04cd2bd79b (patch) | |
| tree | 4b52381825a1d0efcbe4cada1c4bf61ade04b6a1 /src/selection-chemistry.cpp | |
| parent | cmake/MSYS2: Include libyaml for xverb feature (diff) | |
| parent | selection chemistry: cancel if we hit top/bottom (diff) | |
| download | inkscape-de37ea2c3d4a1c857186dda0b113da04cd2bd79b.tar.gz inkscape-de37ea2c3d4a1c857186dda0b113da04cd2bd79b.zip | |
merge chr[] branch : Objects panel improvements, mem leaks.
(bzr r15700)
Diffstat (limited to 'src/selection-chemistry.cpp')
| -rw-r--r-- | src/selection-chemistry.cpp | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 5d585ab5d..b3d910700 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -1140,6 +1140,53 @@ 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 + if(document() && !skip_undo) + DocumentUndo::cancel(document()); + selection_display_message(desktop(), Inkscape::WARNING_MESSAGE, _("We hit top.")); + return; + } + } + + 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 + if(document() && !skip_undo) + DocumentUndo::cancel(document()); + selection_display_message(desktop(), Inkscape::WARNING_MESSAGE, _("We hit bottom.")); + return; + } + } + + 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 *) @@ -3175,8 +3222,11 @@ void ObjectSet::toSymbol() the_parent_repr->appendChild(clone); if( single_group && transform.isTranslation() ) { - if( !transform.isIdentity() ) - clone->setAttribute("transform", sp_svg_transform_write( transform )); + if( !transform.isIdentity() ) { + gchar *c = sp_svg_transform_write( transform ); + clone->setAttribute("transform", c); + g_free(c); + } } // Change selection to new <use> element. |
