summaryrefslogtreecommitdiff
path: root/src/interface/Point.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/interface/Point.h')
-rw-r--r--src/interface/Point.h136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/interface/Point.h b/src/interface/Point.h
new file mode 100644
index 0000000..0d0250c
--- /dev/null
+++ b/src/interface/Point.h
@@ -0,0 +1,136 @@
+#pragma once
+#include "Platform.h"
+
+namespace ui
+{
+
+//Lightweight 2D Int32/Float32 Point struct for UI
+struct Point
+{
+#if ENABLE_FLOAT_UI
+# define POINT_T float
+#else
+# define POINT_T int
+#endif
+
+ POINT_T X;
+ POINT_T Y;
+
+ Point(POINT_T x, POINT_T y)
+ : X(x)
+ , Y(y)
+ {
+ }
+
+ inline Point operator - () const
+ {
+ return Point(-X, -Y);
+ }
+
+ inline Point operator + (const Point& v) const
+ {
+ return Point(X + v.X, Y + v.Y);
+ }
+
+ inline Point operator - (const Point& v) const
+ {
+ return Point(X - v.X, Y - v.Y);
+ }
+
+ inline Point operator * (const Point& v) const
+ {
+ return Point(X * v.X, Y * v.Y);
+ }
+
+ inline Point operator * (int v) const
+ {
+ return Point(X * static_cast<POINT_T>(v), Y * static_cast<POINT_T>(v));
+ }
+
+ inline Point operator * (float v) const
+ {
+ return Point(X * static_cast<POINT_T>(v), Y * static_cast<POINT_T>(v));
+ }
+
+ inline Point operator / (const Point& v) const
+ {
+ return Point(X / v.X, Y / v.Y);
+ }
+
+ inline Point operator / (int v) const
+ {
+ return Point(X / static_cast<POINT_T>(v), Y / static_cast<POINT_T>(v));
+ }
+
+ inline Point operator / (float v) const
+ {
+ return Point(X / static_cast<POINT_T>(v), Y / static_cast<POINT_T>(v));
+ }
+
+ inline void operator += (const Point& v)
+ {
+ X += v.X;
+ Y += v.Y;
+ }
+
+ inline void operator -= (const Point& v)
+ {
+ X -= v.X;
+ Y -= v.Y;
+ }
+
+ inline void operator *= (const Point& v)
+ {
+ X *= v.X;
+ Y *= v.Y;
+ }
+
+ inline void operator *= (int v)
+ {
+ X *= static_cast<POINT_T>(v);
+ Y *= static_cast<POINT_T>(v);
+ }
+
+ inline void operator *= (float v)
+ {
+ X *= static_cast<POINT_T>(v);
+ Y *= static_cast<POINT_T>(v);
+ }
+
+ inline void operator /= (const Point& v)
+ {
+ X /= v.X;
+ Y /= v.Y;
+ }
+
+ inline void operator /= (int v)
+ {
+ X /= static_cast<POINT_T>(v);
+ Y /= static_cast<POINT_T>(v);
+ }
+
+ inline void operator /= (float v)
+ {
+ X /= static_cast<POINT_T>(v);
+ Y /= static_cast<POINT_T>(v);
+ }
+
+ inline bool operator == (const Point& v) const
+ {
+ return (X == v.X && Y == v.Y);
+ }
+
+ inline bool operator != (const Point& v) const
+ {
+ return (X != v.X || Y != v.Y);
+ }
+
+ inline void operator = (const Point& v)
+ {
+ X = v.X;
+ Y = v.Y;
+ }
+
+};
+
+}