diff --git a/src/libnr/nr-rect.cpp b/src/libnr/nr-rect.cpp
index 70ab71850836d5b5941bcad5da75eccf08ecfdfb..1e1f3610443513441fea885abae7ebd4bf600d0c 100644 (file)
--- a/src/libnr/nr-rect.cpp
+++ b/src/libnr/nr-rect.cpp
x1(rect.max()[NR::X]), y1(rect.max()[NR::Y])
{}
-NRRect::NRRect(NR::Maybe<NR::Rect> const &rect) {
+NRRect::NRRect(boost::optional<NR::Rect> const &rect) {
if (rect) {
x0 = rect->min()[NR::X];
y0 = rect->min()[NR::Y];
}
}
-NR::Maybe<NR::Rect> NRRect::upgrade() const {
- if (nr_rect_d_test_empty(this)) {
- return NR::Nothing();
+NRRect::NRRect(Geom::OptRect const &rect) {
+ if (rect) {
+ x0 = rect->min()[Geom::X];
+ y0 = rect->min()[Geom::Y];
+ x1 = rect->max()[Geom::X];
+ y1 = rect->max()[Geom::Y];
+ } else {
+ nr_rect_d_set_empty(this);
+ }
+}
+
+boost::optional<NR::Rect> NRRect::upgrade() const {
+ if (nr_rect_d_test_empty_ptr(this)) {
+ return boost::optional<NR::Rect>();
} else {
return NR::Rect(NR::Point(x0, y0), NR::Point(x1, y1));
}
}
+Geom::OptRect NRRect::upgrade_2geom() const {
+ if (nr_rect_d_test_empty_ptr(this)) {
+ return Geom::OptRect();
+ } else {
+ return Geom::Rect(Geom::Point(x0, y0), Geom::Point(x1, y1));
+ }
+}
+
/**
* \param r0 Rectangle.
* \param r1 Another rectangle.
@@ -204,7 +223,7 @@ nr_rect_d_matrix_transform(NRRect *d, NRRect const *const s, NR::Matrix const &m
using NR::X;
using NR::Y;
- if (nr_rect_d_test_empty(s)) {
+ if (nr_rect_d_test_empty_ptr(s)) {
nr_rect_d_set_empty(d);
} else {
NR::Point const c00(NR::Point(s->x0, s->y0) * m);
@@ -224,7 +243,7 @@ nr_rect_d_matrix_transform(NRRect *d, NRRect const *const s, NR::Matrix const &m
}
NRRect *
-nr_rect_d_matrix_transform(NRRect *d, NRRect const *s, NRMatrix const *m)
+nr_rect_d_matrix_transform(NRRect *d, NRRect const *s, NR::Matrix const *m)
{
return nr_rect_d_matrix_transform(d, s, *m);
}
_max(std::max(p0[X], p1[X]), std::max(p0[Y], p1[Y]))
{}
-Rect::Rect(NRRect *r)
- : _min(r->x0, r->y0),
- _max(r->x1, r->y1)
-{}
-
-Rect::Rect(NRRectL *r)
- : _min(r->x0, r->y0),
- _max(r->x1, r->y1)
-{}
-
/** returns the four corners of the rectangle in the correct winding order */
Point Rect::corner(unsigned i) const {
switch (i % 4) {
return ( _min + _max ) / 2;
}
+Point Rect::cornerFarthestFrom(Point const &p) const {
+ Point m = midpoint();
+ unsigned i = 0;
+ if (p[X] < m[X]) {
+ i = 1;
+ }
+ if (p[Y] < m[Y]) {
+ i = 3 - i;
+ }
+ return corner(i);
+}
+
/** returns a vector from topleft to bottom right. */
Point Rect::dimensions() const {
return _max - _min;
}
/** Returns the set of points shared by both rectangles. */
-Maybe<Rect> intersection(Maybe<Rect> const & a, Maybe<Rect> const & b) {
+boost::optional<Rect> intersection(boost::optional<Rect> const & a, boost::optional<Rect> const & b) {
if ( !a || !b ) {
- return Nothing();
+ return boost::optional<Rect>();
} else {
Rect r;
for ( int i=0 ; i < 2 ; i++ ) {
r._min[i] = std::max(a->_min[i], b->_min[i]);
r._max[i] = std::min(a->_max[i], b->_max[i]);
if ( r._min[i] > r._max[i] ) {
- return Nothing();
- }
+ return boost::optional<Rect>();
+ }
}
return r;
}