From: dvlierop2 Date: Thu, 27 Mar 2008 20:44:53 +0000 (+0000) Subject: The deprecated version of sp_item_invoke_bbox_full (which still uses NRRects) returns... X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=fa193656dee1876dc331d9502a67b4bb21f0b160;p=inkscape.git The deprecated version of sp_item_invoke_bbox_full (which still uses NRRects) returns empty rectangles when calculating geometric bboxes of vertical or horizontal lines. A group of those lines will therefore also have an empty geometric bbox, which is wrong. We must use the new version of sp_item_invoke_bbox_full, which uses NR::Maybe instead. --- diff --git a/src/seltrans.cpp b/src/seltrans.cpp index 490ff4644..5ab99e147 100644 --- a/src/seltrans.cpp +++ b/src/seltrans.cpp @@ -278,7 +278,11 @@ void Inkscape::SelTrans::grab(NR::Point const &p, gdouble x, gdouble y, bool sho _approximate_bbox = selection->bounds(SPItem::APPROXIMATE_BBOX); // Used for correctly scaling the strokewidth _geometric_bbox = selection->bounds(SPItem::GEOMETRIC_BBOX); _point = p; - _point_geom = _geometric_bbox->min() + _geometric_bbox->dimensions() * NR::scale(x, y); + if (_geometric_bbox) { + _point_geom = _geometric_bbox->min() + _geometric_bbox->dimensions() * NR::scale(x, y); + } else { + _point_geom = p; + } // Next, get all points to consider for snapping SnapManager const &m = _desktop->namedview->snap_manager; diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 7969c1bc1..d0a1d9111 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -273,8 +273,6 @@ static gchar * sp_group_description (SPItem * item) static NR::Matrix sp_group_set_transform(SPItem *item, NR::Matrix const &xform) { - SPGroup *group = SP_GROUP(item); - Inkscape::Selection *selection = sp_desktop_selection(inkscape_active_desktop()); persp3d_split_perspectives_according_to_selection(selection); @@ -684,16 +682,21 @@ void CGroup::onModified(guint flags) { } void CGroup::calculateBBox(NRRect *bbox, NR::Matrix const &transform, unsigned const flags) { + + NR::Maybe dummy_bbox = NR::Nothing(); + GSList *l = _group->childList(false, SPObject::ActionBBox); while (l) { SPObject *o = SP_OBJECT (l->data); if (SP_IS_ITEM(o)) { SPItem *child = SP_ITEM(o); NR::Matrix const ct(child->transform * transform); - sp_item_invoke_bbox_full(child, bbox, ct, flags, FALSE); + sp_item_invoke_bbox_full(child, &dummy_bbox, ct, flags, FALSE); } l = g_slist_remove (l, o); } + + *bbox = NRRect(dummy_bbox); } void CGroup::onPrint(SPPrintContext *ctx) {