| Index: core/include/fxcrt/fx_coordinates.h
|
| diff --git a/core/include/fxcrt/fx_coordinates.h b/core/include/fxcrt/fx_coordinates.h
|
| index 3689a4b270828dc98a58d2a89a17788e4dabf6f5..ddd0f572c8219b1eebf039233a852d483537e37c 100644
|
| --- a/core/include/fxcrt/fx_coordinates.h
|
| +++ b/core/include/fxcrt/fx_coordinates.h
|
| @@ -9,905 +9,744 @@
|
|
|
| #include "fx_basic.h"
|
|
|
| -template<class baseType> class CFX_PSVTemplate;
|
| -template<class baseType> class CFX_VTemplate;
|
| -template<class baseType> class CFX_PRLTemplate;
|
| -template<class baseType> class CFX_RTemplate;
|
| -template<class baseType> class CFX_ETemplate;
|
| -template<class baseType> class CFX_ATemplate;
|
| -template<class baseType> class CFX_RRTemplate;
|
| +template <class baseType>
|
| +class CFX_PSVTemplate;
|
| +template <class baseType>
|
| +class CFX_VTemplate;
|
| +template <class baseType>
|
| +class CFX_PRLTemplate;
|
| +template <class baseType>
|
| +class CFX_RTemplate;
|
| +template <class baseType>
|
| +class CFX_ETemplate;
|
| +template <class baseType>
|
| +class CFX_ATemplate;
|
| +template <class baseType>
|
| +class CFX_RRTemplate;
|
| class CFX_Matrix;
|
| -template<class baseType>
|
| -class CFX_PSVTemplate
|
| -{
|
| -public:
|
| - typedef CFX_PSVTemplate<baseType> FXT_PSV;
|
| - typedef CFX_PSVTemplate<baseType> FXT_POINT;
|
| - typedef CFX_PSVTemplate<baseType> FXT_SIZE;
|
| - void Set(baseType x, baseType y)
|
| - {
|
| - FXT_PSV::x = x, FXT_PSV::y = y;
|
| - }
|
| - void Set(const FXT_PSV &psv)
|
| - {
|
| - FXT_PSV::x = psv.x, FXT_PSV::y = psv.y;
|
| - }
|
| - void Add(baseType x, baseType y)
|
| - {
|
| - FXT_PSV::x += x, FXT_PSV::y += y;
|
| - }
|
| - void Subtract(baseType x, baseType y)
|
| - {
|
| - FXT_PSV::x -= x, FXT_PSV::y -= y;
|
| - }
|
| - void Reset()
|
| - {
|
| - FXT_PSV::x = FXT_PSV::y = 0;
|
| - }
|
| - FXT_PSV& operator += (const FXT_PSV &obj)
|
| - {
|
| - x += obj.x;
|
| - y += obj.y;
|
| - return *this;
|
| - }
|
| - FXT_PSV& operator -= (const FXT_PSV &obj)
|
| - {
|
| - x -= obj.x;
|
| - y -= obj.y;
|
| - return *this;
|
| - }
|
| - FXT_PSV& operator *= (baseType lamda)
|
| - {
|
| - x *= lamda;
|
| - y *= lamda;
|
| - return *this;
|
| - }
|
| - FXT_PSV& operator /= (baseType lamda)
|
| - {
|
| - x /= lamda;
|
| - y /= lamda;
|
| - return *this;
|
| - }
|
| - friend FX_BOOL operator == (const FXT_PSV &obj1, const FXT_PSV &obj2)
|
| - {
|
| - return obj1.x == obj2.x && obj1.y == obj2.y;
|
| - }
|
| - friend FX_BOOL operator != (const FXT_PSV &obj1, const FXT_PSV &obj2)
|
| - {
|
| - return obj1.x != obj2.x || obj1.y != obj2.y;
|
| - }
|
| - friend FXT_PSV operator + (const FXT_PSV &obj1, const FXT_PSV &obj2)
|
| - {
|
| - CFX_PSVTemplate obj;
|
| - obj.x = obj1.x + obj2.x;
|
| - obj.y = obj1.y + obj2.y;
|
| - return obj;
|
| - }
|
| - friend FXT_PSV operator - (const FXT_PSV &obj1, const FXT_PSV &obj2)
|
| - {
|
| - CFX_PSVTemplate obj;
|
| - obj.x = obj1.x - obj2.x;
|
| - obj.y = obj1.y - obj2.y;
|
| - return obj;
|
| - }
|
| - friend FXT_PSV operator * (const FXT_PSV &obj, baseType lamda)
|
| - {
|
| - CFX_PSVTemplate t;
|
| - t.x = obj.x * lamda;
|
| - t.y = obj.y * lamda;
|
| - return t;
|
| - }
|
| - friend FXT_PSV operator * (baseType lamda, const FXT_PSV &obj)
|
| - {
|
| - CFX_PSVTemplate t;
|
| - t.x = lamda * obj.x;
|
| - t.y = lamda * obj.y;
|
| - return t;
|
| - }
|
| - friend FXT_PSV operator / (const FXT_PSV &obj, baseType lamda)
|
| - {
|
| - CFX_PSVTemplate t;
|
| - t.x = obj.x / lamda;
|
| - t.y = obj.y / lamda;
|
| - return t;
|
| - }
|
| - baseType x, y;
|
| +template <class baseType>
|
| +class CFX_PSVTemplate {
|
| + public:
|
| + typedef CFX_PSVTemplate<baseType> FXT_PSV;
|
| + typedef CFX_PSVTemplate<baseType> FXT_POINT;
|
| + typedef CFX_PSVTemplate<baseType> FXT_SIZE;
|
| + void Set(baseType x, baseType y) { FXT_PSV::x = x, FXT_PSV::y = y; }
|
| + void Set(const FXT_PSV& psv) { FXT_PSV::x = psv.x, FXT_PSV::y = psv.y; }
|
| + void Add(baseType x, baseType y) { FXT_PSV::x += x, FXT_PSV::y += y; }
|
| + void Subtract(baseType x, baseType y) { FXT_PSV::x -= x, FXT_PSV::y -= y; }
|
| + void Reset() { FXT_PSV::x = FXT_PSV::y = 0; }
|
| + FXT_PSV& operator+=(const FXT_PSV& obj) {
|
| + x += obj.x;
|
| + y += obj.y;
|
| + return *this;
|
| + }
|
| + FXT_PSV& operator-=(const FXT_PSV& obj) {
|
| + x -= obj.x;
|
| + y -= obj.y;
|
| + return *this;
|
| + }
|
| + FXT_PSV& operator*=(baseType lamda) {
|
| + x *= lamda;
|
| + y *= lamda;
|
| + return *this;
|
| + }
|
| + FXT_PSV& operator/=(baseType lamda) {
|
| + x /= lamda;
|
| + y /= lamda;
|
| + return *this;
|
| + }
|
| + friend FX_BOOL operator==(const FXT_PSV& obj1, const FXT_PSV& obj2) {
|
| + return obj1.x == obj2.x && obj1.y == obj2.y;
|
| + }
|
| + friend FX_BOOL operator!=(const FXT_PSV& obj1, const FXT_PSV& obj2) {
|
| + return obj1.x != obj2.x || obj1.y != obj2.y;
|
| + }
|
| + friend FXT_PSV operator+(const FXT_PSV& obj1, const FXT_PSV& obj2) {
|
| + CFX_PSVTemplate obj;
|
| + obj.x = obj1.x + obj2.x;
|
| + obj.y = obj1.y + obj2.y;
|
| + return obj;
|
| + }
|
| + friend FXT_PSV operator-(const FXT_PSV& obj1, const FXT_PSV& obj2) {
|
| + CFX_PSVTemplate obj;
|
| + obj.x = obj1.x - obj2.x;
|
| + obj.y = obj1.y - obj2.y;
|
| + return obj;
|
| + }
|
| + friend FXT_PSV operator*(const FXT_PSV& obj, baseType lamda) {
|
| + CFX_PSVTemplate t;
|
| + t.x = obj.x * lamda;
|
| + t.y = obj.y * lamda;
|
| + return t;
|
| + }
|
| + friend FXT_PSV operator*(baseType lamda, const FXT_PSV& obj) {
|
| + CFX_PSVTemplate t;
|
| + t.x = lamda * obj.x;
|
| + t.y = lamda * obj.y;
|
| + return t;
|
| + }
|
| + friend FXT_PSV operator/(const FXT_PSV& obj, baseType lamda) {
|
| + CFX_PSVTemplate t;
|
| + t.x = obj.x / lamda;
|
| + t.y = obj.y / lamda;
|
| + return t;
|
| + }
|
| + baseType x, y;
|
| };
|
| -typedef CFX_PSVTemplate<int32_t> CFX_Point;
|
| -typedef CFX_PSVTemplate<FX_FLOAT> CFX_PointF;
|
| -typedef CFX_PSVTemplate<int32_t> CFX_Size;
|
| -typedef CFX_PSVTemplate<FX_FLOAT> CFX_SizeF;
|
| -typedef CFX_ArrayTemplate<CFX_Point> CFX_Points;
|
| -typedef CFX_ArrayTemplate<CFX_PointF> CFX_PointsF;
|
| -typedef CFX_PSVTemplate<int32_t> * FX_LPPOINT;
|
| -typedef CFX_PSVTemplate<FX_FLOAT> * FX_LPPOINTF;
|
| -typedef CFX_PSVTemplate<int32_t> const * FX_LPCPOINT;
|
| -typedef CFX_PSVTemplate<FX_FLOAT> const * FX_LPCPOINTF;
|
| -#define CFX_FloatPoint CFX_PointF
|
| -template<class baseType>
|
| -class CFX_VTemplate: public CFX_PSVTemplate<baseType>
|
| -{
|
| -public:
|
| - typedef CFX_PSVTemplate<baseType> FXT_PSV;
|
| - typedef CFX_PSVTemplate<baseType> FXT_POINT;
|
| - typedef CFX_PSVTemplate<baseType> FXT_SIZE;
|
| - typedef CFX_VTemplate<baseType> FXT_VECTOR;
|
| - void Set(baseType newx, baseType newy)
|
| - {
|
| - FXT_PSV::x = newx;
|
| - FXT_PSV::y = newy;
|
| - }
|
| - void Set(const FXT_PSV &psv)
|
| - {
|
| - FXT_PSV::x = psv.x, FXT_PSV::y = psv.y;
|
| - }
|
| - void Set(const FXT_POINT &p1, const FXT_POINT &p2)
|
| - {
|
| - FXT_PSV::x = p2.x - p1.x, FXT_PSV::y = p2.y - p1.y;
|
| - }
|
| - void Reset()
|
| - {
|
| - FXT_PSV::x = FXT_PSV::y = 0;
|
| - }
|
| - baseType SquareLength() const
|
| - {
|
| - return FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y;
|
| - }
|
| - baseType Length() const
|
| - {
|
| - return FXSYS_sqrt(FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y);
|
| - }
|
| - void Normalize()
|
| - {
|
| - FX_FLOAT fLen = FXSYS_sqrt(FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y);
|
| - if (fLen < 0.0001f) {
|
| - return;
|
| - }
|
| - FXT_PSV::x = ((baseType)FXT_PSV::x) / fLen;
|
| - FXT_PSV::y = ((baseType)FXT_PSV::y) / fLen;
|
| - }
|
| - baseType DotProduct(baseType otherx, baseType othery) const
|
| - {
|
| - return FXT_PSV::x * otherx + FXT_PSV::y * othery;
|
| - }
|
| - baseType DotProduct(const FXT_VECTOR &v) const
|
| - {
|
| - return FXT_PSV::x * v.x + FXT_PSV::y * v.y;
|
| - }
|
| - FX_BOOL IsParallel(baseType otherx, baseType othery) const
|
| - {
|
| - baseType t = FXT_PSV::x * othery - FXT_PSV::y * otherx;
|
| - return FXSYS_fabs(t) < 0x0001f;
|
| - }
|
| - FX_BOOL IsParallel(const FXT_VECTOR &v) const
|
| - {
|
| - return IsParallel(v.x, v.y);
|
| - }
|
| - FX_BOOL IsPerpendicular(baseType otherx, baseType othery) const
|
| - {
|
| - baseType t = DotProduct(otherx, othery);
|
| - return FXSYS_fabs(t) < 0x0001f;
|
| - }
|
| - FX_BOOL IsPerpendicular(const FXT_VECTOR &v) const
|
| - {
|
| - return IsPerpendicular(v.x, v.y);
|
| - }
|
| - void Translate(baseType dx, baseType dy)
|
| - {
|
| - FXT_PSV::x += dx, FXT_PSV::y += dy;
|
| - }
|
| - void Scale(baseType sx, baseType sy)
|
| - {
|
| - FXT_PSV::x *= sx, FXT_PSV::y *= sy;
|
| - }
|
| - void Rotate(FX_FLOAT fRadian)
|
| - {
|
| - FX_FLOAT xx = (FX_FLOAT)FXT_PSV::x;
|
| - FX_FLOAT yy = (FX_FLOAT)FXT_PSV::y;
|
| - FX_FLOAT cosValue = FXSYS_cos(fRadian);
|
| - FX_FLOAT sinValue = FXSYS_sin(fRadian);
|
| - FXT_PSV::x = xx * cosValue - yy * sinValue;
|
| - FXT_PSV::y = xx * sinValue + yy * cosValue;
|
| - }
|
| - friend FX_FLOAT Cosine(const FXT_VECTOR &v1, const FXT_VECTOR &v2)
|
| - {
|
| - FXSYS_assert(v1.SquareLength() != 0 && v2.SquareLength() != 0);
|
| - FX_FLOAT dotProduct = v1.DotProduct(v2);
|
| - return dotProduct / (FX_FLOAT)FXSYS_sqrt(v1.SquareLength() * v2.SquareLength());
|
| - }
|
| - friend FX_FLOAT ArcCosine(const FXT_VECTOR &v1, const FXT_VECTOR &v2)
|
| - {
|
| - return (FX_FLOAT)FXSYS_acos(Cosine(v1, v2));
|
| - }
|
| - friend FX_FLOAT SlopeAngle(const FXT_VECTOR &v)
|
| - {
|
| - CFX_VTemplate vx;
|
| - vx.Set(1, 0);
|
| - FX_FLOAT fSlope = ArcCosine(v, vx);
|
| - return v.y < 0 ? -fSlope : fSlope;
|
| - }
|
| +typedef CFX_PSVTemplate<int32_t> CFX_Point;
|
| +typedef CFX_PSVTemplate<FX_FLOAT> CFX_PointF;
|
| +typedef CFX_PSVTemplate<int32_t> CFX_Size;
|
| +typedef CFX_PSVTemplate<FX_FLOAT> CFX_SizeF;
|
| +typedef CFX_ArrayTemplate<CFX_Point> CFX_Points;
|
| +typedef CFX_ArrayTemplate<CFX_PointF> CFX_PointsF;
|
| +typedef CFX_PSVTemplate<int32_t>* FX_LPPOINT;
|
| +typedef CFX_PSVTemplate<FX_FLOAT>* FX_LPPOINTF;
|
| +typedef CFX_PSVTemplate<int32_t> const* FX_LPCPOINT;
|
| +typedef CFX_PSVTemplate<FX_FLOAT> const* FX_LPCPOINTF;
|
| +#define CFX_FloatPoint CFX_PointF
|
| +template <class baseType>
|
| +class CFX_VTemplate : public CFX_PSVTemplate<baseType> {
|
| + public:
|
| + typedef CFX_PSVTemplate<baseType> FXT_PSV;
|
| + typedef CFX_PSVTemplate<baseType> FXT_POINT;
|
| + typedef CFX_PSVTemplate<baseType> FXT_SIZE;
|
| + typedef CFX_VTemplate<baseType> FXT_VECTOR;
|
| + void Set(baseType newx, baseType newy) {
|
| + FXT_PSV::x = newx;
|
| + FXT_PSV::y = newy;
|
| + }
|
| + void Set(const FXT_PSV& psv) { FXT_PSV::x = psv.x, FXT_PSV::y = psv.y; }
|
| + void Set(const FXT_POINT& p1, const FXT_POINT& p2) {
|
| + FXT_PSV::x = p2.x - p1.x, FXT_PSV::y = p2.y - p1.y;
|
| + }
|
| + void Reset() { FXT_PSV::x = FXT_PSV::y = 0; }
|
| + baseType SquareLength() const {
|
| + return FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y;
|
| + }
|
| + baseType Length() const {
|
| + return FXSYS_sqrt(FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y);
|
| + }
|
| + void Normalize() {
|
| + FX_FLOAT fLen =
|
| + FXSYS_sqrt(FXT_PSV::x * FXT_PSV::x + FXT_PSV::y * FXT_PSV::y);
|
| + if (fLen < 0.0001f) {
|
| + return;
|
| + }
|
| + FXT_PSV::x = ((baseType)FXT_PSV::x) / fLen;
|
| + FXT_PSV::y = ((baseType)FXT_PSV::y) / fLen;
|
| + }
|
| + baseType DotProduct(baseType otherx, baseType othery) const {
|
| + return FXT_PSV::x * otherx + FXT_PSV::y * othery;
|
| + }
|
| + baseType DotProduct(const FXT_VECTOR& v) const {
|
| + return FXT_PSV::x * v.x + FXT_PSV::y * v.y;
|
| + }
|
| + FX_BOOL IsParallel(baseType otherx, baseType othery) const {
|
| + baseType t = FXT_PSV::x * othery - FXT_PSV::y * otherx;
|
| + return FXSYS_fabs(t) < 0x0001f;
|
| + }
|
| + FX_BOOL IsParallel(const FXT_VECTOR& v) const { return IsParallel(v.x, v.y); }
|
| + FX_BOOL IsPerpendicular(baseType otherx, baseType othery) const {
|
| + baseType t = DotProduct(otherx, othery);
|
| + return FXSYS_fabs(t) < 0x0001f;
|
| + }
|
| + FX_BOOL IsPerpendicular(const FXT_VECTOR& v) const {
|
| + return IsPerpendicular(v.x, v.y);
|
| + }
|
| + void Translate(baseType dx, baseType dy) {
|
| + FXT_PSV::x += dx, FXT_PSV::y += dy;
|
| + }
|
| + void Scale(baseType sx, baseType sy) { FXT_PSV::x *= sx, FXT_PSV::y *= sy; }
|
| + void Rotate(FX_FLOAT fRadian) {
|
| + FX_FLOAT xx = (FX_FLOAT)FXT_PSV::x;
|
| + FX_FLOAT yy = (FX_FLOAT)FXT_PSV::y;
|
| + FX_FLOAT cosValue = FXSYS_cos(fRadian);
|
| + FX_FLOAT sinValue = FXSYS_sin(fRadian);
|
| + FXT_PSV::x = xx * cosValue - yy * sinValue;
|
| + FXT_PSV::y = xx * sinValue + yy * cosValue;
|
| + }
|
| + friend FX_FLOAT Cosine(const FXT_VECTOR& v1, const FXT_VECTOR& v2) {
|
| + FXSYS_assert(v1.SquareLength() != 0 && v2.SquareLength() != 0);
|
| + FX_FLOAT dotProduct = v1.DotProduct(v2);
|
| + return dotProduct /
|
| + (FX_FLOAT)FXSYS_sqrt(v1.SquareLength() * v2.SquareLength());
|
| + }
|
| + friend FX_FLOAT ArcCosine(const FXT_VECTOR& v1, const FXT_VECTOR& v2) {
|
| + return (FX_FLOAT)FXSYS_acos(Cosine(v1, v2));
|
| + }
|
| + friend FX_FLOAT SlopeAngle(const FXT_VECTOR& v) {
|
| + CFX_VTemplate vx;
|
| + vx.Set(1, 0);
|
| + FX_FLOAT fSlope = ArcCosine(v, vx);
|
| + return v.y < 0 ? -fSlope : fSlope;
|
| + }
|
| };
|
| typedef CFX_VTemplate<int32_t> CFX_Vector;
|
| typedef CFX_VTemplate<FX_FLOAT> CFX_VectorF;
|
| -template<class baseType>
|
| -class CFX_RTemplate
|
| -{
|
| -public:
|
| - typedef CFX_PSVTemplate<baseType> FXT_POINT;
|
| - typedef CFX_PSVTemplate<baseType> FXT_SIZE;
|
| - typedef CFX_VTemplate<baseType> FXT_VECTOR;
|
| - typedef CFX_PRLTemplate<baseType> FXT_PARAL;
|
| - typedef CFX_RTemplate<baseType> FXT_RECT;
|
| - void Set(baseType left, baseType top, baseType width, baseType height)
|
| - {
|
| - FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::width = width, FXT_RECT::height = height;
|
| - }
|
| - void Set(baseType left, baseType top, const FXT_SIZE &size)
|
| - {
|
| - FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::Size(size);
|
| - }
|
| - void Set(const FXT_POINT &p, baseType width, baseType height)
|
| - {
|
| - TopLeft(p), FXT_RECT::width = width, FXT_RECT::height = height;
|
| - }
|
| - void Set(const FXT_POINT &p1, const FXT_POINT &p2)
|
| - {
|
| - TopLeft(p1), FXT_RECT::width = p2.x - p1.x, FXT_RECT::height = p2.y - p1.y, FXT_RECT::Normalize();
|
| - }
|
| - void Set(const FXT_POINT &p, const FXT_VECTOR &v)
|
| - {
|
| - TopLeft(p), FXT_RECT::width = v.x, FXT_RECT::height = v.y, FXT_RECT::Normalize();
|
| - }
|
| - void Reset()
|
| - {
|
| - FXT_RECT::left = FXT_RECT::top = FXT_RECT::width = FXT_RECT::height = 0;
|
| - }
|
| - FXT_RECT& operator += (const FXT_POINT &p)
|
| - {
|
| - left += p.x, top += p.y;
|
| - return *this;
|
| - }
|
| - FXT_RECT& operator -= (const FXT_POINT &p)
|
| - {
|
| - left -= p.x, top -= p.y;
|
| - return *this;
|
| - }
|
| - baseType right() const
|
| - {
|
| - return left + width;
|
| - }
|
| - baseType bottom() const
|
| - {
|
| - return top + height;
|
| - }
|
| - void Normalize()
|
| - {
|
| - if (width < 0) {
|
| - left += width;
|
| - width = -width;
|
| - }
|
| - if (height < 0) {
|
| - top += height;
|
| - height = -height;
|
| - }
|
| - }
|
| - void Offset(baseType dx, baseType dy)
|
| - {
|
| - left += dx;
|
| - top += dy;
|
| - }
|
| - void Inflate(baseType x, baseType y)
|
| - {
|
| - left -= x;
|
| - width += x * 2;
|
| - top -= y;
|
| - height += y * 2;
|
| - }
|
| - void Inflate(const FXT_POINT &p)
|
| - {
|
| - Inflate(p.x, p.y);
|
| - }
|
| - void Inflate(baseType left, baseType top, baseType right, baseType bottom)
|
| - {
|
| - FXT_RECT::left -= left;
|
| - FXT_RECT::top -= top;
|
| - FXT_RECT::width += left + right;
|
| - FXT_RECT::height += top + bottom;
|
| - }
|
| - void Inflate(const FXT_RECT &rt)
|
| - {
|
| - Inflate(rt.left, rt.top, rt.left + rt.width, rt.top + rt.height);
|
| - }
|
| - void Deflate(baseType x, baseType y)
|
| - {
|
| - left += x;
|
| - width -= x * 2;
|
| - top += y;
|
| - height -= y * 2;
|
| - }
|
| - void Deflate(const FXT_POINT &p)
|
| - {
|
| - Deflate(p.x, p.y);
|
| - }
|
| - void Deflate(baseType left, baseType top, baseType right, baseType bottom)
|
| - {
|
| - FXT_RECT::left += left;
|
| - FXT_RECT::top += top;
|
| - FXT_RECT::width -= left + right;
|
| - FXT_RECT::height -= top + bottom;
|
| - }
|
| - void Deflate(const FXT_RECT &rt)
|
| - {
|
| - Deflate(rt.left, rt.top, rt.top + rt.width, rt.top + rt.height);
|
| - }
|
| - FX_BOOL IsEmpty() const
|
| - {
|
| - return width <= 0 || height <= 0;
|
| - }
|
| - FX_BOOL IsEmpty(FX_FLOAT fEpsilon) const
|
| - {
|
| - return width <= fEpsilon || height <= fEpsilon;
|
| - }
|
| - void Empty()
|
| - {
|
| - width = height = 0;
|
| - }
|
| - FX_BOOL Contains(baseType x, baseType y) const
|
| - {
|
| - return x >= left && x < left + width && y >= top && y < top + height;
|
| - }
|
| - FX_BOOL Contains(const FXT_POINT &p) const
|
| - {
|
| - return Contains(p.x, p.y);
|
| - }
|
| - FX_BOOL Contains(const FXT_RECT &rt) const
|
| - {
|
| - return rt.left >= left && rt.right() <= right() && rt.top >= top && rt.bottom() <= bottom();
|
| - }
|
| - baseType Width() const
|
| - {
|
| - return width;
|
| - }
|
| - baseType Height() const
|
| - {
|
| - return height;
|
| - }
|
| - FXT_SIZE Size() const
|
| - {
|
| - FXT_SIZE size;
|
| - size.Set(width, height);
|
| - return size;
|
| - }
|
| - void Size(FXT_SIZE s)
|
| - {
|
| - width = s.x, height = s.y;
|
| - }
|
| - FXT_POINT TopLeft() const
|
| - {
|
| - FXT_POINT p;
|
| - p.x = left;
|
| - p.y = top;
|
| - return p;
|
| - }
|
| - FXT_POINT TopRight() const
|
| - {
|
| - FXT_POINT p;
|
| - p.x = left + width;
|
| - p.y = top;
|
| - return p;
|
| - }
|
| - FXT_POINT BottomLeft() const
|
| - {
|
| - FXT_POINT p;
|
| - p.x = left;
|
| - p.y = top + height;
|
| - return p;
|
| - }
|
| - FXT_POINT BottomRight() const
|
| - {
|
| - FXT_POINT p;
|
| - p.x = left + width;
|
| - p.y = top + height;
|
| - return p;
|
| - }
|
| - void TopLeft(FXT_POINT tl)
|
| - {
|
| - left = tl.x;
|
| - top = tl.y;
|
| - }
|
| - void TopRight(FXT_POINT tr)
|
| - {
|
| - width = tr.x - left;
|
| - top = tr.y;
|
| - }
|
| - void BottomLeft(FXT_POINT bl)
|
| - {
|
| - left = bl.x;
|
| - height = bl.y - top;
|
| - }
|
| - void BottomRight(FXT_POINT br)
|
| - {
|
| - width = br.x - left;
|
| - height = br.y - top;
|
| - }
|
| - FXT_POINT Center() const
|
| - {
|
| - FXT_POINT p;
|
| - p.x = left + width / 2;
|
| - p.y = top + height / 2;
|
| - return p;
|
| - }
|
| - void GetParallelogram(FXT_PARAL &pg) const
|
| - {
|
| - pg.x = left, pg.y = top;
|
| - pg.x1 = width, pg.y1 = 0;
|
| - pg.x2 = 0, pg.y2 = height;
|
| - }
|
| - void Union(baseType x, baseType y)
|
| - {
|
| - baseType r = right(), b = bottom();
|
| - if (left > x) {
|
| - left = x;
|
| - }
|
| - if (r < x) {
|
| - r = x;
|
| - }
|
| - if (top > y) {
|
| - top = y;
|
| - }
|
| - if (b < y) {
|
| - b = y;
|
| - }
|
| - width = r - left;
|
| - height = b - top;
|
| - }
|
| - void Union(const FXT_POINT &p)
|
| - {
|
| - Union(p.x, p.y);
|
| - }
|
| - void Union(const FXT_RECT &rt)
|
| - {
|
| - baseType r = right(), b = bottom();
|
| - if (left > rt.left) {
|
| - left = rt.left;
|
| - }
|
| - if (r < rt.right()) {
|
| - r = rt.right();
|
| - }
|
| - if (top > rt.top) {
|
| - top = rt.top;
|
| - }
|
| - if (b < rt.bottom()) {
|
| - b = rt.bottom();
|
| - }
|
| - width = r - left;
|
| - height = b - top;
|
| - }
|
| - void Intersect(const FXT_RECT &rt)
|
| - {
|
| - baseType r = right(), b = bottom();
|
| - if (left < rt.left) {
|
| - left = rt.left;
|
| - }
|
| - if (r > rt.right()) {
|
| - r = rt.right();
|
| - }
|
| - if (top < rt.top) {
|
| - top = rt.top;
|
| - }
|
| - if (b > rt.bottom()) {
|
| - b = rt.bottom();
|
| - }
|
| - width = r - left;
|
| - height = b - top;
|
| - }
|
| - FX_BOOL IntersectWith(const FXT_RECT &rt) const
|
| - {
|
| - FXT_RECT rect = rt;
|
| - rect.Intersect(*this);
|
| - return !rect.IsEmpty();
|
| - }
|
| - FX_BOOL IntersectWith(const FXT_RECT &rt, FX_FLOAT fEpsilon) const
|
| - {
|
| - FXT_RECT rect = rt;
|
| - rect.Intersect(*this);
|
| - return !rect.IsEmpty(fEpsilon);
|
| - }
|
| - friend FX_BOOL operator == (const FXT_RECT &rc1, const FXT_RECT &rc2)
|
| - {
|
| - return rc1.left == rc2.left && rc1.top == rc2.top && rc1.width == rc2.width && rc1.height == rc2.height;
|
| - }
|
| - friend FX_BOOL operator != (const FXT_RECT &rc1, const FXT_RECT &rc2)
|
| - {
|
| - return rc1.left != rc2.left || rc1.top != rc2.top || rc1.width != rc2.width || rc1.height != rc2.height;
|
| - }
|
| - baseType left, top;
|
| - baseType width, height;
|
| +template <class baseType>
|
| +class CFX_RTemplate {
|
| + public:
|
| + typedef CFX_PSVTemplate<baseType> FXT_POINT;
|
| + typedef CFX_PSVTemplate<baseType> FXT_SIZE;
|
| + typedef CFX_VTemplate<baseType> FXT_VECTOR;
|
| + typedef CFX_PRLTemplate<baseType> FXT_PARAL;
|
| + typedef CFX_RTemplate<baseType> FXT_RECT;
|
| + void Set(baseType left, baseType top, baseType width, baseType height) {
|
| + FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::width = width,
|
| + FXT_RECT::height = height;
|
| + }
|
| + void Set(baseType left, baseType top, const FXT_SIZE& size) {
|
| + FXT_RECT::left = left, FXT_RECT::top = top, FXT_RECT::Size(size);
|
| + }
|
| + void Set(const FXT_POINT& p, baseType width, baseType height) {
|
| + TopLeft(p), FXT_RECT::width = width, FXT_RECT::height = height;
|
| + }
|
| + void Set(const FXT_POINT& p1, const FXT_POINT& p2) {
|
| + TopLeft(p1), FXT_RECT::width = p2.x - p1.x, FXT_RECT::height = p2.y - p1.y,
|
| + FXT_RECT::Normalize();
|
| + }
|
| + void Set(const FXT_POINT& p, const FXT_VECTOR& v) {
|
| + TopLeft(p), FXT_RECT::width = v.x, FXT_RECT::height = v.y,
|
| + FXT_RECT::Normalize();
|
| + }
|
| + void Reset() {
|
| + FXT_RECT::left = FXT_RECT::top = FXT_RECT::width = FXT_RECT::height = 0;
|
| + }
|
| + FXT_RECT& operator+=(const FXT_POINT& p) {
|
| + left += p.x, top += p.y;
|
| + return *this;
|
| + }
|
| + FXT_RECT& operator-=(const FXT_POINT& p) {
|
| + left -= p.x, top -= p.y;
|
| + return *this;
|
| + }
|
| + baseType right() const { return left + width; }
|
| + baseType bottom() const { return top + height; }
|
| + void Normalize() {
|
| + if (width < 0) {
|
| + left += width;
|
| + width = -width;
|
| + }
|
| + if (height < 0) {
|
| + top += height;
|
| + height = -height;
|
| + }
|
| + }
|
| + void Offset(baseType dx, baseType dy) {
|
| + left += dx;
|
| + top += dy;
|
| + }
|
| + void Inflate(baseType x, baseType y) {
|
| + left -= x;
|
| + width += x * 2;
|
| + top -= y;
|
| + height += y * 2;
|
| + }
|
| + void Inflate(const FXT_POINT& p) { Inflate(p.x, p.y); }
|
| + void Inflate(baseType left, baseType top, baseType right, baseType bottom) {
|
| + FXT_RECT::left -= left;
|
| + FXT_RECT::top -= top;
|
| + FXT_RECT::width += left + right;
|
| + FXT_RECT::height += top + bottom;
|
| + }
|
| + void Inflate(const FXT_RECT& rt) {
|
| + Inflate(rt.left, rt.top, rt.left + rt.width, rt.top + rt.height);
|
| + }
|
| + void Deflate(baseType x, baseType y) {
|
| + left += x;
|
| + width -= x * 2;
|
| + top += y;
|
| + height -= y * 2;
|
| + }
|
| + void Deflate(const FXT_POINT& p) { Deflate(p.x, p.y); }
|
| + void Deflate(baseType left, baseType top, baseType right, baseType bottom) {
|
| + FXT_RECT::left += left;
|
| + FXT_RECT::top += top;
|
| + FXT_RECT::width -= left + right;
|
| + FXT_RECT::height -= top + bottom;
|
| + }
|
| + void Deflate(const FXT_RECT& rt) {
|
| + Deflate(rt.left, rt.top, rt.top + rt.width, rt.top + rt.height);
|
| + }
|
| + FX_BOOL IsEmpty() const { return width <= 0 || height <= 0; }
|
| + FX_BOOL IsEmpty(FX_FLOAT fEpsilon) const {
|
| + return width <= fEpsilon || height <= fEpsilon;
|
| + }
|
| + void Empty() { width = height = 0; }
|
| + FX_BOOL Contains(baseType x, baseType y) const {
|
| + return x >= left && x < left + width && y >= top && y < top + height;
|
| + }
|
| + FX_BOOL Contains(const FXT_POINT& p) const { return Contains(p.x, p.y); }
|
| + FX_BOOL Contains(const FXT_RECT& rt) const {
|
| + return rt.left >= left && rt.right() <= right() && rt.top >= top &&
|
| + rt.bottom() <= bottom();
|
| + }
|
| + baseType Width() const { return width; }
|
| + baseType Height() const { return height; }
|
| + FXT_SIZE Size() const {
|
| + FXT_SIZE size;
|
| + size.Set(width, height);
|
| + return size;
|
| + }
|
| + void Size(FXT_SIZE s) { width = s.x, height = s.y; }
|
| + FXT_POINT TopLeft() const {
|
| + FXT_POINT p;
|
| + p.x = left;
|
| + p.y = top;
|
| + return p;
|
| + }
|
| + FXT_POINT TopRight() const {
|
| + FXT_POINT p;
|
| + p.x = left + width;
|
| + p.y = top;
|
| + return p;
|
| + }
|
| + FXT_POINT BottomLeft() const {
|
| + FXT_POINT p;
|
| + p.x = left;
|
| + p.y = top + height;
|
| + return p;
|
| + }
|
| + FXT_POINT BottomRight() const {
|
| + FXT_POINT p;
|
| + p.x = left + width;
|
| + p.y = top + height;
|
| + return p;
|
| + }
|
| + void TopLeft(FXT_POINT tl) {
|
| + left = tl.x;
|
| + top = tl.y;
|
| + }
|
| + void TopRight(FXT_POINT tr) {
|
| + width = tr.x - left;
|
| + top = tr.y;
|
| + }
|
| + void BottomLeft(FXT_POINT bl) {
|
| + left = bl.x;
|
| + height = bl.y - top;
|
| + }
|
| + void BottomRight(FXT_POINT br) {
|
| + width = br.x - left;
|
| + height = br.y - top;
|
| + }
|
| + FXT_POINT Center() const {
|
| + FXT_POINT p;
|
| + p.x = left + width / 2;
|
| + p.y = top + height / 2;
|
| + return p;
|
| + }
|
| + void GetParallelogram(FXT_PARAL& pg) const {
|
| + pg.x = left, pg.y = top;
|
| + pg.x1 = width, pg.y1 = 0;
|
| + pg.x2 = 0, pg.y2 = height;
|
| + }
|
| + void Union(baseType x, baseType y) {
|
| + baseType r = right(), b = bottom();
|
| + if (left > x) {
|
| + left = x;
|
| + }
|
| + if (r < x) {
|
| + r = x;
|
| + }
|
| + if (top > y) {
|
| + top = y;
|
| + }
|
| + if (b < y) {
|
| + b = y;
|
| + }
|
| + width = r - left;
|
| + height = b - top;
|
| + }
|
| + void Union(const FXT_POINT& p) { Union(p.x, p.y); }
|
| + void Union(const FXT_RECT& rt) {
|
| + baseType r = right(), b = bottom();
|
| + if (left > rt.left) {
|
| + left = rt.left;
|
| + }
|
| + if (r < rt.right()) {
|
| + r = rt.right();
|
| + }
|
| + if (top > rt.top) {
|
| + top = rt.top;
|
| + }
|
| + if (b < rt.bottom()) {
|
| + b = rt.bottom();
|
| + }
|
| + width = r - left;
|
| + height = b - top;
|
| + }
|
| + void Intersect(const FXT_RECT& rt) {
|
| + baseType r = right(), b = bottom();
|
| + if (left < rt.left) {
|
| + left = rt.left;
|
| + }
|
| + if (r > rt.right()) {
|
| + r = rt.right();
|
| + }
|
| + if (top < rt.top) {
|
| + top = rt.top;
|
| + }
|
| + if (b > rt.bottom()) {
|
| + b = rt.bottom();
|
| + }
|
| + width = r - left;
|
| + height = b - top;
|
| + }
|
| + FX_BOOL IntersectWith(const FXT_RECT& rt) const {
|
| + FXT_RECT rect = rt;
|
| + rect.Intersect(*this);
|
| + return !rect.IsEmpty();
|
| + }
|
| + FX_BOOL IntersectWith(const FXT_RECT& rt, FX_FLOAT fEpsilon) const {
|
| + FXT_RECT rect = rt;
|
| + rect.Intersect(*this);
|
| + return !rect.IsEmpty(fEpsilon);
|
| + }
|
| + friend FX_BOOL operator==(const FXT_RECT& rc1, const FXT_RECT& rc2) {
|
| + return rc1.left == rc2.left && rc1.top == rc2.top &&
|
| + rc1.width == rc2.width && rc1.height == rc2.height;
|
| + }
|
| + friend FX_BOOL operator!=(const FXT_RECT& rc1, const FXT_RECT& rc2) {
|
| + return rc1.left != rc2.left || rc1.top != rc2.top ||
|
| + rc1.width != rc2.width || rc1.height != rc2.height;
|
| + }
|
| + baseType left, top;
|
| + baseType width, height;
|
| };
|
| -typedef CFX_RTemplate<int32_t> CFX_Rect;
|
| -typedef CFX_RTemplate<FX_FLOAT> CFX_RectF;
|
| -typedef CFX_RTemplate<int32_t> * FX_LPRECT;
|
| -typedef CFX_RTemplate<FX_FLOAT> * FX_LPRECTF;
|
| -typedef CFX_RTemplate<int32_t> const * FX_LPCRECT;
|
| -typedef CFX_RTemplate<FX_FLOAT> const * FX_LPCRECTF;
|
| -typedef CFX_ArrayTemplate<CFX_RectF> CFX_RectFArray;
|
| +typedef CFX_RTemplate<int32_t> CFX_Rect;
|
| +typedef CFX_RTemplate<FX_FLOAT> CFX_RectF;
|
| +typedef CFX_RTemplate<int32_t>* FX_LPRECT;
|
| +typedef CFX_RTemplate<FX_FLOAT>* FX_LPRECTF;
|
| +typedef CFX_RTemplate<int32_t> const* FX_LPCRECT;
|
| +typedef CFX_RTemplate<FX_FLOAT> const* FX_LPCRECTF;
|
| +typedef CFX_ArrayTemplate<CFX_RectF> CFX_RectFArray;
|
| struct FX_RECT {
|
| + int left;
|
|
|
| - int left;
|
| + int top;
|
|
|
| - int top;
|
| + int right;
|
|
|
| - int right;
|
| + int bottom;
|
|
|
| - int bottom;
|
| + FX_RECT() : left(0), top(0), right(0), bottom(0) {}
|
|
|
| - FX_RECT(): left(0), top(0), right(0), bottom(0) { }
|
| + FX_RECT(int left1, int top1, int right1, int bottom1) {
|
| + left = left1;
|
| + top = top1;
|
| + right = right1;
|
| + bottom = bottom1;
|
| + }
|
|
|
| - FX_RECT(int left1, int top1, int right1, int bottom1)
|
| - {
|
| - left = left1;
|
| - top = top1;
|
| - right = right1;
|
| - bottom = bottom1;
|
| - }
|
| + int Width() const { return right - left; }
|
|
|
| - int Width() const
|
| - {
|
| - return right - left;
|
| - }
|
| + int Height() const { return bottom - top; }
|
|
|
| - int Height() const
|
| - {
|
| - return bottom - top;
|
| - }
|
| + FX_BOOL IsEmpty() const { return right <= left || bottom <= top; }
|
|
|
| - FX_BOOL IsEmpty() const
|
| - {
|
| - return right <= left || bottom <= top;
|
| - }
|
| + void Normalize();
|
|
|
| - void Normalize();
|
| + void Intersect(const FX_RECT& src);
|
|
|
| - void Intersect(const FX_RECT& src);
|
| + void Intersect(int left1, int top1, int right1, int bottom1) {
|
| + Intersect(FX_RECT(left1, top1, right1, bottom1));
|
| + }
|
|
|
| - void Intersect(int left1, int top1, int right1, int bottom1)
|
| - {
|
| - Intersect(FX_RECT(left1, top1, right1, bottom1));
|
| - }
|
| + void Union(const FX_RECT& other_rect);
|
|
|
| - void Union(const FX_RECT& other_rect);
|
| + FX_BOOL operator==(const FX_RECT& src) const {
|
| + return left == src.left && right == src.right && top == src.top &&
|
| + bottom == src.bottom;
|
| + }
|
|
|
| - FX_BOOL operator == (const FX_RECT& src) const
|
| - {
|
| - return left == src.left && right == src.right && top == src.top && bottom == src.bottom;
|
| - }
|
| + void Offset(int dx, int dy) {
|
| + left += dx;
|
| + right += dx;
|
| + top += dy;
|
| + bottom += dy;
|
| + }
|
|
|
| - void Offset(int dx, int dy)
|
| - {
|
| - left += dx;
|
| - right += dx;
|
| - top += dy;
|
| - bottom += dy;
|
| - }
|
| -
|
| - FX_BOOL Contains(const FX_RECT& other_rect) const
|
| - {
|
| - return other_rect.left >= left && other_rect.right <= right && other_rect.top >= top && other_rect.bottom <= bottom;
|
| - }
|
| + FX_BOOL Contains(const FX_RECT& other_rect) const {
|
| + return other_rect.left >= left && other_rect.right <= right &&
|
| + other_rect.top >= top && other_rect.bottom <= bottom;
|
| + }
|
|
|
| - FX_BOOL Contains(int x, int y) const
|
| - {
|
| - return x >= left && x < right && y >= top && y < bottom;
|
| - }
|
| + FX_BOOL Contains(int x, int y) const {
|
| + return x >= left && x < right && y >= top && y < bottom;
|
| + }
|
| };
|
| struct FX_SMALL_RECT {
|
| + int16_t Left;
|
|
|
| - int16_t Left;
|
| + int16_t Top;
|
|
|
| - int16_t Top;
|
| + int16_t Right;
|
|
|
| - int16_t Right;
|
| -
|
| - int16_t Bottom;
|
| + int16_t Bottom;
|
| };
|
| -class CFX_FloatRect
|
| -{
|
| -public:
|
| +class CFX_FloatRect {
|
| + public:
|
| + CFX_FloatRect() { left = right = bottom = top = 0; }
|
|
|
| - CFX_FloatRect()
|
| - {
|
| - left = right = bottom = top = 0;
|
| - }
|
| + CFX_FloatRect(FX_FLOAT left1,
|
| + FX_FLOAT bottom1,
|
| + FX_FLOAT right1,
|
| + FX_FLOAT top1) {
|
| + left = left1;
|
| + bottom = bottom1;
|
| + right = right1;
|
| + top = top1;
|
| + }
|
|
|
| - CFX_FloatRect(FX_FLOAT left1, FX_FLOAT bottom1, FX_FLOAT right1, FX_FLOAT top1)
|
| - {
|
| - left = left1;
|
| - bottom = bottom1;
|
| - right = right1;
|
| - top = top1;
|
| - }
|
| + CFX_FloatRect(const FX_FLOAT* pArray) {
|
| + left = pArray[0];
|
| + bottom = pArray[1];
|
| + right = pArray[2];
|
| + top = pArray[3];
|
| + }
|
|
|
| - CFX_FloatRect(const FX_FLOAT* pArray)
|
| - {
|
| - left = pArray[0];
|
| - bottom = pArray[1];
|
| - right = pArray[2];
|
| - top = pArray[3];
|
| - }
|
| + CFX_FloatRect(const FX_RECT& rect);
|
|
|
| - CFX_FloatRect(const FX_RECT& rect);
|
| + FX_BOOL IsEmpty() const { return left >= right || bottom >= top; }
|
|
|
| - FX_BOOL IsEmpty() const
|
| - {
|
| - return left >= right || bottom >= top;
|
| - }
|
| + void Normalize();
|
|
|
| - void Normalize();
|
| + void Reset() { left = right = bottom = top = 0; }
|
|
|
| - void Reset()
|
| - {
|
| - left = right = bottom = top = 0;
|
| - }
|
| -
|
| - FX_BOOL Contains(const CFX_FloatRect& other_rect) const;
|
| + FX_BOOL Contains(const CFX_FloatRect& other_rect) const;
|
|
|
| - FX_BOOL Contains(FX_FLOAT x, FX_FLOAT y) const;
|
| + FX_BOOL Contains(FX_FLOAT x, FX_FLOAT y) const;
|
|
|
| - void Transform(const CFX_Matrix* pMatrix);
|
| + void Transform(const CFX_Matrix* pMatrix);
|
|
|
| - void Intersect(const CFX_FloatRect& other_rect);
|
| + void Intersect(const CFX_FloatRect& other_rect);
|
|
|
| - void Union(const CFX_FloatRect& other_rect);
|
| + void Union(const CFX_FloatRect& other_rect);
|
|
|
| - FX_RECT GetInnerRect() const;
|
| + FX_RECT GetInnerRect() const;
|
|
|
| - FX_RECT GetOutterRect() const;
|
| + FX_RECT GetOutterRect() const;
|
|
|
| - FX_RECT GetClosestRect() const;
|
| + FX_RECT GetClosestRect() const;
|
|
|
| - int Substract4(CFX_FloatRect& substract_rect, CFX_FloatRect* pRects);
|
| + int Substract4(CFX_FloatRect& substract_rect, CFX_FloatRect* pRects);
|
|
|
| - void InitRect(FX_FLOAT x, FX_FLOAT y)
|
| - {
|
| - left = right = x;
|
| - bottom = top = y;
|
| - }
|
| + void InitRect(FX_FLOAT x, FX_FLOAT y) {
|
| + left = right = x;
|
| + bottom = top = y;
|
| + }
|
|
|
| - void UpdateRect(FX_FLOAT x, FX_FLOAT y);
|
| + void UpdateRect(FX_FLOAT x, FX_FLOAT y);
|
|
|
| - FX_FLOAT Width() const
|
| - {
|
| - return right - left;
|
| - }
|
| + FX_FLOAT Width() const { return right - left; }
|
|
|
| - FX_FLOAT Height() const
|
| - {
|
| - return top - bottom;
|
| - }
|
| + FX_FLOAT Height() const { return top - bottom; }
|
|
|
| - void Inflate(FX_FLOAT x, FX_FLOAT y)
|
| - {
|
| - Normalize();
|
| - left -= x;
|
| - right += x;
|
| - bottom -= y;
|
| - top += y;
|
| - }
|
| + void Inflate(FX_FLOAT x, FX_FLOAT y) {
|
| + Normalize();
|
| + left -= x;
|
| + right += x;
|
| + bottom -= y;
|
| + top += y;
|
| + }
|
|
|
| - void Inflate(FX_FLOAT other_left,
|
| - FX_FLOAT other_bottom,
|
| - FX_FLOAT other_right,
|
| - FX_FLOAT other_top)
|
| - {
|
| - Normalize();
|
| - left -= other_left;
|
| - bottom -= other_bottom;
|
| - right += other_right;
|
| - top += other_top;
|
| - }
|
| + void Inflate(FX_FLOAT other_left,
|
| + FX_FLOAT other_bottom,
|
| + FX_FLOAT other_right,
|
| + FX_FLOAT other_top) {
|
| + Normalize();
|
| + left -= other_left;
|
| + bottom -= other_bottom;
|
| + right += other_right;
|
| + top += other_top;
|
| + }
|
|
|
| - void Inflate(const CFX_FloatRect &rt)
|
| - {
|
| - Inflate(rt.left, rt.bottom, rt.right, rt.top);
|
| - }
|
| + void Inflate(const CFX_FloatRect& rt) {
|
| + Inflate(rt.left, rt.bottom, rt.right, rt.top);
|
| + }
|
|
|
| - void Deflate(FX_FLOAT x, FX_FLOAT y)
|
| - {
|
| - Normalize();
|
| - left += x;
|
| - right -= x;
|
| - bottom += y;
|
| - top -= y;
|
| - }
|
| + void Deflate(FX_FLOAT x, FX_FLOAT y) {
|
| + Normalize();
|
| + left += x;
|
| + right -= x;
|
| + bottom += y;
|
| + top -= y;
|
| + }
|
|
|
| - void Deflate(FX_FLOAT other_left,
|
| - FX_FLOAT other_bottom,
|
| - FX_FLOAT other_right,
|
| - FX_FLOAT other_top)
|
| - {
|
| - Normalize();
|
| - left += other_left;
|
| - bottom += other_bottom;
|
| - right -= other_right;
|
| - top -= other_top;
|
| - }
|
| + void Deflate(FX_FLOAT other_left,
|
| + FX_FLOAT other_bottom,
|
| + FX_FLOAT other_right,
|
| + FX_FLOAT other_top) {
|
| + Normalize();
|
| + left += other_left;
|
| + bottom += other_bottom;
|
| + right -= other_right;
|
| + top -= other_top;
|
| + }
|
|
|
| - void Deflate(const CFX_FloatRect &rt)
|
| - {
|
| - Deflate(rt.left, rt.bottom, rt.right, rt.top);
|
| - }
|
| + void Deflate(const CFX_FloatRect& rt) {
|
| + Deflate(rt.left, rt.bottom, rt.right, rt.top);
|
| + }
|
|
|
| - void Translate(FX_FLOAT e, FX_FLOAT f)
|
| - {
|
| - left += e;
|
| - right += e;
|
| - top += f;
|
| - bottom += f;
|
| - }
|
| + void Translate(FX_FLOAT e, FX_FLOAT f) {
|
| + left += e;
|
| + right += e;
|
| + top += f;
|
| + bottom += f;
|
| + }
|
|
|
| - static CFX_FloatRect GetBBox(const CFX_FloatPoint* pPoints, int nPoints);
|
| + static CFX_FloatRect GetBBox(const CFX_FloatPoint* pPoints, int nPoints);
|
|
|
| - FX_FLOAT left;
|
| + FX_FLOAT left;
|
|
|
| - FX_FLOAT right;
|
| + FX_FLOAT right;
|
|
|
| - FX_FLOAT bottom;
|
| + FX_FLOAT bottom;
|
|
|
| - FX_FLOAT top;
|
| + FX_FLOAT top;
|
| };
|
| -class CFX_Matrix
|
| -{
|
| -public:
|
| -
|
| - CFX_Matrix()
|
| - {
|
| - a = d = 1;
|
| - b = c = e = f = 0;
|
| - }
|
| +class CFX_Matrix {
|
| + public:
|
| + CFX_Matrix() {
|
| + a = d = 1;
|
| + b = c = e = f = 0;
|
| + }
|
| +
|
| + CFX_Matrix(FX_FLOAT a1,
|
| + FX_FLOAT b1,
|
| + FX_FLOAT c1,
|
| + FX_FLOAT d1,
|
| + FX_FLOAT e1,
|
| + FX_FLOAT f1) {
|
| + a = a1;
|
| + b = b1;
|
| + c = c1;
|
| + d = d1;
|
| + e = e1;
|
| + f = f1;
|
| + }
|
| +
|
| + void Set(FX_FLOAT a,
|
| + FX_FLOAT b,
|
| + FX_FLOAT c,
|
| + FX_FLOAT d,
|
| + FX_FLOAT e,
|
| + FX_FLOAT f);
|
| + void Set(const FX_FLOAT n[6]);
|
| +
|
| + void SetIdentity() {
|
| + a = d = 1;
|
| + b = c = e = f = 0;
|
| + }
|
|
|
| - CFX_Matrix(FX_FLOAT a1, FX_FLOAT b1, FX_FLOAT c1, FX_FLOAT d1, FX_FLOAT e1, FX_FLOAT f1)
|
| - {
|
| - a = a1;
|
| - b = b1;
|
| - c = c1;
|
| - d = d1;
|
| - e = e1;
|
| - f = f1;
|
| - }
|
| -
|
| - void Set(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e, FX_FLOAT f);
|
| - void Set(const FX_FLOAT n[6]);
|
| -
|
| - void SetIdentity()
|
| - {
|
| - a = d = 1;
|
| - b = c = e = f = 0;
|
| - }
|
| -
|
| - void SetReverse(const CFX_Matrix &m);
|
| -
|
| - void Concat(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e, FX_FLOAT f, FX_BOOL bPrepended = FALSE);
|
| -
|
| - void Concat(const CFX_Matrix &m, FX_BOOL bPrepended = FALSE);
|
| -
|
| - void ConcatInverse(const CFX_Matrix& m, FX_BOOL bPrepended = FALSE);
|
| - void Reset()
|
| - {
|
| - SetIdentity();
|
| - }
|
| -
|
| - void Copy(const CFX_Matrix& m)
|
| - {
|
| - *this = m;
|
| - }
|
| -
|
| - FX_BOOL IsIdentity() const
|
| - {
|
| - return a == 1 && b == 0 && c == 0 && d == 1 && e == 0 && f == 0;
|
| - }
|
| - FX_BOOL IsInvertible() const;
|
| -
|
| - FX_BOOL Is90Rotated() const;
|
| -
|
| - FX_BOOL IsScaled() const;
|
| -
|
| - void Translate(FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended = FALSE);
|
| -
|
| - void TranslateI(int32_t x, int32_t y, FX_BOOL bPrepended = FALSE)
|
| - {
|
| - Translate((FX_FLOAT)x, (FX_FLOAT)y, bPrepended);
|
| - }
|
| + void SetReverse(const CFX_Matrix& m);
|
|
|
| - void Scale(FX_FLOAT sx, FX_FLOAT sy, FX_BOOL bPrepended = FALSE);
|
| + void Concat(FX_FLOAT a,
|
| + FX_FLOAT b,
|
| + FX_FLOAT c,
|
| + FX_FLOAT d,
|
| + FX_FLOAT e,
|
| + FX_FLOAT f,
|
| + FX_BOOL bPrepended = FALSE);
|
| +
|
| + void Concat(const CFX_Matrix& m, FX_BOOL bPrepended = FALSE);
|
| +
|
| + void ConcatInverse(const CFX_Matrix& m, FX_BOOL bPrepended = FALSE);
|
| + void Reset() { SetIdentity(); }
|
| +
|
| + void Copy(const CFX_Matrix& m) { *this = m; }
|
| +
|
| + FX_BOOL IsIdentity() const {
|
| + return a == 1 && b == 0 && c == 0 && d == 1 && e == 0 && f == 0;
|
| + }
|
| + FX_BOOL IsInvertible() const;
|
| +
|
| + FX_BOOL Is90Rotated() const;
|
| +
|
| + FX_BOOL IsScaled() const;
|
| +
|
| + void Translate(FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended = FALSE);
|
| +
|
| + void TranslateI(int32_t x, int32_t y, FX_BOOL bPrepended = FALSE) {
|
| + Translate((FX_FLOAT)x, (FX_FLOAT)y, bPrepended);
|
| + }
|
| +
|
| + void Scale(FX_FLOAT sx, FX_FLOAT sy, FX_BOOL bPrepended = FALSE);
|
| +
|
| + void Rotate(FX_FLOAT fRadian, FX_BOOL bPrepended = FALSE);
|
| +
|
| + void RotateAt(FX_FLOAT fRadian,
|
| + FX_FLOAT x,
|
| + FX_FLOAT y,
|
| + FX_BOOL bPrepended = FALSE);
|
| +
|
| + void Shear(FX_FLOAT fAlphaRadian,
|
| + FX_FLOAT fBetaRadian,
|
| + FX_BOOL bPrepended = FALSE);
|
| +
|
| + void MatchRect(const CFX_FloatRect& dest, const CFX_FloatRect& src);
|
| +
|
| + FX_FLOAT GetXUnit() const;
|
| +
|
| + FX_FLOAT GetYUnit() const;
|
| + void GetUnitRect(CFX_RectF& rect) const;
|
| +
|
| + CFX_FloatRect GetUnitRect() const;
|
| +
|
| + FX_FLOAT GetUnitArea() const;
|
| + FX_FLOAT TransformXDistance(FX_FLOAT dx) const;
|
| + int32_t TransformXDistance(int32_t dx) const;
|
| + FX_FLOAT TransformYDistance(FX_FLOAT dy) const;
|
| + int32_t TransformYDistance(int32_t dy) const;
|
| + FX_FLOAT TransformDistance(FX_FLOAT dx, FX_FLOAT dy) const;
|
| + int32_t TransformDistance(int32_t dx, int32_t dy) const;
|
| +
|
| + FX_FLOAT TransformDistance(FX_FLOAT distance) const;
|
| + void TransformPoint(FX_FLOAT& x, FX_FLOAT& y) const;
|
| + void TransformPoint(int32_t& x, int32_t& y) const;
|
| + void TransformPoints(CFX_PointF* points, int32_t iCount) const;
|
| + void TransformPoints(CFX_Point* points, int32_t iCount) const;
|
| +
|
| + void Transform(FX_FLOAT& x, FX_FLOAT& y) const { TransformPoint(x, y); }
|
|
|
| - void Rotate(FX_FLOAT fRadian, FX_BOOL bPrepended = FALSE);
|
| + void Transform(FX_FLOAT x, FX_FLOAT y, FX_FLOAT& x1, FX_FLOAT& y1) const {
|
| + x1 = x, y1 = y;
|
| + TransformPoint(x1, y1);
|
| + }
|
| + void TransformVector(CFX_VectorF& v) const;
|
| + void TransformVector(CFX_Vector& v) const;
|
| + void TransformRect(CFX_RectF& rect) const;
|
| + void TransformRect(CFX_Rect& rect) const;
|
|
|
| - void RotateAt(FX_FLOAT fRadian, FX_FLOAT x, FX_FLOAT y, FX_BOOL bPrepended = FALSE);
|
| + void TransformRect(FX_FLOAT& left,
|
| + FX_FLOAT& right,
|
| + FX_FLOAT& top,
|
| + FX_FLOAT& bottom) const;
|
|
|
| - void Shear(FX_FLOAT fAlphaRadian, FX_FLOAT fBetaRadian, FX_BOOL bPrepended = FALSE);
|
| + void TransformRect(CFX_FloatRect& rect) const {
|
| + TransformRect(rect.left, rect.right, rect.top, rect.bottom);
|
| + }
|
|
|
| - void MatchRect(const CFX_FloatRect &dest, const CFX_FloatRect &src);
|
| + FX_FLOAT GetA() const { return a; }
|
|
|
| - FX_FLOAT GetXUnit() const;
|
| + FX_FLOAT GetB() const { return b; }
|
|
|
| - FX_FLOAT GetYUnit() const;
|
| - void GetUnitRect(CFX_RectF &rect) const;
|
| + FX_FLOAT GetC() const { return c; }
|
|
|
| - CFX_FloatRect GetUnitRect() const;
|
| + FX_FLOAT GetD() const { return d; }
|
|
|
| - FX_FLOAT GetUnitArea() const;
|
| - FX_FLOAT TransformXDistance(FX_FLOAT dx) const;
|
| - int32_t TransformXDistance(int32_t dx) const;
|
| - FX_FLOAT TransformYDistance(FX_FLOAT dy) const;
|
| - int32_t TransformYDistance(int32_t dy) const;
|
| - FX_FLOAT TransformDistance(FX_FLOAT dx, FX_FLOAT dy) const;
|
| - int32_t TransformDistance(int32_t dx, int32_t dy) const;
|
| + FX_FLOAT GetE() const { return e; }
|
|
|
| - FX_FLOAT TransformDistance(FX_FLOAT distance) const;
|
| - void TransformPoint(FX_FLOAT &x, FX_FLOAT &y) const;
|
| - void TransformPoint(int32_t &x, int32_t &y) const;
|
| - void TransformPoints(CFX_PointF *points, int32_t iCount) const;
|
| - void TransformPoints(CFX_Point *points, int32_t iCount) const;
|
| + FX_FLOAT GetF() const { return f; }
|
|
|
| - void Transform(FX_FLOAT& x, FX_FLOAT& y) const
|
| - {
|
| - TransformPoint(x, y);
|
| - }
|
| -
|
| - void Transform(FX_FLOAT x, FX_FLOAT y, FX_FLOAT& x1, FX_FLOAT& y1) const
|
| - {
|
| - x1 = x, y1 = y;
|
| - TransformPoint(x1, y1);
|
| - }
|
| - void TransformVector(CFX_VectorF &v) const;
|
| - void TransformVector(CFX_Vector &v) const;
|
| - void TransformRect(CFX_RectF &rect) const;
|
| - void TransformRect(CFX_Rect &rect) const;
|
| -
|
| - void TransformRect(FX_FLOAT& left, FX_FLOAT& right, FX_FLOAT& top, FX_FLOAT& bottom) const;
|
| -
|
| - void TransformRect(CFX_FloatRect& rect) const
|
| - {
|
| - TransformRect(rect.left, rect.right, rect.top, rect.bottom);
|
| - }
|
| -
|
| - FX_FLOAT GetA() const
|
| - {
|
| - return a;
|
| - }
|
| -
|
| - FX_FLOAT GetB() const
|
| - {
|
| - return b;
|
| - }
|
| -
|
| - FX_FLOAT GetC() const
|
| - {
|
| - return c;
|
| - }
|
| -
|
| - FX_FLOAT GetD() const
|
| - {
|
| - return d;
|
| - }
|
| -
|
| - FX_FLOAT GetE() const
|
| - {
|
| - return e;
|
| - }
|
| -
|
| - FX_FLOAT GetF() const
|
| - {
|
| - return f;
|
| - }
|
| -public:
|
| - FX_FLOAT a;
|
| - FX_FLOAT b;
|
| - FX_FLOAT c;
|
| - FX_FLOAT d;
|
| - FX_FLOAT e;
|
| - FX_FLOAT f;
|
| + public:
|
| + FX_FLOAT a;
|
| + FX_FLOAT b;
|
| + FX_FLOAT c;
|
| + FX_FLOAT d;
|
| + FX_FLOAT e;
|
| + FX_FLOAT f;
|
| };
|
| -#define CFX_AffineMatrix CFX_Matrix
|
| +#define CFX_AffineMatrix CFX_Matrix
|
|
|
| #endif // CORE_INCLUDE_FXCRT_FX_COORDINATES_H_
|
|
|