The-Powder-Toy/includes/interface/Point.h
2012-01-14 18:51:24 +00:00

137 lines
2.1 KiB
C++

#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;
}
};
}