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