summaryrefslogtreecommitdiffstats
path: root/src/selection-chemistry.cpp
diff options
context:
space:
mode:
authorMarc Jeanmougin <marc@jeanmougin.fr>2017-05-23 20:48:47 +0000
committerMarc Jeanmougin <marcjeanmougin@free.fr>2017-05-23 20:48:47 +0000
commitde37ea2c3d4a1c857186dda0b113da04cd2bd79b (patch)
tree4b52381825a1d0efcbe4cada1c4bf61ade04b6a1 /src/selection-chemistry.cpp
parentcmake/MSYS2: Include libyaml for xverb feature (diff)
parentselection chemistry: cancel if we hit top/bottom (diff)
downloadinkscape-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.cpp54
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.