X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Frect.h;h=25ef94e7a3955c80f393618ab54d71d7fa2ae45f;hp=b092fbe77072359b096b31f0e64f73ead9da19cc;hb=326f04a375ce3120f7e8957e3d7cd5f296f513e3;hpb=ef0af5fd0129161a9e079bd3cd1298b53f1fe11a diff --git a/src/rect.h b/src/rect.h index b092fbe..25ef94e 100644 --- a/src/rect.h +++ b/src/rect.h @@ -6,19 +6,21 @@ namespace IPDF { - struct Rect + template + struct TRect { - Real x; Real y; Real w; Real 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) {} + T x; T y; T w; T h; + //TRect() = default; // Needed so we can fread/fwrite this struct + TRect(T _x=0, T _y=0, T _w=1, T _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(x + w) << ", " << Float(y + h) << " (w: " << Float(w) <<", h: " << Float(h) <<")}"; + s << "{" << x << ", " << y << ", " << (x + w) << ", " << (y + h) << " (w: " << w <<", h: " << h <<")}"; return s.str(); } - inline bool PointIn(Real pt_x, Real pt_y) const + inline bool PointIn(T pt_x, T pt_y) const { if (pt_x <= x) return false; if (pt_y <= y) return false; @@ -27,7 +29,7 @@ namespace IPDF return true; } - inline bool Intersects(const Rect& other) const + inline bool Intersects(const TRect& other) const { if (x + w < other.x) return false; if (y + h < other.y) return false; @@ -35,13 +37,18 @@ namespace IPDF if (y > other.y + other.h) return false; return true; } + + template TRect Convert() {return TRect(B(x), B(y), B(w), B(h));} }; - inline Rect TransformRectCoordinates(const Rect& view, const Rect& r) + + + template + inline TRect TransformRectCoordinates(const TRect & view, const TRect & r) { - Rect out; - Real w = (view.w == Real(0))?Real(1):view.w; - Real h = (view.h == Real(0))?Real(1):view.h; + TRect out; + T w = (view.w == T(0))?T(1):view.w; + T h = (view.h == T(0))?T(1):view.h; out.x = (r.x - view.x) / w; //r.x = out.x *w + view.x out.y = (r.y - view.y) / h; // r.y = out.y*h + view.y out.w = r.w / w; // r.w = out.w * w @@ -49,14 +56,18 @@ namespace IPDF return out; } - inline Vec2 TransformPointCoordinates(const Rect& view, const Vec2& v) + + template + inline Vec2 TransformPointCoordinates(const TRect & view, const Vec2& v) { Vec2 out; out.x = (v.x - view.x) / view.w; out.y = (v.y - view.y) / view.h; return out; } - + + typedef TRect Rect; + }