summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 005ae8b)
raw | patch | inline | side by side (parent: 005ae8b)
author | buliabyak <buliabyak@users.sourceforge.net> | |
Wed, 26 Sep 2007 02:45:55 +0000 (02:45 +0000) | ||
committer | buliabyak <buliabyak@users.sourceforge.net> | |
Wed, 26 Sep 2007 02:45:55 +0000 (02:45 +0000) |
src/path-chemistry.cpp | patch | blob | history |
diff --git a/src/path-chemistry.cpp b/src/path-chemistry.cpp
index 7eb84b13724df0aa7770af83f9eb440bb333da7e..2d5aa9e8344f9a7835e787d029bd32a21701db25 100644 (file)
--- a/src/path-chemistry.cpp
+++ b/src/path-chemistry.cpp
}
}
- sp_selected_path_to_curves0(FALSE, 0);
-
- items = (GSList *) selection->itemList();
+ desktop->messageStack()->flash(Inkscape::IMMEDIATE_MESSAGE, _("Combining paths..."));
+ // set "busy" cursor
+ desktop->setWaitingCursor();
- items = g_slist_copy(items);
+ sp_selected_path_to_curves0(FALSE, 0);
+ items = g_slist_copy((GSList *) selection->itemList());
items = g_slist_sort(items, (GCompareFunc) sp_item_repr_compare_position);
+ selection->clear();
// remember the position of the topmost object
gint topmost = (SP_OBJECT_REPR((SPItem *) g_slist_last(items)->data))->position();
// move to the position of the topmost, reduced by the number of deleted items
repr->setPosition(topmost > 0 ? topmost + 1 : 0);
+ desktop->clearWaitingCursor();
+
sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_COMBINE,
_("Combine"));
return;
}
+ desktop->messageStack()->flash(Inkscape::IMMEDIATE_MESSAGE, _("Breaking apart paths..."));
+ // set "busy" cursor
+ desktop->setWaitingCursor();
+
bool did = false;
for (GSList *items = g_slist_copy((GSList *) selection->itemList());
}
+ desktop->clearWaitingCursor();
+
if (did) {
sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_BREAK_APART,
_("Break apart"));
@@ -261,18 +271,33 @@ sp_selected_path_to_curves0(gboolean interactive, guint32 text_grouping_policy)
}
bool did = false;
+ if (interactive) {
+ desktop->messageStack()->flash(Inkscape::IMMEDIATE_MESSAGE, _("Converting objects to paths..."));
+ // set "busy" cursor
+ desktop->setWaitingCursor();
+ }
- for (GSList *items = g_slist_copy((GSList *) selection->itemList());
+ GSList *selected = g_slist_copy((GSList *) selection->itemList());
+ GSList *to_select = NULL;
+ selection->clear();
+ GSList *items = g_slist_copy(selected);
+
+ for (;
items != NULL;
items = items->next) {
SPItem *item = SP_ITEM(items->data);
+ if (SP_IS_PATH(item) && !SP_PATH(item)->original_curve) {
+ continue; // already a path, and no path effect
+ }
+
Inkscape::XML::Node *repr = sp_selected_item_to_curved_repr(item, 0);
if (!repr)
continue;
did = true;
+ selected = g_slist_remove (selected, item);
// remember the position of the item
gint pos = SP_OBJECT_REPR(item)->position();
// remember id
char const *id = SP_OBJECT_REPR(item)->attribute("id");
- selection->remove(item);
-
// It's going to resurrect, so we delete without notifying listeners.
SP_OBJECT(item)->deleteObject(false);
@@ -295,11 +318,18 @@ sp_selected_path_to_curves0(gboolean interactive, guint32 text_grouping_policy)
/* Buglet: We don't re-add the (new version of the) object to the selection of any other
* desktops where it was previously selected. */
- selection->add(repr);
+ to_select = g_slist_prepend (to_select, repr);
Inkscape::GC::release(repr);
}
+ g_slist_free (items);
+ selection->setReprList(to_select);
+ selection->addList(selected);
+ g_slist_free (to_select);
+ g_slist_free (selected);
+
if (interactive) {
+ desktop->clearWaitingCursor();
if (did) {
sp_document_done(sp_desktop_document(desktop), SP_VERB_OBJECT_TO_CURVE,
_("Object to path"));
}
+ // set "busy" cursor
+ desktop->setWaitingCursor();
+
bool did = false;
+ desktop->messageStack()->flash(Inkscape::IMMEDIATE_MESSAGE, _("Reversing paths..."));
+
for (GSList *i = items; i != NULL; i = i->next) {
if (!SP_IS_SHAPE(i->data))
sp_curve_unref(rcurve);
}
+ desktop->clearWaitingCursor();
+
if (did) {
sp_document_done(sp_desktop_document(desktop), SP_VERB_SELECTION_REVERSE,
_("Reverse path"));