#include <assert.h>
+#include "math/sizef.hpp"
#include "math/vector.hpp"
+#include "object/anchor_point.hpp"
+
+class Sizef;
/** This class represents a rectangle.
* (Implementation Note) We're using upper left and lower right point instead of
p2()
{ }
- Rectf(const Vector& np1, const Vector& np2)
- : p1(np1), p2(np2)
+ Rectf(const Vector& np1, const Vector& np2) :
+ p1(np1), p2(np2)
{
}
- Rectf(float x1, float y1, float x2, float y2)
- : p1(x1, y1), p2(x2, y2)
+ Rectf(float x1, float y1, float x2, float y2) :
+ p1(x1, y1), p2(x2, y2)
{
assert(p1.x <= p2.x && p1.y <= p2.y);
}
+ Rectf(const Vector& p1_, const Sizef& size);
+
float get_left() const
{ return p1.x; }
set_width(width);
set_height(height);
}
- Vector get_size()
+ Sizef get_size() const
{
- return Vector(get_width(), get_height());
+ return Sizef(get_width(), get_height());
}
void move(const Vector& v)
return true;
}
+ float distance (const Vector& other, AnchorPoint ap = ANCHOR_MIDDLE) const
+ {
+ Vector v = get_anchor_pos (*this, ap);
+ return ((v - other).norm ());
+ }
+
+ float distance (const Rectf& other, AnchorPoint ap = ANCHOR_MIDDLE) const
+ {
+ Vector v1 = get_anchor_pos (*this, ap);
+ Vector v2 = get_anchor_pos (other, ap);
+
+ return ((v1 - v2).norm ());
+ }
+
+ Rectf grown(float border) const
+ {
+ return Rectf(p1.x - border, p1.y - border,
+ p2.x + border, p2.y + border);
+ }
+
// leave these two public to save the headaches of set/get functions for such
// simple things :)