| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | 
							- /*
 
-  * Rect.h, part of VCMI engine
 
-  *
 
-  * Authors: listed in file AUTHORS in main folder
 
-  *
 
-  * License: GNU General Public License v2.0 or later
 
-  * Full text of license available in license.txt file, in main folder
 
-  *
 
-  */
 
- #pragma once
 
- #include "Point.h"
 
- VCMI_LIB_NAMESPACE_BEGIN
 
- /// Rectangle class, which have a position and a size
 
- class Rect
 
- {
 
- public:
 
- 	int x;
 
- 	int y;
 
- 	int w;
 
- 	int h;
 
- 	Rect()
 
- 	{
 
- 		x = y = w = h = -1;
 
- 	}
 
- 	Rect(int X, int Y, int W, int H)
 
- 	{
 
- 		x = X;
 
- 		y = Y;
 
- 		w = W;
 
- 		h = H;
 
- 	}
 
- 	Rect(const Point & position, const Point & size)
 
- 	{
 
- 		x = position.x;
 
- 		y = position.y;
 
- 		w = size.x;
 
- 		h = size.y;
 
- 	}
 
- 	Rect(const Rect& r) = default;
 
- 	DLL_LINKAGE static Rect createCentered( const Point & around, const Point & size );
 
- 	DLL_LINKAGE static Rect createCentered( const Rect  & target, const Point & size );
 
- 	DLL_LINKAGE static Rect createAround(const Rect &r, int borderWidth);
 
- 	bool isInside(int qx, int qy) const
 
- 	{
 
- 		if (qx > x && qx<x+w && qy>y && qy<y+h)
 
- 			return true;
 
- 		return false;
 
- 	}
 
- 	bool isInside(const Point & q) const
 
- 	{
 
- 		return isInside(q.x,q.y);
 
- 	}
 
- 	int top() const
 
- 	{
 
- 		return y;
 
- 	}
 
- 	int bottom() const
 
- 	{
 
- 		return y+h;
 
- 	}
 
- 	int left() const
 
- 	{
 
- 		return x;
 
- 	}
 
- 	int right() const
 
- 	{
 
- 		return x+w;
 
- 	}
 
- 	Point topLeft() const
 
- 	{
 
- 		return Point(x,y);
 
- 	}
 
- 	Point topRight() const
 
- 	{
 
- 		return Point(x+w,y);
 
- 	}
 
- 	Point bottomLeft() const
 
- 	{
 
- 		return Point(x,y+h);
 
- 	}
 
- 	Point bottomRight() const
 
- 	{
 
- 		return Point(x+w,y+h);
 
- 	}
 
- 	Point center() const
 
- 	{
 
- 		return Point(x+w/2,y+h/2);
 
- 	}
 
- 	Point dimensions() const
 
- 	{
 
- 		return Point(w,h);
 
- 	}
 
- 	Rect resize(const int size) const
 
- 	{
 
- 		return Rect(x-size,y-size,w+2*size,h+2*size);
 
- 	}
 
- 	void moveTo(const Point & dest)
 
- 	{
 
- 		x = dest.x;
 
- 		y = dest.y;
 
- 	}
 
- 	Rect operator+(const Point &p) const
 
- 	{
 
- 		return Rect(x+p.x,y+p.y,w,h);
 
- 	}
 
- 	Rect operator-(const Point &p) const
 
- 	{
 
- 		return Rect(x-p.x,y-p.y,w,h);
 
- 	}
 
- 	template<typename T>
 
- 	Rect operator*(const T &mul) const
 
- 	{
 
- 		return Rect(x*mul, y*mul, w*mul, h*mul);
 
- 	}
 
- 	Rect& operator=(const Rect &p)
 
- 	{
 
- 		x = p.x;
 
- 		y = p.y;
 
- 		w = p.w;
 
- 		h = p.h;
 
- 		return *this;
 
- 	}
 
- 	Rect& operator+=(const Point &p)
 
- 	{
 
- 		x += p.x;
 
- 		y += p.y;
 
- 		return *this;
 
- 	}
 
- 	Rect& operator-=(const Point &p)
 
- 	{
 
- 		x -= p.x;
 
- 		y -= p.y;
 
- 		return *this;
 
- 	}
 
- 	bool operator == (const Rect & other)
 
- 	{
 
- 		return x == other.x && y == other.y && w == other.w && h == other.h;
 
- 	}
 
- 	/// returns distance from this rect to point, or 0 if inside
 
- 	DLL_LINKAGE int distanceTo(const Point & target) const;
 
- 	/// returns true if this rect intersects with another rect
 
- 	DLL_LINKAGE bool intersectionTest(const Rect & other) const;
 
- 	/// returns true if this rect intersects with line specified by two points
 
- 	DLL_LINKAGE bool intersectionTest(const Point & line1, const Point & line2) const;
 
- 	/// Returns rect that represents intersection of two rects
 
- 	DLL_LINKAGE Rect intersect(const Rect & other) const;
 
- 	/// Returns rect union - rect that covers both this rect and provided rect
 
- 	DLL_LINKAGE Rect include(const Rect & other) const;
 
- 	template <typename Handler>
 
- 	void serialize(Handler &h)
 
- 	{
 
- 		h & x;
 
- 		h & y;
 
- 		h & w;
 
- 		h & this->h;
 
- 	}
 
- };
 
- VCMI_LIB_NAMESPACE_END
 
 
  |