X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Frect.h;h=7a0f1e1e286a134cda959cb5be7ec3778886443e;hp=7b7adc1b2270c81a5858c15269eb2b955367e269;hb=3837f6a4e6ade33b9c57b1207f9f0774212c29b5;hpb=813591a7d8a7364003233939f52b0031f3a40d20 diff --git a/src/rect.h b/src/rect.h index 7b7adc1..7a0f1e1 100644 --- a/src/rect.h +++ b/src/rect.h @@ -15,18 +15,49 @@ namespace IPDF { 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; } }; + + inline Rect TransformRectCoordinates(const Rect& view, const Rect& r) + { + Rect out; + Real w = (view.w == Real(0))?Real(1):view.w; + Real h = (view.h == Real(0))?Real(1):view.h; + out.x = (r.x - view.x) / w; + out.y = (r.y - view.y) / h; + out.w = r.w / w; + out.h = r.h / h; + return out; + } + + inline Vec2 TransformPointCoordinates(const Rect& view, const Vec2& v) + { + Vec2 out; + out.x = (v.x - view.x) / view.w; + out.y = (v.y - view.y) / view.h; + return out; + } + + } #endif //_RECT_H