summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMenTaLguY <mental@rydia.net>2007-03-04 19:05:38 +0000
committermental <mental@users.sourceforge.net>2007-03-04 19:05:38 +0000
commitd9f05c15b5c63cbf1b72b057c2094ca8221b02e9 (patch)
tree4caed26f09c6932f31f34a54ca28ddc7eacf58d8 /src
parentredo NR::Maybe to be less clever (diff)
downloadinkscape-d9f05c15b5c63cbf1b72b057c2094ca8221b02e9.tar.gz
inkscape-d9f05c15b5c63cbf1b72b057c2094ca8221b02e9.zip
Convert union and intersection to use NR::Maybe<NR::Rect>
(bzr r2533)
Diffstat (limited to 'src')
-rw-r--r--src/libnr/nr-rect.cpp39
-rw-r--r--src/libnr/nr-rect.h4
2 files changed, 28 insertions, 15 deletions
diff --git a/src/libnr/nr-rect.cpp b/src/libnr/nr-rect.cpp
index 460816021..c4e684f1f 100644
--- a/src/libnr/nr-rect.cpp
+++ b/src/libnr/nr-rect.cpp
@@ -260,27 +260,40 @@ void Rect::expandTo(Point p) {
}
/** Returns the set of points shared by both rectangles. */
-Maybe<Rect> Rect::intersection(const Rect &a, const Rect &b) {
- Rect r;
- for ( int i=0 ; i < 2 ; i++ ) {
- r._min[i] = MAX(a._min[i], b._min[i]);
- r._max[i] = MIN(a._max[i], b._max[i]);
-
- if ( r._min[i] > r._max[i] ) {
- return Nothing();
- }
+Maybe<Rect> Rect::intersection(Maybe<Rect> const &a, Maybe<Rect> const &b) {
+ if ( a == Nothing() || b == Nothing() ) {
+ return Nothing();
+ } else {
+ Rect const &ra=a.assume();
+ Rect const &rb=b.assume();
+ Rect r;
+ for ( int i=0 ; i < 2 ; i++ ) {
+ r._min[i] = MAX(ra._min[i], rb._min[i]);
+ r._max[i] = MIN(ra._max[i], rb._max[i]);
+ if ( r._min[i] > r._max[i] ) {
+ return Nothing();
+ }
}
return r;
+ }
}
/** returns the smallest rectangle containing both rectangles */
-Rect Rect::union_bounds(const Rect &a, const Rect &b) {
- Rect r;
+Maybe<Rect> Rect::union_bounds(Maybe<Rect> const &a, Maybe<Rect> const &b) {
+ if ( a == Nothing() ) {
+ return b;
+ } else if ( b == Nothing() ) {
+ return a;
+ } else {
+ Rect const &ra=a.assume();
+ Rect const &rb=b.assume();
+ Rect r;
for ( int i=0; i < 2 ; i++ ) {
- r._min[i] = MIN(a._min[i], b._min[i]);
- r._max[i] = MAX(a._max[i], b._max[i]);
+ r._min[i] = MIN(ra._min[i], rb._min[i]);
+ r._max[i] = MAX(ra._max[i], rb._max[i]);
}
return r;
+ }
}
} // namespace NR
diff --git a/src/libnr/nr-rect.h b/src/libnr/nr-rect.h
index e0b3f30ae..91431d0e6 100644
--- a/src/libnr/nr-rect.h
+++ b/src/libnr/nr-rect.h
@@ -181,10 +181,10 @@ public:
}
/** Returns the set of points shared by both rectangles. */
- static Maybe<Rect> intersection(Rect const &a, Rect const &b);
+ static Maybe<Rect> intersection(Maybe<Rect> const &a, Maybe<Rect> const &b);
/** Returns the smallest rectangle that encloses both rectangles. */
- static Rect union_bounds(Rect const &a, Rect const &b);
+ static Maybe<Rect> union_bounds(Maybe<Rect> const &a, Maybe<Rect> const &b);
/** Scales the rect by s, with origin at 0, 0 */
inline Rect operator*(double const s) const {