X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Frect.h;h=5c600f3dc2ed7ff4fced7254e4c9179f1d861999;hp=1373c6fc217ae267462cf5267cefa21639b66a30;hb=ea748154f1bc7dbc81cb52611a52865e63109439;hpb=7d41c1b8d1da72ef3e238f93ee7622ae9affb9de diff --git a/src/rect.h b/src/rect.h index 1373c6f..5c600f3 100644 --- a/src/rect.h +++ b/src/rect.h @@ -9,21 +9,30 @@ namespace IPDF struct Rect { Real x; Real y; Real w; Real h; - Rect() = default; // Needed so we can fread/fwrite this struct - Rect(Real _x, Real _y, Real _w, Real _h) : x(_x), y(_y), w(_w), h(_h) {} + //Rect() = default; // Needed so we can fread/fwrite this struct + Rect(Real _x=0, Real _y=0, Real _w=1, Real _h=1) : x(_x), y(_y), w(_w), h(_h) {} std::string Str() const { std::stringstream s; // float conversion needed because it is fucking impossible to get ostreams working with template classes - s << "{" << Float(x) << ", " << Float(y) << ", " << Float(w) << ", " << Float(h) << "}"; + s << "{" << Float(x) << ", " << Float(y) << ", " << Float(x + w) << ", " << Float(y + h) << " (w: " << Float(w) <<", h: " << Float(h) <<")}"; return s.str(); } inline bool PointIn(Real pt_x, Real pt_y) const { - if (pt_x < x) return false; - if (pt_y < y) return false; - if (pt_x > x + w) return false; - if (pt_y > y + h) return false; + if (pt_x <= x) return false; + if (pt_y <= y) return false; + if (pt_x >= x + w) return false; + if (pt_y >= y + h) return false; + return true; + } + + inline bool Intersects(const Rect& other) const + { + if (x + w < other.x) return false; + if (y + h < other.y) return false; + if (x > other.x + other.w) return false; + if (y > other.y + other.h) return false; return true; } };