Merge branch 'master' of git://git.ucc.asn.au/tpg/acess2
[tpg/acess2.git] / Usermode / Applications / axwin4_src / Server / CRect.cpp
diff --git a/Usermode/Applications/axwin4_src/Server/CRect.cpp b/Usermode/Applications/axwin4_src/Server/CRect.cpp
new file mode 100644 (file)
index 0000000..acbcc27
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Acess2 GUI v4
+ * - By John Hodge (thePowersGang)
+ *
+ * CRect.cpp
+ * - Rectangle
+ */
+#include <CRect.hpp>
+#include <algorithm>
+#include <acess/sys.h>
+
+namespace AxWin {
+
+CRect::CRect(int x, int y, unsigned int w, unsigned int h):
+       m_x(x), m_y(y),
+       m_w(w), m_h(h),
+       m_x2(x+w), m_y2(y+h)
+{
+}
+
+void CRect::Move(int NewX, int NewY)
+{
+       // TODO: Add a parent rectangle, and prevent this from fully leaving its bounds
+       m_x = NewX;
+       m_y = NewY;
+       m_x2 = m_x + m_w;
+       m_y2 = m_y + m_h;
+}
+
+void CRect::Resize(int NewW, int NewH)
+{
+       m_w = NewW;
+       m_h = NewH;
+       m_x2 = m_x + m_w;
+       m_y2 = m_y + m_h;
+}
+
+bool CRect::HasIntersection(const CRect& other) const
+{
+       // If other's origin is past our far corner
+       if( m_x2 < other.m_x )
+               return false;
+       if( m_y2 < other.m_y )
+               return false;
+       
+       // If other's far corner is before our origin
+       if( m_x > other.m_x2 )
+               return false;
+       if( m_y > other.m_y2 )
+               return false;
+       return true;
+}
+
+CRect CRect::Intersection(const CRect& other) const
+{
+       int x1 = ::std::max(m_x, other.m_x);
+       int y1 = ::std::max(m_y, other.m_y);
+       int x2 = ::std::min(m_x2, other.m_x2);
+       int y2 = ::std::min(m_y2, other.m_y2);
+       
+       if( x2 <= x1 || y2 <= y1 )
+               return CRect();
+       
+       return CRect(x1, y1, x2-x1, y2-y1);
+}
+
+CRect CRect::RelativeIntersection(const CRect& area)
+{
+       CRect   ret = Intersection(area);
+       ret.m_x -= m_x;
+       ret.m_x2 -= m_x;
+       ret.m_y -= m_y;
+       ret.m_y2 -= m_y;
+       return ret;
+}
+
+};
+

UCC git Repository :: git.ucc.asn.au