X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fselection.cpp;h=9cef87076db5dd20c0179fd888ead40d975f9c61;hb=9dc68827cbd515262ecb8d5ae8547d9e82c72e00;hp=1e14591fae7474ffb838c274aabdf53f29328b7e;hpb=9eb3f5487e349bceb5be7b5c41b20710ee798038;p=inkscape.git diff --git a/src/selection.cpp b/src/selection.cpp index 1e14591fa..9cef87076 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -6,6 +6,7 @@ * MenTaLguY * bulia byak * Andrius R. + * Abhishek Sharma * * Copyright (C) 2006 Andrius R. * Copyright (C) 2004-2005 MenTaLguY @@ -374,7 +375,7 @@ Geom::OptRect Selection::bounds(SPItem::BBoxType type) const Geom::OptRect bbox; for ( GSList const *i = items ; i != NULL ; i = i->next ) { - bbox = unify(bbox, sp_item_bbox_desktop(SP_ITEM(i->data), type)); + bbox = unify(bbox, SP_ITEM(i->data)->getBboxDesktop(type)); } return bbox; } @@ -393,8 +394,8 @@ NRRect *Selection::boundsInDocument(NRRect *bbox, SPItem::BBoxType type) const { for ( GSList const *iter=items ; iter != NULL ; iter = iter->next ) { SPItem *item=SP_ITEM(iter->data); - Geom::Matrix i2doc(sp_item_i2doc_affine(item)); - sp_item_invoke_bbox(item, bbox, i2doc, FALSE, type); + Geom::Matrix i2doc(item->i2doc_affine()); + item->invoke_bbox( bbox, i2doc, FALSE, type); } return bbox; @@ -406,6 +407,8 @@ Geom::OptRect Selection::boundsInDocument(SPItem::BBoxType type) const { } /** Extract the position of the center from the first selected object */ +// If we have a selection of multiple items, then the center of the first item +// will be returned; this is also the case in SelTrans::centerRequest() boost::optional Selection::center() const { GSList *items = (GSList *) const_cast(this)->itemList(); Geom::Point center; @@ -424,18 +427,19 @@ boost::optional Selection::center() const { } /** - * Compute the list of points in the selection that are to be considered for snapping. + * Compute the list of points in the selection that are to be considered for snapping from. */ std::vector Selection::getSnapPoints(SnapPreferences const *snapprefs) const { GSList const *items = const_cast(this)->itemList(); SnapPreferences snapprefs_dummy = *snapprefs; // create a local copy of the snapping prefs snapprefs_dummy.setIncludeItemCenter(false); // locally disable snapping to the item center - + snapprefs_dummy.setSnapToItemNode(true); // consider any type of nodes as a snap source + snapprefs_dummy.setSnapSmoothNodes(true); // i.e. disregard the smooth / cusp node preference std::vector p; for (GSList const *iter = items; iter != NULL; iter = iter->next) { SPItem *this_item = SP_ITEM(iter->data); - sp_item_snappoints(this_item, p, &snapprefs_dummy); + this_item->getSnappoints(p, &snapprefs_dummy); //Include the transformation origin for snapping //For a selection or group only the overall origin is considered @@ -446,13 +450,18 @@ std::vector Selection::getSnapPoints(SnapPreferenc return p; } - +// TODO: both getSnapPoints and getSnapPointsConvexHull are called, subsequently. Can we do this more efficient? +// Why do we need to include the transformation center in one case and not the other? std::vector Selection::getSnapPointsConvexHull(SnapPreferences const *snapprefs) const { GSList const *items = const_cast(this)->itemList(); + SnapPreferences snapprefs_dummy = *snapprefs; // create a local copy of the snapping prefs + snapprefs_dummy.setSnapToItemNode(true); // consider any type of nodes as a snap source + snapprefs_dummy.setSnapSmoothNodes(true); // i.e. disregard the smooth / cusp node preference + std::vector p; for (GSList const *iter = items; iter != NULL; iter = iter->next) { - sp_item_snappoints(SP_ITEM(iter->data), p, snapprefs); + SP_ITEM(iter->data)->getSnappoints(p, &snapprefs_dummy); } std::vector pHull; @@ -549,4 +558,4 @@ guint Selection::numberOfParents() { 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 :