+gRegion gRegion::operator&(const gRegion &r2) const
+{
+ gRegion res;
+ res.intersect(*this, r2);
+ return res;
+}
+
+gRegion gRegion::operator-(const gRegion &r2) const
+{
+ gRegion res;
+ res.subtract(*this, r2);
+ return res;
+}
+
+gRegion gRegion::operator|(const gRegion &r2) const
+{
+ gRegion res;
+ res.merge(*this, r2);
+ return res;
+}
+
+gRegion &gRegion::operator&=(const gRegion &r2)
+{
+ gRegion res;
+ res.intersect(*this, r2);
+ return *this = res;
+}
+
+gRegion &gRegion::operator-=(const gRegion &r2)
+{
+ gRegion res;
+ res.subtract(*this, r2);
+ return *this = res;
+}
+
+gRegion &gRegion::operator|=(const gRegion &r2)
+{
+ gRegion res;
+ res.merge(*this, r2);
+ return *this = res;
+}
+
+void gRegion::moveBy(ePoint offset)
+{
+ extends.moveBy(offset);
+ unsigned int i;
+ for (i=0; i<rects.size(); ++i)
+ rects[i].moveBy(offset);
+}
+