enigma2 (20120327 rel32 -> 20120430 master)
[enigma2.git] / usr / include / enigma2 / lib / gdi / epoint.h
1 #ifndef EPOINT_H
2 #define EPOINT_H
3
4 #include <lib/gdi/esize.h>
5
6 class QPoint;
7
8 #ifndef ABS
9 #define ABS(x) ( x>0 ? x : -x )
10 #endif
11
12 class ePoint
13 {
14 public:
15         ePoint();
16         ePoint( int xpos, int ypos );
17
18 #if defined(HAVE_QT) && !defined(SWIG)
19         ePoint(const QPoint &p);
20         operator QPoint() const;
21 #endif
22
23         bool   isNull() const;
24
25         int        x()          const;
26         int        y()          const;
27         void   setX( int x );
28         void   setY( int y );
29
30         int manhattanLength() const;
31
32         int &rx();
33         int &ry();
34
35         ePoint &operator+=( const ePoint &p );
36         ePoint &operator-=( const ePoint &p );
37         ePoint &operator*=( int c );
38         ePoint &operator*=( double c );
39         ePoint &operator/=( int c );
40         ePoint &operator/=( double c );
41
42         friend inline bool       operator==( const ePoint &, const ePoint & );
43         friend inline bool       operator!=( const ePoint &, const ePoint & );
44         friend inline ePoint operator+( const ePoint &, const ePoint & );
45         friend inline ePoint operator+( const ePoint &, const eSize & );
46         friend inline ePoint operator-( const ePoint &, const ePoint & );
47         friend inline ePoint operator-( const ePoint &, const eSize & );
48         friend inline ePoint operator*( const ePoint &, int );
49         friend inline ePoint operator*( int, const ePoint & );
50         friend inline ePoint operator*( const ePoint &, double );
51         friend inline ePoint operator*( double, const ePoint & );
52         friend inline ePoint operator-( const ePoint & );
53         friend inline ePoint operator/( const ePoint &, int );
54         friend inline ePoint operator/( const ePoint &, double );
55 private:
56         int xp;
57         int yp;
58 };
59
60
61 inline int ePoint::manhattanLength() const
62 {
63         return ABS(x())+ABS(y());
64 }
65
66
67 /*****************************************************************************
68   ePoint inline functions
69  *****************************************************************************/
70
71 inline ePoint::ePoint()
72 { xp=0; yp=0; }
73
74 inline ePoint::ePoint( int xpos, int ypos )
75 { xp=(int)xpos; yp=(int)ypos; }
76
77 inline bool ePoint::isNull() const
78 { return xp == 0 && yp == 0; }
79
80 inline int ePoint::x() const
81 { return xp; }
82
83 inline int ePoint::y() const
84 { return yp; }
85
86 inline void ePoint::setX( int x )
87 { xp = (int)x; }
88
89 inline void ePoint::setY( int y )
90 { yp = (int)y; }
91
92 inline int &ePoint::rx()
93 { return xp; }
94
95 inline int &ePoint::ry()
96 { return yp; }
97
98 inline ePoint &ePoint::operator+=( const ePoint &p )
99 { xp+=p.xp; yp+=p.yp; return *this; }
100
101 inline ePoint &ePoint::operator-=( const ePoint &p )
102 { xp-=p.xp; yp-=p.yp; return *this; }
103
104 inline ePoint &ePoint::operator*=( int c )
105 { xp*=(int)c; yp*=(int)c; return *this; }
106
107 inline ePoint &ePoint::operator*=( double c )
108 { xp=(int)(xp*c); yp=(int)(yp*c); return *this; }
109
110 inline bool operator==( const ePoint &p1, const ePoint &p2 )
111 { return p1.xp == p2.xp && p1.yp == p2.yp; }
112
113 inline bool operator!=( const ePoint &p1, const ePoint &p2 )
114 { return p1.xp != p2.xp || p1.yp != p2.yp; }
115
116 inline ePoint operator+( const ePoint &p1, const ePoint &p2 )
117 { return ePoint(p1.xp+p2.xp, p1.yp+p2.yp); }
118
119 inline ePoint operator-( const ePoint &p1, const ePoint &p2 )
120 { return ePoint(p1.xp-p2.xp, p1.yp-p2.yp); }
121
122 inline ePoint operator+( const ePoint &p1, const eSize &p2 )
123 { return ePoint(p1.xp+p2.width(), p1.yp+p2.height()); }
124
125 inline ePoint operator-( const ePoint &p1, const eSize &p2 )
126 { return ePoint(p1.xp-p2.width(), p1.yp-p2.height()); }
127
128 inline ePoint operator*( const ePoint &p, int c )
129 { return ePoint(p.xp*c, p.yp*c); }
130
131 inline ePoint operator*( int c, const ePoint &p )
132 { return ePoint(p.xp*c, p.yp*c); }
133
134 inline ePoint operator*( const ePoint &p, double c )
135 { return ePoint((int)(p.xp*c), (int)(p.yp*c)); }
136
137 inline ePoint operator*( double c, const ePoint &p )
138 { return ePoint((int)(p.xp*c), (int)(p.yp*c)); }
139
140 inline ePoint operator-( const ePoint &p )
141 { return ePoint(-p.xp, -p.yp); }
142
143 inline ePoint &ePoint::operator/=( int c )
144 {
145         xp/=(int)c;
146         yp/=(int)c;
147         return *this;
148 }
149
150 inline ePoint &ePoint::operator/=( double c )
151 {
152         xp=(int)(xp/c);
153         yp=(int)(yp/c);
154         return *this;
155 }
156
157 inline ePoint operator/( const ePoint &p, int c )
158 {
159         return ePoint(p.xp/c, p.yp/c);
160 }
161
162 inline ePoint operator/( const ePoint &p, double c )
163 {
164         return ePoint((int)(p.xp/c), (int)(p.yp/c));
165 }
166
167
168 #endif // EPOINT_H