summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2008-08-01 20:07:58 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2008-08-01 20:07:58 +0000
commitec3dd49a1ccdf9da38c5605765d5698730e77c8b (patch)
tree4ad6969a78832df79b813a2bc36978ada8f51b8a /src
parentupdate to latest 2geom (diff)
downloadinkscape-ec3dd49a1ccdf9da38c5605765d5698730e77c8b.tar.gz
inkscape-ec3dd49a1ccdf9da38c5605765d5698730e77c8b.zip
SPItem::getBounds now always returns a Geom::Rect boundingbox.
(bzr r6517)
Diffstat (limited to 'src')
-rw-r--r--src/live_effects/lpe-mirror_symmetry.cpp6
-rw-r--r--src/live_effects/lpegroupbbox.cpp9
-rw-r--r--src/sp-item.cpp11
-rw-r--r--src/sp-item.h2
4 files changed, 16 insertions, 12 deletions
diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp
index a70ab507f..834877f36 100644
--- a/src/live_effects/lpe-mirror_symmetry.cpp
+++ b/src/live_effects/lpe-mirror_symmetry.cpp
@@ -47,10 +47,10 @@ LPEMirrorSymmetry::doOnApply (SPLPEItem *lpeitem)
SPItem *item = SP_ITEM(lpeitem);
Geom::Matrix t = sp_item_i2d_affine(item);
- NR::Maybe<Geom::Rect> bbox = item->getBounds(t);
+ Geom::Rect bbox = item->getBounds(t);
- Point A(bbox->left(), bbox->bottom());
- Point B(bbox->left(), bbox->top());
+ Point A(bbox.left(), bbox.bottom());
+ Point B(bbox.left(), bbox.top());
A *= t;
B *= t;
Piecewise<D2<SBasis> > rline = Piecewise<D2<SBasis> >(D2<SBasis>(Linear(A[X], B[X]), Linear(A[Y], B[Y])));
diff --git a/src/live_effects/lpegroupbbox.cpp b/src/live_effects/lpegroupbbox.cpp
index 2ea839892..c0f1222f2 100644
--- a/src/live_effects/lpegroupbbox.cpp
+++ b/src/live_effects/lpegroupbbox.cpp
@@ -28,13 +28,10 @@ GroupBBoxEffect::original_bbox(SPLPEItem *lpeitem, bool absolute)
else {
transform = Geom::identity();
}
-
- NR::Maybe<NR::Rect> itemBBox = item->getBounds(from_2geom(transform), SPItem::GEOMETRIC_BBOX);
- // NR to Geom glue
- Geom::Rect geomBBox = Geom::Rect(itemBBox->min(), itemBBox->max());
- boundingbox_X = geomBBox[Geom::X];
- boundingbox_Y = geomBBox[Geom::Y];
+ Geom::Rect itemBBox = item->getBounds(transform, SPItem::GEOMETRIC_BBOX);
+ boundingbox_X = itemBBox[Geom::X];
+ boundingbox_Y = itemBBox[Geom::Y];
}
} // namespace LivePathEffect
diff --git a/src/sp-item.cpp b/src/sp-item.cpp
index 691d471ca..5d7177253 100644
--- a/src/sp-item.cpp
+++ b/src/sp-item.cpp
@@ -702,13 +702,20 @@ NR::Maybe<NR::Rect> SPItem::getBounds(NR::Matrix const &transform,
return r;
}
-NR::Maybe<Geom::Rect>
+/*
+ * If the item is empty, or has an empty boundingbox for another reason, this method will
+ * return an empty rectangle. I.e. "getBounds(...).isEmpty() == true".
+ */
+Geom::Rect
SPItem::getBounds(Geom::Matrix const &transform, SPItem::BBoxType type, unsigned int /*dkey*/)
const
{
NR::Maybe<NR::Rect> r = NR::Nothing();
sp_item_invoke_bbox_full(this, &r, from_2geom(transform), type, TRUE);
- return NR::Maybe<Geom::Rect>(to_2geom(*r));
+ if (r)
+ return to_2geom(*r);
+ else
+ return Geom::Rect(); // return empty rectangle
}
void
diff --git a/src/sp-item.h b/src/sp-item.h
index 814581a5d..39907999f 100644
--- a/src/sp-item.h
+++ b/src/sp-item.h
@@ -155,7 +155,7 @@ struct SPItem : public SPObject {
void lowerToBottom();
NR::Maybe<NR::Rect> getBounds(NR::Matrix const &transform, BBoxType type=APPROXIMATE_BBOX, unsigned int dkey=0) const;
- NR::Maybe<Geom::Rect> getBounds(Geom::Matrix const &transform, BBoxType type=APPROXIMATE_BBOX, unsigned int dkey=0) const;
+ Geom::Rect getBounds(Geom::Matrix const &transform, BBoxType type=APPROXIMATE_BBOX, unsigned int dkey=0) const;
sigc::connection _clip_ref_connection;
sigc::connection _mask_ref_connection;