X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fselection-chemistry.cpp;fp=src%2Fselection-chemistry.cpp;h=d63ee7e83efe6b2452033b132de084a5277b5930;hb=9dc68827cbd515262ecb8d5ae8547d9e82c72e00;hp=bd2d2768c53d60cb43bc9ddba87e7cb95e5d3a14;hpb=072de79e6270f4137fa48a8a73491e8a0904d8f8;p=inkscape.git diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index bd2d2768c..d63ee7e83 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -9,6 +9,7 @@ * Andrius R. * Jon A. Cruz * Martin Sucha + * Abhishek Sharma * * Copyright (C) 1999-2010 authors * Copyright (C) 2001-2002 Ximian, Inc. @@ -105,6 +106,7 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include "ui/clipboard.h" +using Inkscape::DocumentUndo; using Geom::X; using Geom::Y; @@ -250,7 +252,7 @@ void sp_selection_copy_impl(GSList const *items, GSList **clip, Inkscape::XML::D GSList *sp_selection_paste_impl(SPDocument *doc, SPObject *parent, GSList **clip) { - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc); + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); GSList *copied = NULL; // add objects to document @@ -285,9 +287,9 @@ void sp_selection_delete_impl(GSList const *items, bool propagate = true, bool p sp_object_ref((SPObject *)i->data, NULL); } for (GSList const *i = items; i != NULL; i = i->next) { - SPItem *item = (SPItem *) i->data; - SP_OBJECT(item)->deleteObject(propagate, propagate_descendants); - sp_object_unref((SPObject *)item, NULL); + SPItem *item = reinterpret_cast(i->data); + item->deleteObject(propagate, propagate_descendants); + sp_object_unref(item, NULL); } } @@ -300,8 +302,8 @@ void sp_selection_delete(SPDesktop *desktop) if (tools_isactive(desktop, TOOLS_TEXT)) if (sp_text_delete_selection(desktop->event_context)) { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT, - _("Delete text")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_TEXT, + _("Delete text")); return; } @@ -326,31 +328,31 @@ void sp_selection_delete(SPDesktop *desktop) */ tools_switch( desktop, tools_active( desktop ) ); - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_DELETE, - _("Delete")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_DELETE, + _("Delete")); } void add_ids_recursive(std::vector &ids, SPObject *obj) { - if (!obj) - return; - - ids.push_back(obj->getId()); + if (obj) { + ids.push_back(obj->getId()); - if (SP_IS_GROUP(obj)) { - for (SPObject *child = obj->first_child() ; child != NULL; child = SP_OBJECT_NEXT(child) ) { - add_ids_recursive(ids, child); + if (SP_IS_GROUP(obj)) { + for (SPObject *child = obj->firstChild() ; child; child = child->getNext() ) { + add_ids_recursive(ids, child); + } } } } void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone) { - if (desktop == NULL) + if (desktop == NULL) { return; + } SPDocument *doc = desktop->doc(); - Inkscape::XML::Document* xml_doc = sp_document_repr_doc(doc); + Inkscape::XML::Document* xml_doc = doc->getReprDoc(); Inkscape::Selection *selection = sp_desktop_selection(desktop); // check if something is selected @@ -407,7 +409,7 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone) for (unsigned int j = 0; j < old_ids.size(); j++) { if (!strcmp(orig->getId(), old_ids[j])) { // we have both orig and clone in selection, relink - // std::cout << id << " old, its ori: " << SP_OBJECT_ID(orig) << "; will relink:" << new_ids[i] << " to " << new_ids[j] << "\n"; + // std::cout << id << " old, its ori: " << orig->getId() << "; will relink:" << new_ids[i] << " to " << new_ids[j] << "\n"; gchar *newref = g_strdup_printf("#%s", new_ids[j]); SPObject *new_clone = doc->getObjectById(new_ids[i]); SP_OBJECT_REPR(new_clone)->setAttribute("xlink:href", newref); @@ -415,14 +417,23 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone) g_free(newref); } } + } else if (SP_IS_OFFSET(old_clone)) { + for (guint j = 0; j < old_ids.size(); j++) { + gchar *source_href = SP_OFFSET(old_clone)->sourceHref; + if (source_href && source_href[0]=='#' && !strcmp(source_href+1, old_ids[j])) { + gchar *newref = g_strdup_printf("#%s", new_ids[j]); + doc->getObjectById(new_ids[i])->getRepr()->setAttribute("xlink:href", newref); + g_free(newref); + } + } } } } if ( !suppressDone ) { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_DUPLICATE, - _("Duplicate")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_DUPLICATE, + _("Duplicate")); } selection->setReprList(newsel); @@ -442,18 +453,17 @@ void sp_edit_clear_all(SPDesktop *dt) GSList *items = sp_item_group_item_list(SP_GROUP(dt->currentLayer())); while (items) { - SP_OBJECT(items->data)->deleteObject(); + reinterpret_cast(items->data)->deleteObject(); items = g_slist_remove(items, items->data); } - SPDocumentUndo::done(doc, SP_VERB_EDIT_CLEAR_ALL, - _("Delete all")); + DocumentUndo::done(doc, SP_VERB_EDIT_CLEAR_ALL, + _("Delete all")); } -GSList * -get_all_items(GSList *list, SPObject *from, SPDesktop *desktop, bool onlyvisible, bool onlysensitive, GSList const *exclude) +GSList *get_all_items(GSList *list, SPObject *from, SPDesktop *desktop, bool onlyvisible, bool onlysensitive, GSList const *exclude) { - for (SPObject *child = SP_OBJECT(from)->first_child() ; child != NULL; child = SP_OBJECT_NEXT(child) ) { + for ( SPObject *child = from->firstChild() ; child; child = child->getNext() ) { if (SP_IS_ITEM(child) && !desktop->isLayer(SP_ITEM(child)) && (!onlysensitive || !SP_ITEM(child)->isLocked()) && @@ -559,7 +569,7 @@ void sp_edit_invert_in_all_layers(SPDesktop *desktop) } void sp_selection_group_impl(GSList *p, Inkscape::XML::Node *group, Inkscape::XML::Document *xml_doc, SPDocument *doc) { - + p = g_slist_sort(p, (GCompareFunc) sp_repr_compare_position); // Remember the position and parent of the topmost object. @@ -623,11 +633,12 @@ void sp_selection_group_impl(GSList *p, Inkscape::XML::Node *group, Inkscape::XM void sp_selection_group(SPDesktop *desktop) { - if (desktop == NULL) + if (desktop == NULL) { return; + } SPDocument *doc = sp_desktop_document(desktop); - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc); + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); Inkscape::Selection *selection = sp_desktop_selection(desktop); @@ -638,17 +649,17 @@ void sp_selection_group(SPDesktop *desktop) } GSList const *l = (GSList *) selection->reprList(); - + GSList *p = g_slist_copy((GSList *) l); - + selection->clear(); Inkscape::XML::Node *group = xml_doc->createElement("svg:g"); sp_selection_group_impl(p, group, xml_doc, doc); - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_GROUP, - _("Group")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_GROUP, + _("Group")); selection->set(group); Inkscape::GC::release(group); @@ -708,8 +719,8 @@ void sp_selection_ungroup(SPDesktop *desktop) g_slist_free(items); - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_UNGROUP, - _("Ungroup")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_UNGROUP, + _("Ungroup")); } /** Replace all groups in the list with their member objects, recursively; returns a new list, frees old */ @@ -775,18 +786,14 @@ enclose_items(GSList const *items) return r; } -SPObject * -prev_sibling(SPObject *child) +// TODO determine if this is intentionally different from SPObject::getPrev() +SPObject *prev_sibling(SPObject *child) { - SPObject *parent = SP_OBJECT_PARENT(child); - if (!SP_IS_GROUP(parent)) { - return NULL; - } - for ( SPObject *i = parent->first_child() ; i; i = SP_OBJECT_NEXT(i) ) { - if (i->next == child) - return i; + SPObject *prev = 0; + if ( child && SP_IS_GROUP(child->parent) ) { + prev = child->getPrev(); } - return NULL; + return prev; } void @@ -821,7 +828,7 @@ sp_selection_raise(SPDesktop *desktop) // Iterate over all objects in the selection (starting from top). if (selected) { while (rev) { - SPObject *child = SP_OBJECT(rev->data); + SPObject *child = reinterpret_cast(rev->data); // for each selected object, find the next sibling for (SPObject *newref = child->next; newref; newref = newref->next) { // if the sibling is an item AND overlaps our selection, @@ -843,11 +850,9 @@ sp_selection_raise(SPDesktop *desktop) g_slist_free(rev); } - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_RAISE, - //TRANSLATORS: only translate "string" in "context|string". - // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS - // "Raise" means "to raise an object" in the undo history - Q_("undo action|Raise")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_RAISE, + //TRANSLATORS: "Raise" means "to raise an object" in the undo history + C_("Undo action", "Raise")); } void sp_selection_raise_to_top(SPDesktop *desktop) @@ -881,8 +886,8 @@ void sp_selection_raise_to_top(SPDesktop *desktop) g_slist_free(rl); - SPDocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT, - _("Raise to top")); + DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT, + _("Raise to top")); } void @@ -918,7 +923,7 @@ sp_selection_lower(SPDesktop *desktop) // Iterate over all objects in the selection (starting from top). if (selected) { while (rev) { - SPObject *child = SP_OBJECT(rev->data); + SPObject *child = reinterpret_cast(rev->data); // for each selected object, find the prev sibling for (SPObject *newref = prev_sibling(child); newref; newref = prev_sibling(newref)) { // if the sibling is an item AND overlaps our selection, @@ -944,8 +949,8 @@ sp_selection_lower(SPDesktop *desktop) g_slist_free(rev); } - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_LOWER, - _("Lower")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_SELECTION_LOWER, + _("Lower")); } void sp_selection_lower_to_bottom(SPDesktop *desktop) @@ -981,7 +986,7 @@ void sp_selection_lower_to_bottom(SPDesktop *desktop) pp = document->getObjectByRepr(sp_repr_parent(repr)); minpos = 0; g_assert(SP_IS_GROUP(pp)); - pc = pp->first_child(); + pc = pp->firstChild(); while (!SP_IS_ITEM(pc)) { minpos += 1; pc = pc->next; @@ -991,22 +996,24 @@ void sp_selection_lower_to_bottom(SPDesktop *desktop) g_slist_free(rl); - SPDocumentUndo::done(document, SP_VERB_SELECTION_TO_BACK, - _("Lower to bottom")); + DocumentUndo::done(document, SP_VERB_SELECTION_TO_BACK, + _("Lower to bottom")); } void sp_undo(SPDesktop *desktop, SPDocument *) { - if (!SPDocumentUndo::undo(sp_desktop_document(desktop))) - desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Nothing to undo.")); + if (!DocumentUndo::undo(sp_desktop_document(desktop))) { + desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Nothing to undo.")); + } } void sp_redo(SPDesktop *desktop, SPDocument *) { - if (!SPDocumentUndo::redo(sp_desktop_document(desktop))) - desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Nothing to redo.")); + if (!DocumentUndo::redo(sp_desktop_document(desktop))) { + desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Nothing to redo.")); + } } void sp_selection_cut(SPDesktop *desktop) @@ -1022,16 +1029,16 @@ SPCSSAttr * take_style_from_item(SPItem *item) { // write the complete cascaded style, context-free - SPCSSAttr *css = sp_css_attr_from_object(SP_OBJECT(item), SP_STYLE_FLAG_ALWAYS); + SPCSSAttr *css = sp_css_attr_from_object(item, SP_STYLE_FLAG_ALWAYS); if (css == NULL) return NULL; - if ((SP_IS_GROUP(item) && SP_OBJECT(item)->children) || - (SP_IS_TEXT(item) && SP_OBJECT(item)->children && SP_OBJECT(item)->children->next == NULL)) { + if ((SP_IS_GROUP(item) && item->children) || + (SP_IS_TEXT(item) && item->children && item->children->next == NULL)) { // if this is a text with exactly one tspan child, merge the style of that tspan as well // If this is a group, merge the style of its topmost (last) child with style - for (SPObject *last_element = item->lastChild(); last_element != NULL; last_element = SP_OBJECT_PREV(last_element)) { - if (SP_OBJECT_STYLE(last_element) != NULL) { + for (SPObject *last_element = item->lastChild(); last_element != NULL; last_element = last_element->getPrev()) { + if ( last_element->style ) { SPCSSAttr *temp = sp_css_attr_from_object(last_element, SP_STYLE_FLAG_IFSET); if (temp) { sp_repr_css_merge(css, temp); @@ -1066,7 +1073,7 @@ void sp_selection_paste(SPDesktop *desktop, bool in_place) { Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get(); if (cm->paste(desktop, in_place)) { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE, _("Paste")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE, _("Paste")); } } @@ -1074,7 +1081,7 @@ void sp_selection_paste_style(SPDesktop *desktop) { Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get(); if (cm->pasteStyle(desktop)) { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_STYLE, _("Paste style")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_STYLE, _("Paste style")); } } @@ -1083,8 +1090,8 @@ void sp_selection_paste_livepatheffect(SPDesktop *desktop) { Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get(); if (cm->pastePathEffect(desktop)) { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_LIVEPATHEFFECT, - _("Paste live path effect")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_LIVEPATHEFFECT, + _("Paste live path effect")); } } @@ -1116,8 +1123,8 @@ void sp_selection_remove_livepatheffect(SPDesktop *desktop) } - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_REMOVE_LIVEPATHEFFECT, - _("Remove live path effect")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_REMOVE_LIVEPATHEFFECT, + _("Remove live path effect")); } void sp_selection_remove_filter(SPDesktop *desktop) @@ -1137,8 +1144,8 @@ void sp_selection_remove_filter(SPDesktop *desktop) sp_desktop_set_style(desktop, css); sp_repr_css_attr_unref(css); - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_REMOVE_FILTER, - _("Remove filter")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_REMOVE_FILTER, + _("Remove filter")); } @@ -1146,8 +1153,8 @@ void sp_selection_paste_size(SPDesktop *desktop, bool apply_x, bool apply_y) { Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get(); if (cm->pasteSize(desktop, false, apply_x, apply_y)) { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_SIZE, - _("Paste size")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_SIZE, + _("Paste size")); } } @@ -1155,8 +1162,8 @@ void sp_selection_paste_size_separately(SPDesktop *desktop, bool apply_x, bool a { Inkscape::UI::ClipboardManager *cm = Inkscape::UI::ClipboardManager::get(); if (cm->pasteSize(desktop, true, apply_x, apply_y)) { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_SIZE_SEPARATELY, - _("Paste size separately")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_PASTE_SIZE_SEPARATELY, + _("Paste size separately")); } } @@ -1176,7 +1183,7 @@ void sp_selection_to_next_layer(SPDesktop *dt, bool suppressDone) SPObject *next=Inkscape::next_layer(dt->currentRoot(), dt->currentLayer()); if (next) { GSList *temp_clip = NULL; - sp_selection_copy_impl(items, &temp_clip, sp_document_repr_doc(dt->doc())); + sp_selection_copy_impl(items, &temp_clip, dt->doc()->getReprDoc()); sp_selection_delete_impl(items, false, false); next=Inkscape::next_layer(dt->currentRoot(), dt->currentLayer()); // Fixes bug 1482973: crash while moving layers GSList *copied; @@ -1191,8 +1198,8 @@ void sp_selection_to_next_layer(SPDesktop *dt, bool suppressDone) if (temp_clip) g_slist_free(temp_clip); if (next) dt->setCurrentLayer(next); if ( !suppressDone ) { - SPDocumentUndo::done(sp_desktop_document(dt), SP_VERB_LAYER_MOVE_TO_NEXT, - _("Raise to next layer")); + DocumentUndo::done(sp_desktop_document(dt), SP_VERB_LAYER_MOVE_TO_NEXT, + _("Raise to next layer")); } } else { no_more = true; @@ -1221,7 +1228,7 @@ void sp_selection_to_prev_layer(SPDesktop *dt, bool suppressDone) SPObject *next=Inkscape::previous_layer(dt->currentRoot(), dt->currentLayer()); if (next) { GSList *temp_clip = NULL; - sp_selection_copy_impl(items, &temp_clip, sp_document_repr_doc(dt->doc())); // we're in the same doc, so no need to copy defs + sp_selection_copy_impl(items, &temp_clip, dt->doc()->getReprDoc()); // we're in the same doc, so no need to copy defs sp_selection_delete_impl(items, false, false); next=Inkscape::previous_layer(dt->currentRoot(), dt->currentLayer()); // Fixes bug 1482973: crash while moving layers GSList *copied; @@ -1236,8 +1243,8 @@ void sp_selection_to_prev_layer(SPDesktop *dt, bool suppressDone) if (temp_clip) g_slist_free(temp_clip); if (next) dt->setCurrentLayer(next); if ( !suppressDone ) { - SPDocumentUndo::done(sp_desktop_document(dt), SP_VERB_LAYER_MOVE_TO_PREV, - _("Lower to previous layer")); + DocumentUndo::done(sp_desktop_document(dt), SP_VERB_LAYER_MOVE_TO_PREV, + _("Lower to previous layer")); } } else { no_more = true; @@ -1339,7 +1346,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons // we're moving both a clone and its original or any ancestor in clone chain? bool transform_clone_with_original = selection_contains_original(item, selection); // ...both a text-on-path and its path? - bool transform_textpath_with_path = (SP_IS_TEXT_TEXTPATH(item) && selection->includes( sp_textpath_get_path_item(SP_TEXTPATH(SP_OBJECT(item)->first_child())) )); + bool transform_textpath_with_path = (SP_IS_TEXT_TEXTPATH(item) && selection->includes( sp_textpath_get_path_item(SP_TEXTPATH(item->firstChild())) )); // ...both a flowtext and its frame? bool transform_flowtext_with_frame = (SP_IS_FLOWTEXT(item) && selection->includes( SP_FLOWTEXT(item)->get_frame(NULL))); // (only the first frame is checked so far) // ...both an offset and its source? @@ -1374,16 +1381,17 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons * Same for linked offset if we are also moving its source: do not move it. */ if (transform_textpath_with_path || transform_offset_with_source) { // Restore item->transform field from the repr, in case it was changed by seltrans. - SP_OBJECT(item)->readAttr( "transform"); + SP_OBJECT(item)->readAttr( "transform" ); } else if (transform_flowtext_with_frame) { // apply the inverse of the region's transform to the so that the flow remains // the same (even though the output itself gets transformed) - for (SPObject *region = item->firstChild() ; region ; region = SP_OBJECT_NEXT(region)) { - if (!SP_IS_FLOWREGION(region) && !SP_IS_FLOWREGIONEXCLUDE(region)) - continue; - for (SPObject *use = region->firstChild() ; use ; use = SP_OBJECT_NEXT(use)) { - if (!SP_IS_USE(use)) continue; - SP_USE(use)->doWriteTransform(SP_OBJECT_REPR(use), item->transform.inverse(), NULL, compensate); + for ( SPObject *region = item->firstChild() ; region ; region = region->getNext() ) { + if (SP_IS_FLOWREGION(region) || SP_IS_FLOWREGIONEXCLUDE(region)) { + for ( SPObject *use = region->firstChild() ; use ; use = use->getNext() ) { + if ( SP_IS_USE(use) ) { + SP_USE(use)->doWriteTransform(use->getRepr(), item->transform.inverse(), NULL, compensate); + } + } } } } else if (transform_clone_with_original) { @@ -1392,7 +1400,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons // transform and its move compensation are both cancelled out. // restore item->transform field from the repr, in case it was changed by seltrans - SP_OBJECT(item)->readAttr( "transform"); + SP_OBJECT(item)->readAttr( "transform" ); // calculate the matrix we need to apply to the clone to cancel its induced transform from its original Geom::Matrix parent2dt = SP_ITEM(SP_OBJECT_PARENT(item))->i2d_affine(); @@ -1434,7 +1442,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Matrix cons // center by the same matrix (only necessary for non-translations) if (set_i2d && item->isCenterSet() && !(affine.isTranslation() || affine.isIdentity())) { item->setCenter(old_center * affine); - SP_OBJECT(item)->updateRepr(); + item->updateRepr(); } } } @@ -1452,8 +1460,8 @@ void sp_selection_remove_transform(SPDesktop *desktop) l = l->next; } - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_OBJECT_FLATTEN, - _("Remove transform")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_OBJECT_FLATTEN, + _("Remove transform")); } void @@ -1554,9 +1562,9 @@ void sp_selection_rotate_90(SPDesktop *desktop, bool ccw) sp_item_rotate_rel(item, rot_90); } - SPDocumentUndo::done(sp_desktop_document(desktop), - ccw ? SP_VERB_OBJECT_ROTATE_90_CCW : SP_VERB_OBJECT_ROTATE_90_CW, - ccw ? _("Rotate 90° CCW") : _("Rotate 90° CW")); + DocumentUndo::done(sp_desktop_document(desktop), + ccw ? SP_VERB_OBJECT_ROTATE_90_CCW : SP_VERB_OBJECT_ROTATE_90_CW, + ccw ? _("Rotate 90° CCW") : _("Rotate 90° CW")); } void @@ -1572,12 +1580,12 @@ sp_selection_rotate(Inkscape::Selection *selection, gdouble const angle_degrees) sp_selection_rotate_relative(selection, *center, angle_degrees); - SPDocumentUndo::maybe_done(sp_desktop_document(selection->desktop()), - ( ( angle_degrees > 0 ) - ? "selector:rotate:ccw" - : "selector:rotate:cw" ), - SP_VERB_CONTEXT_SELECT, - _("Rotate")); + DocumentUndo::maybeDone(sp_desktop_document(selection->desktop()), + ( ( angle_degrees > 0 ) + ? "selector:rotate:ccw" + : "selector:rotate:cw" ), + SP_VERB_CONTEXT_SELECT, + _("Rotate")); } // helper function: @@ -1619,12 +1627,12 @@ sp_selection_rotate_screen(Inkscape::Selection *selection, gdouble angle) sp_selection_rotate_relative(selection, *center, zangle); - SPDocumentUndo::maybe_done(sp_desktop_document(selection->desktop()), - ( (angle > 0) - ? "selector:rotate:ccw" - : "selector:rotate:cw" ), - SP_VERB_CONTEXT_SELECT, - _("Rotate by pixels")); + DocumentUndo::maybeDone(sp_desktop_document(selection->desktop()), + ( (angle > 0) + ? "selector:rotate:ccw" + : "selector:rotate:cw" ), + SP_VERB_CONTEXT_SELECT, + _("Rotate by pixels")); } void @@ -1649,12 +1657,12 @@ sp_selection_scale(Inkscape::Selection *selection, gdouble grow) double const times = 1.0 + grow / max_len; sp_selection_scale_relative(selection, center, Geom::Scale(times, times)); - SPDocumentUndo::maybe_done(sp_desktop_document(selection->desktop()), - ( (grow > 0) - ? "selector:scale:larger" - : "selector:scale:smaller" ), - SP_VERB_CONTEXT_SELECT, - _("Scale")); + DocumentUndo::maybeDone(sp_desktop_document(selection->desktop()), + ( (grow > 0) + ? "selector:scale:larger" + : "selector:scale:smaller" ), + SP_VERB_CONTEXT_SELECT, + _("Scale")); } void @@ -1678,8 +1686,8 @@ sp_selection_scale_times(Inkscape::Selection *selection, gdouble times) Geom::Point const center(sel_bbox->midpoint()); sp_selection_scale_relative(selection, center, Geom::Scale(times, times)); - SPDocumentUndo::done(sp_desktop_document(selection->desktop()), SP_VERB_CONTEXT_SELECT, - _("Scale by whole factor")); + DocumentUndo::done(sp_desktop_document(selection->desktop()), SP_VERB_CONTEXT_SELECT, + _("Scale by whole factor")); } void @@ -1693,14 +1701,14 @@ sp_selection_move(SPDesktop *desktop, gdouble dx, gdouble dy) sp_selection_move_relative(selection, dx, dy); if (dx == 0) { - SPDocumentUndo::maybe_done(sp_desktop_document(desktop), "selector:move:vertical", SP_VERB_CONTEXT_SELECT, - _("Move vertically")); + DocumentUndo::maybeDone(sp_desktop_document(desktop), "selector:move:vertical", SP_VERB_CONTEXT_SELECT, + _("Move vertically")); } else if (dy == 0) { - SPDocumentUndo::maybe_done(sp_desktop_document(desktop), "selector:move:horizontal", SP_VERB_CONTEXT_SELECT, - _("Move horizontally")); + DocumentUndo::maybeDone(sp_desktop_document(desktop), "selector:move:horizontal", SP_VERB_CONTEXT_SELECT, + _("Move horizontally")); } else { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SELECT, - _("Move")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SELECT, + _("Move")); } } @@ -1719,14 +1727,14 @@ sp_selection_move_screen(SPDesktop *desktop, gdouble dx, gdouble dy) sp_selection_move_relative(selection, zdx, zdy); if (dx == 0) { - SPDocumentUndo::maybe_done(sp_desktop_document(desktop), "selector:move:vertical", SP_VERB_CONTEXT_SELECT, - _("Move vertically by pixels")); + DocumentUndo::maybeDone(sp_desktop_document(desktop), "selector:move:vertical", SP_VERB_CONTEXT_SELECT, + _("Move vertically by pixels")); } else if (dy == 0) { - SPDocumentUndo::maybe_done(sp_desktop_document(desktop), "selector:move:horizontal", SP_VERB_CONTEXT_SELECT, - _("Move horizontally by pixels")); + DocumentUndo::maybeDone(sp_desktop_document(desktop), "selector:move:horizontal", SP_VERB_CONTEXT_SELECT, + _("Move horizontally by pixels")); } else { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SELECT, - _("Move")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_CONTEXT_SELECT, + _("Move")); } } @@ -1743,12 +1751,12 @@ SPItem *next_item_from_list(SPDesktop *desktop, GSList const *items, SPObject *r struct Forward { typedef SPObject *Iterator; - static Iterator children(SPObject *o) { return o->first_child(); } - static Iterator siblings_after(SPObject *o) { return SP_OBJECT_NEXT(o); } + static Iterator children(SPObject *o) { return o->firstChild(); } + static Iterator siblings_after(SPObject *o) { return o->getNext(); } static void dispose(Iterator /*i*/) {} static SPObject *object(Iterator i) { return i; } - static Iterator next(Iterator i) { return SP_OBJECT_NEXT(i); } + static Iterator next(Iterator i) { return i->getNext(); } }; struct ListReverse { @@ -1771,10 +1779,14 @@ struct ListReverse { private: static GSList *make_list(SPObject *object, SPObject *limit) { - GSList *list=NULL; + GSList *list = NULL; while ( object != limit ) { + if (!object) { // TODO check if this happens in practice + g_warning("Unexpected list overrun"); + break; + } list = g_slist_prepend(list, object); - object = SP_OBJECT_NEXT(object); + object = object->getNext(); } return list; } @@ -2008,15 +2020,15 @@ void scroll_to_show_item(SPDesktop *desktop, SPItem *item) } -void -sp_selection_clone(SPDesktop *desktop) +void sp_selection_clone(SPDesktop *desktop) { - if (desktop == NULL) + if (desktop == NULL) { return; + } Inkscape::Selection *selection = sp_desktop_selection(desktop); - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(desktop->doc()); + Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc(); // check if something is selected if (selection->isEmpty()) { @@ -2053,10 +2065,8 @@ sp_selection_clone(SPDesktop *desktop) Inkscape::GC::release(clone); } - // TRANSLATORS: only translate "string" in "context|string". - // For more details, see http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html#Q-:CAPS - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_CLONE, - Q_("action|Clone")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_CLONE, + C_("Action", "Clone")); selection->setReprList(newsel); @@ -2096,7 +2106,7 @@ sp_selection_relink(SPDesktop *desktop) continue; SP_OBJECT_REPR(item)->setAttribute("xlink:href", newref); - SP_OBJECT(item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); relinked = true; } @@ -2105,8 +2115,8 @@ sp_selection_relink(SPDesktop *desktop) if (!relinked) { desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("No clones to relink in the selection.")); } else { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_UNLINK_CLONE, - _("Relink clone")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_UNLINK_CLONE, + _("Relink clone")); } } @@ -2134,10 +2144,10 @@ sp_selection_unlink(SPDesktop *desktop) SPItem *item = (SPItem *) items->data; if (SP_IS_TEXT(item)) { - SPObject *tspan = sp_tref_convert_to_tspan(SP_OBJECT(item)); + SPObject *tspan = sp_tref_convert_to_tspan(item); if (tspan) { - SP_OBJECT(item)->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); } // Set unlink to true, and fall into the next if which @@ -2154,8 +2164,13 @@ sp_selection_unlink(SPDesktop *desktop) SPItem *unlink; if (SP_IS_USE(item)) { unlink = sp_use_unlink(SP_USE(item)); + // Unable to unlink use (external or invalid href?) + if (!unlink) { + new_select = g_slist_prepend(new_select, item); + continue; + } } else /*if (SP_IS_TREF(use))*/ { - unlink = SP_ITEM(sp_tref_convert_to_tspan(SP_OBJECT(item))); + unlink = SP_ITEM(sp_tref_convert_to_tspan(item)); } unlinked = true; @@ -2172,8 +2187,8 @@ sp_selection_unlink(SPDesktop *desktop) desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("No clones to unlink in the selection.")); } - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_UNLINK_CLONE, - _("Unlink clone")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_UNLINK_CLONE, + _("Unlink clone")); } void @@ -2200,7 +2215,7 @@ sp_select_clone_original(SPDesktop *desktop) } else if (SP_IS_OFFSET(item) && SP_OFFSET(item)->sourceHref) { original = sp_offset_get_source(SP_OFFSET(item)); } else if (SP_IS_TEXT_TEXTPATH(item)) { - original = sp_textpath_get_path_item(SP_TEXTPATH(SP_OBJECT(item)->first_child())); + original = sp_textpath_get_path_item(SP_TEXTPATH(SP_OBJECT(item)->firstChild())); } else if (SP_IS_FLOWTEXT(item)) { original = SP_FLOWTEXT(item)->get_frame(NULL); // first frame only } else { // it's an object that we don't know what to do with @@ -2251,11 +2266,12 @@ sp_select_clone_original(SPDesktop *desktop) void sp_selection_to_marker(SPDesktop *desktop, bool apply) { - if (desktop == NULL) + if (desktop == NULL) { return; + } SPDocument *doc = sp_desktop_document(desktop); - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc); + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); Inkscape::Selection *selection = sp_desktop_selection(desktop); @@ -2265,7 +2281,7 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply) return; } - doc->ensure_up_to_date(); + doc->ensureUpToDate(); Geom::OptRect r = selection->bounds(SPItem::RENDERING_BBOX); boost::optional c = selection->center(); if ( !r || !c ) { @@ -2302,7 +2318,7 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply) if (apply) { // delete objects so that their clones don't get alerted; this object will be restored shortly for (GSList *i = items; i != NULL; i = i->next) { - SPObject *item = SP_OBJECT(i->data); + SPObject *item = reinterpret_cast(i->data); item->deleteObject(false); } } @@ -2328,8 +2344,8 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply) g_slist_free(items); - SPDocumentUndo::done(doc, SP_VERB_EDIT_SELECTION_2_MARKER, - _("Objects to marker")); + DocumentUndo::done(doc, SP_VERB_EDIT_SELECTION_2_MARKER, + _("Objects to marker")); } static void sp_selection_to_guides_recursive(SPItem *item, bool deleteitem, bool wholegroups) { @@ -2341,7 +2357,7 @@ static void sp_selection_to_guides_recursive(SPItem *item, bool deleteitem, bool item->convert_item_to_guides(); if (deleteitem) { - SP_OBJECT(item)->deleteObject(true); + item->deleteObject(true); } } } @@ -2369,17 +2385,18 @@ void sp_selection_to_guides(SPDesktop *desktop) sp_selection_to_guides_recursive(SP_ITEM(i->data), deleteitem, wholegroups); } - SPDocumentUndo::done(doc, SP_VERB_EDIT_SELECTION_2_GUIDES, _("Objects to guides")); + DocumentUndo::done(doc, SP_VERB_EDIT_SELECTION_2_GUIDES, _("Objects to guides")); } void sp_selection_tile(SPDesktop *desktop, bool apply) { - if (desktop == NULL) + if (desktop == NULL) { return; + } SPDocument *doc = sp_desktop_document(desktop); - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc); + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); Inkscape::Selection *selection = sp_desktop_selection(desktop); @@ -2389,7 +2406,7 @@ sp_selection_tile(SPDesktop *desktop, bool apply) return; } - doc->ensure_up_to_date(); + doc->ensureUpToDate(); Geom::OptRect r = selection->bounds(SPItem::RENDERING_BBOX); if ( !r ) { return; @@ -2426,7 +2443,7 @@ sp_selection_tile(SPDesktop *desktop, bool apply) if (apply) { // delete objects so that their clones don't get alerted; this object will be restored shortly for (GSList *i = items; i != NULL; i = i->next) { - SPObject *item = SP_OBJECT(i->data); + SPObject *item = reinterpret_cast(i->data); item->deleteObject(false); } } @@ -2472,18 +2489,18 @@ sp_selection_tile(SPDesktop *desktop, bool apply) g_slist_free(items); - SPDocumentUndo::done(doc, SP_VERB_EDIT_TILE, - _("Objects to pattern")); + DocumentUndo::done(doc, SP_VERB_EDIT_TILE, + _("Objects to pattern")); } -void -sp_selection_untile(SPDesktop *desktop) +void sp_selection_untile(SPDesktop *desktop) { - if (desktop == NULL) + if (desktop == NULL) { return; + } SPDocument *doc = sp_desktop_document(desktop); - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc); + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); Inkscape::Selection *selection = sp_desktop_selection(desktop); @@ -2503,12 +2520,12 @@ sp_selection_untile(SPDesktop *desktop) SPItem *item = (SPItem *) items->data; - SPStyle *style = SP_OBJECT_STYLE(item); + SPStyle *style = item->style; if (!style || !style->fill.isPaintserver()) continue; - SPObject *server = SP_OBJECT_STYLE_FILL_SERVER(item); + SPPaintServer *server = item->style->getFillPaintServer(); if (!SP_IS_PATTERN(server)) continue; @@ -2520,7 +2537,7 @@ sp_selection_untile(SPDesktop *desktop) Geom::Matrix pat_transform = to_2geom(pattern_patternTransform(SP_PATTERN(server))); pat_transform *= item->transform; - for (SPObject *child = SP_OBJECT(pattern)->first_child() ; child != NULL; child = SP_OBJECT_NEXT(child) ) { + for (SPObject *child = pattern->firstChild() ; child != NULL; child = child->next ) { Inkscape::XML::Node *copy = SP_OBJECT_REPR(child)->duplicate(xml_doc); SPItem *i = SP_ITEM(desktop->currentLayer()->appendChildRepr(copy)); @@ -2528,7 +2545,7 @@ sp_selection_untile(SPDesktop *desktop) // use SPObject::setid when mental finishes it to steal ids of // this is needed to make sure the new item has curve (simply requestDisplayUpdate does not work) - doc->ensure_up_to_date(); + doc->ensureUpToDate(); Geom::Matrix transform( i->transform * pat_transform ); i->doWriteTransform(SP_OBJECT_REPR(i), transform); @@ -2544,8 +2561,8 @@ sp_selection_untile(SPDesktop *desktop) if (!did) { desktop->messageStack()->flash(Inkscape::ERROR_MESSAGE, _("No pattern fills in the selection.")); } else { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_UNTILE, - _("Pattern to objects")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_EDIT_UNTILE, + _("Pattern to objects")); selection->setList(new_select); } } @@ -2596,16 +2613,13 @@ sp_selection_get_export_hints(Inkscape::Selection *selection, char const **filen } } -void -sp_document_get_export_hints(SPDocument *doc, char const **filename, float *xdpi, float *ydpi) +void sp_document_get_export_hints(SPDocument *doc, char const **filename, float *xdpi, float *ydpi) { - Inkscape::XML::Node * repr = sp_document_repr_root(doc); - gchar const *dpi_string; + Inkscape::XML::Node * repr = doc->getReprRoot(); *filename = repr->attribute("inkscape:export-filename"); - dpi_string = NULL; - dpi_string = repr->attribute("inkscape:export-xdpi"); + gchar const *dpi_string = repr->attribute("inkscape:export-xdpi"); if (dpi_string != NULL) { *xdpi = atof(dpi_string); } @@ -2617,14 +2631,14 @@ sp_document_get_export_hints(SPDocument *doc, char const **filename, float *xdpi } } -void -sp_selection_create_bitmap_copy(SPDesktop *desktop) +void sp_selection_create_bitmap_copy(SPDesktop *desktop) { - if (desktop == NULL) + if (desktop == NULL) { return; + } SPDocument *document = sp_desktop_document(desktop); - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(document); + Inkscape::XML::Document *xml_doc = document->getReprDoc(); Inkscape::Selection *selection = sp_desktop_selection(desktop); @@ -2640,7 +2654,7 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop) // Get the bounding box of the selection NRRect bbox; - document->ensure_up_to_date(); + document->ensureUpToDate(); selection->bounds(&bbox); if (NR_RECT_DFLS_TEST_EMPTY(&bbox)) { desktop->clearWaitingCursor(); @@ -2661,7 +2675,7 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop) // Create the filename. gchar *const basename = g_strdup_printf("%s-%s-%u.png", - document->name, + document->getName(), SP_OBJECT_REPR(items->data)->attribute("id"), current); // Imagemagick is known not to handle spaces in filenames, so we replace anything but letters, @@ -2670,8 +2684,8 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop) // Build the complete path by adding document base dir, if set, otherwise home dir gchar * directory = NULL; - if (SP_DOCUMENT_URI(document)) { - directory = g_dirname(SP_DOCUMENT_URI(document)); + if ( document->getURI() ) { + directory = g_dirname( document->getURI() ); } if (directory == NULL) { directory = homedir_path(NULL); @@ -2807,8 +2821,8 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop) gdk_pixbuf_unref(pb); // Complete undoable transaction - SPDocumentUndo::done(document, SP_VERB_SELECTION_CREATE_BITMAP, - _("Create bitmap")); + DocumentUndo::done(document, SP_VERB_SELECTION_CREATE_BITMAP, + _("Create bitmap")); } desktop->clearWaitingCursor(); @@ -2826,14 +2840,14 @@ sp_selection_create_bitmap_copy(SPDesktop *desktop) * If \a apply_clip_path parameter is true, clipPath is created, otherwise mask * */ -void -sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_layer) +void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_layer) { - if (desktop == NULL) + if (desktop == NULL) { return; + } SPDocument *doc = sp_desktop_document(desktop); - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc); + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); Inkscape::Selection *selection = sp_desktop_selection(desktop); @@ -2855,12 +2869,12 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la } // /END FIXME - doc->ensure_up_to_date(); + doc->ensureUpToDate(); GSList *items = g_slist_copy((GSList *) selection->itemList()); items = g_slist_sort(items, (GCompareFunc) sp_object_compare_position); - + // See lp bug #542004 selection->clear(); @@ -2869,7 +2883,7 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la GSList *apply_to_items = NULL; GSList *items_to_delete = NULL; GSList *items_to_select = NULL; - + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool topmost = prefs->getBool("/options/maskobject/topmost", true); bool remove_original = prefs->getBool("/options/maskobject/remove", true); @@ -2878,13 +2892,13 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la if (apply_to_layer) { // all selected items are used for mask, which is applied to a layer apply_to_items = g_slist_prepend(apply_to_items, desktop->currentLayer()); - + for (GSList *i = items; i != NULL; i = i->next) { Inkscape::XML::Node *dup = (SP_OBJECT_REPR(i->data))->duplicate(xml_doc); mask_items = g_slist_prepend(mask_items, dup); - SPObject *item = SP_OBJECT(i->data); - if (remove_original) { + SPObject *item = reinterpret_cast(i->data); + if (remove_original) { items_to_delete = g_slist_prepend(items_to_delete, item); } else { @@ -2898,7 +2912,7 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la mask_items = g_slist_prepend(mask_items, dup); if (remove_original) { - SPObject *item = SP_OBJECT(i->data); + SPObject *item = reinterpret_cast(i->data); items_to_delete = g_slist_prepend(items_to_delete, item); } @@ -2917,7 +2931,7 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la mask_items = g_slist_prepend(mask_items, dup); if (remove_original) { - SPObject *item = SP_OBJECT(i->data); + SPObject *item = reinterpret_cast(i->data); items_to_delete = g_slist_prepend(items_to_delete, item); } } @@ -2942,7 +2956,7 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la reprs_to_group = g_slist_reverse(reprs_to_group); sp_selection_group_impl(reprs_to_group, group, xml_doc, doc); - + reprs_to_group = NULL; // apply clip/mask only to newly created group @@ -3012,29 +3026,31 @@ sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_la g_slist_free(apply_to_items); for (GSList *i = items_to_delete; NULL != i; i = i->next) { - SPObject *item = SP_OBJECT(i->data); + SPObject *item = reinterpret_cast(i->data); item->deleteObject(false); items_to_select = g_slist_remove(items_to_select, item); } g_slist_free(items_to_delete); - + items_to_select = g_slist_reverse(items_to_select); - + selection->addList(items_to_select); g_slist_free(items_to_select); - if (apply_clip_path) - SPDocumentUndo::done(doc, SP_VERB_OBJECT_SET_CLIPPATH, _("Set clipping path")); - else - SPDocumentUndo::done(doc, SP_VERB_OBJECT_SET_MASK, _("Set mask")); + if (apply_clip_path) { + DocumentUndo::done(doc, SP_VERB_OBJECT_SET_CLIPPATH, _("Set clipping path")); + } else { + DocumentUndo::done(doc, SP_VERB_OBJECT_SET_MASK, _("Set mask")); + } } void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) { - if (desktop == NULL) + if (desktop == NULL) { return; + } SPDocument *doc = sp_desktop_document(desktop); - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(doc); + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); Inkscape::Selection *selection = sp_desktop_selection(desktop); // check if something is selected @@ -3046,18 +3062,18 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool remove_original = prefs->getBool("/options/maskobject/remove", true); bool ungroup_masked = prefs->getBool("/options/maskobject/ungrouping", true); - doc->ensure_up_to_date(); + doc->ensureUpToDate(); gchar const *attributeName = apply_clip_path ? "clip-path" : "mask"; std::map referenced_objects; GSList *items = g_slist_copy((GSList *) selection->itemList()); selection->clear(); - + GSList *items_to_ungroup = NULL; GSList *items_to_select = g_slist_copy(items); - items_to_select = g_slist_reverse(items_to_select); - + items_to_select = g_slist_reverse(items_to_select); + // SPObject* refers to a group containing the clipped path or mask itself, // whereas SPItem* refers to the item being clipped or masked @@ -3099,7 +3115,7 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) { for ( std::map::iterator it = referenced_objects.begin() ; it != referenced_objects.end() ; ++it) { SPObject *obj = (*it).first; // Group containing the clipped paths or masks GSList *items_to_move = NULL; - for (SPObject *child = obj->first_child() ; child != NULL; child = SP_OBJECT_NEXT(child) ) { + for ( SPObject *child = obj->firstChild() ; child; child = child->getNext() ) { // Collect all clipped paths and masks within a single group Inkscape::XML::Node *copy = SP_OBJECT_REPR(child)->duplicate(xml_doc); items_to_move = g_slist_prepend(items_to_move, copy); @@ -3143,16 +3159,17 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) { } g_slist_free(items_to_ungroup); - + // rebuild selection items_to_select = g_slist_reverse(items_to_select); selection->addList(items_to_select); g_slist_free(items_to_select); - if (apply_clip_path) - SPDocumentUndo::done(doc, SP_VERB_OBJECT_UNSET_CLIPPATH, _("Release clipping path")); - else - SPDocumentUndo::done(doc, SP_VERB_OBJECT_UNSET_MASK, _("Release mask")); + if (apply_clip_path) { + DocumentUndo::done(doc, SP_VERB_OBJECT_UNSET_CLIPPATH, _("Release clipping path")); + } else { + DocumentUndo::done(doc, SP_VERB_OBJECT_UNSET_MASK, _("Release mask")); + } } /** @@ -3189,8 +3206,8 @@ void verb_fit_canvas_to_selection(SPDesktop *const desktop) { if (fit_canvas_to_selection(desktop)) { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_SELECTION, - _("Fit Page to Selection")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_SELECTION, + _("Fit Page to Selection")); } } @@ -3203,7 +3220,7 @@ fit_canvas_to_drawing(SPDocument *doc, bool with_margins) { g_return_val_if_fail(doc != NULL, false); - doc->ensure_up_to_date(); + doc->ensureUpToDate(); SPItem const *const root = SP_ITEM(doc->root); Geom::OptRect const bbox(root->getBounds(root->i2d_affine())); if (bbox) { @@ -3218,8 +3235,8 @@ void verb_fit_canvas_to_drawing(SPDesktop *desktop) { if (fit_canvas_to_drawing(sp_desktop_document(desktop))) { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_DRAWING, - _("Fit Page to Drawing")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_DRAWING, + _("Fit Page to Drawing")); } } @@ -3239,8 +3256,8 @@ void fit_canvas_to_selection_or_drawing(SPDesktop *desktop) { ? fit_canvas_to_drawing(doc, true) : fit_canvas_to_selection(desktop, true) ); if (changed) { - SPDocumentUndo::done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_SELECTION_OR_DRAWING, - _("Fit Page to Selection or Drawing")); + DocumentUndo::done(sp_desktop_document(desktop), SP_VERB_FIT_CANVAS_TO_SELECTION_OR_DRAWING, + _("Fit Page to Selection or Drawing")); } }; @@ -3308,4 +3325,4 @@ void unhide_all_in_all_layers(SPDesktop *dt) { fill-column:99 End: */ -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 : +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :