X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Frect.cpp;h=c38c0741e08d2d08b0568afbd4e4034c45151c97;hb=3c890e51a9763ffcee49e15753453a7da248272b;hp=54f44ddf73abcb404c95d1b6d397674a90a16b8c;hpb=41644f6a841b45cb6f1f7a96c93fd550f67a7974;p=architektonas diff --git a/src/rect.cpp b/src/rect.cpp index 54f44dd..c38c074 100644 --- a/src/rect.cpp +++ b/src/rect.cpp @@ -12,14 +12,15 @@ // JLH 11/10/2016 Created this file // + #include "rect.h" -//#include +#include Rect::Rect(): l(0), r(0), t(0), b(0) { } -Rect::Rect(double ll, double rr, double tt, double bb): +Rect::Rect(double tt, double ll, double bb, double rr): l(ll), r(rr), t(tt), b(bb) { Normalize(); @@ -30,6 +31,10 @@ Rect::Rect(Point tl, Point br): l(tl.x), r(br.x), t(tl.y), b(br.y) Normalize(); } +Rect::Rect(Point p): l(p.x), r(p.x), t(p.y), b(p.y) +{ +} + Rect & Rect::operator*=(double scale) { l *= scale; @@ -58,6 +63,45 @@ Rect & Rect::operator|=(Rect r2) return *this; } +Rect & Rect::operator+=(Point p) +{ + if (p.x < l) + l = p.x; + + if (p.x > r) + r = p.x; + + if (p.y < b) + b = p.y; + + if (p.y > t) + t = p.y; + + return *this; +} + +// +// We use this to give a rect an array-like access, which allows access of the +// rect in TLBR order (from 0 to 3). Also, values greater than 3 are treated +// as mod 4. +// +double & Rect::operator[](int idx) +{ + idx = idx % 4; + + switch (idx) + { + case 0: + return t; + case 1: + return l; + case 2: + return b; + } + + return r; +} + void Rect::Normalize(void) { if (l > r) @@ -93,12 +137,12 @@ void Rect::Expand(double amt) double Rect::Width(void) { - return r - l; + return fabs(r - l); } double Rect::Height(void) { - return t - b; + return fabs(t - b); } bool Rect::Contains(Point p) @@ -106,6 +150,11 @@ bool Rect::Contains(Point p) return ((p.x >= l) && (p.x <= r) && (p.y >= b) && (p.y <= t) ? true : false); } +bool Rect::Contains(Rect rect) +{ + return ((rect.l >= l) && (rect.r <= r) && (rect.b >= b) && (rect.t <= t) ? true : false); +} + Point Rect::TopLeft(void) { return Point(l, t);