X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Frect.hh;h=f5e755ccb9ce9f6600cf029856a2a9a2a7161d4c;hb=7d215bd255d0744101b9ceb52c235bdc985fa034;hp=a11f3a25e202ec2c9ae638c5588dc6858a61efd5;hpb=37e56007680a6664967e0e71ac52981654def6a6;p=chaz%2Fopenbox diff --git a/otk/rect.hh b/otk/rect.hh index a11f3a25..f5e755cc 100644 --- a/otk/rect.hh +++ b/otk/rect.hh @@ -1,66 +1,39 @@ -// -*- mode: C++; indent-tabs-mode: nil; -*- -#ifndef __rect_hh -#define __rect_hh +// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- +#ifndef __rect_hh +#define __rect_hh -extern "C" { -#include -} - -#include +#include "point.hh" +#include "size.hh" namespace otk { class Rect { + Point _p; + Size _s; public: - inline Rect(void) : _x1(0), _y1(0), _x2(0), _y2(0) { } - inline Rect(int __x, int __y, unsigned int __w, unsigned int __h) - : _x1(__x), _y1(__y), _x2(__w + __x - 1), _y2(__h + __y - 1) { } - inline explicit Rect(const XRectangle& xrect) - : _x1(xrect.x), _y1(xrect.y), _x2(xrect.width + xrect.x - 1), - _y2(xrect.height + xrect.y - 1) { } - - inline int left(void) const { return _x1; } - inline int top(void) const { return _y1; } - inline int right(void) const { return _x2; } - inline int bottom(void) const { return _y2; } - - inline int x(void) const { return _x1; } - inline int y(void) const { return _y1; } - void setX(int __x); - void setY(int __y); - void setPos(int __x, int __y); - - inline unsigned int width(void) const { return _x2 - _x1 + 1; } - inline unsigned int height(void) const { return _y2 - _y1 + 1; } - void setWidth(unsigned int __w); - void setHeight(unsigned int __h); - void setSize(unsigned int __w, unsigned int __h); - - void setRect(int __x, int __y, unsigned int __w, unsigned int __h); - - void setCoords(int __l, int __t, int __r, int __b); - - inline bool operator==(const Rect &a) - { return _x1 == a._x1 && _y1 == a._y1 && _x2 == a._x2 && _y2 == a._y2; } - inline bool operator!=(const Rect &a) { return ! operator==(a); } - - Rect operator|(const Rect &a) const; - Rect operator&(const Rect &a) const; - inline Rect &operator|=(const Rect &a) { *this = *this | a; return *this; } - inline Rect &operator&=(const Rect &a) { *this = *this & a; return *this; } - - inline bool valid(void) const { return _x2 > _x1 && _y2 > _y1; } - - bool intersects(const Rect &a) const; - bool contains(int __x, int __y) const; - bool contains(const Rect &a) const; - -private: - int _x1, _y1, _x2, _y2; + Rect() : _p(), _s() {} + Rect(const Point &p, const Size &s) : _p(p), _s(s) {} + Rect(const Rect &r) : _p(r._p), _s(r._s) {} + Rect(int x, int y, int w, int h) + : _p(x, y), _s(w, h) {} + + inline int x() const { return _p.x(); } + inline int y() const { return _p.y(); } + inline int width() const { return _s.width(); } + inline int height() const { return _s.height(); } + + inline int left() const { return _p.x(); } + inline int top() const { return _p.y(); } + inline int right() const { return _p.x() + _s.width() - 1; } + inline int bottom() const { return _p.y() + _s.height() - 1; } + + inline const Point& position() const { return _p; } + inline const Size& size() const { return _s; } + + bool operator==(const Rect &o) const { return _p == o._p && _s == o._s; } + bool operator!=(const Rect &o) const { return _p != o._p || _s != o._s; } }; -typedef std::vector RectList; - } #endif // __rect_hh