xref: /trunk/main/sw/inc/swrect.hxx (revision 1d2dbeb0)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _SWRECT_HXX
24 #define _SWRECT_HXX
25 #include "errhdl.hxx"
26 #include <tools/gen.hxx>
27 class SvStream;
28 
29 class SwRect
30 {
31 	Point m_Point;
32 	Size m_Size;
33 
34 
35 public:
36 	inline SwRect();
37 	inline SwRect( const SwRect &rRect );
38 	inline SwRect( const Point& rLT, const Size&  rSize );
39 	inline SwRect( const Point& rLT, const Point& rRB );
40 	inline SwRect( long X, long Y, long Width, long Height );
41 
42 		//SV-SS z.B. SwRect( pWin->GetClipRect() );
43 	SwRect( const Rectangle &rRect );
44 
45 	//Set-Methoden
46 	inline void Chg( const Point& rNP, const Size &rNS );
47 	inline void Pos(  const Point& rNew );
48 	inline void Pos( const long nNewX, const long nNewY );
49 	inline void SSize( const Size&  rNew  );
50 	inline void SSize( const long nHeight, const long nWidth );
51 	inline void Width(  long nNew );
52 	inline void Height( long nNew );
53 	inline void Left( const long nLeft );
54 	inline void Right( const long nRight );
55 	inline void Top( const long nTop );
56 	inline void Bottom( const long nBottom );
57 
58 	//Get-Methoden
59 	inline const Point &Pos()  const;
60 	inline const Size  &SSize() const;
61 	inline long Width()  const;
62 	inline long Height() const;
63 	inline long Left()   const;
64 	inline long Right()  const;
65 	inline long Top()	 const;
66 	inline long Bottom() const;
67 
68 	//Damit Layoutseitig per Memberpointer auf die Member von Pos und SSize
69 	//zugegriffen werden kann.
70 	inline Point &Pos();
71 	inline Size  &SSize();
72 
73 	Point Center() const;
74 
75 	void Justify();
76 
77 		   SwRect &Union( const SwRect& rRect );
78 		   SwRect &Intersection( const SwRect& rRect );
79    //Wie Intersection nur wird davon ausgegangen, dass die Rects ueberlappen!
80 		   SwRect &_Intersection( const SwRect &rRect );
81     inline SwRect  GetIntersection( const SwRect& rRect ) const;
82 
83 		   sal_Bool IsInside( const Point& rPOINT ) const;
84 		   sal_Bool IsNear(const Point& rPoint, long nTolerance ) const;
85 		   sal_Bool IsInside( const SwRect& rRect ) const;
86 		   sal_Bool IsOver( const SwRect& rRect ) const;
87 	inline sal_Bool HasArea() const;
88 	inline sal_Bool IsEmpty() const;
89 	inline void Clear();
90 
91 	inline SwRect &operator = ( const SwRect &rRect );
92 
93 	inline sal_Bool operator == ( const SwRect& rRect ) const;
94 	inline sal_Bool operator != ( const SwRect& rRect ) const;
95 
96 	inline SwRect &operator+=( const Point &rPt );
97 	inline SwRect &operator-=( const Point &rPt );
98 
99 	inline SwRect &operator+=( const Size &rSz );
100 	inline SwRect &operator-=( const Size &rSz );
101 
102 	//SV-SS z.B. pWin->DrawRect( aSwRect.SVRect() );
103 	inline Rectangle  SVRect() const;
104 
105 	//Zortech wuerde hier fehlerhaften Code erzeugen.
106 //	inline operator SRectangle()  const;
107 //	inline operator Rectangle() const { return Rectangle( aPos, aSize ); }
108 
109 	// Ausgabeoperator fuer die Debugging-Gemeinde
110 	friend SvStream &operator<<( SvStream &rStream, const SwRect &rRect );
111 
112 
113     void _Top(      const long nTop );
114     void _Bottom(   const long nBottom );
115     void _Left(     const long nLeft );
116     void _Right(    const long nRight );
117     void _Width(    const long nNew );
118     void _Height(   const long nNew );
119     long _Top()     const;
120     long _Bottom()  const;
121     long _Left()    const;
122     long _Right()   const;
123     long _Width()   const;
124     long _Height()  const;
125     void SubTop(    const long nSub );
126     void AddBottom( const long nAdd );
127     void SubLeft(   const long nSub );
128     void AddRight(  const long nAdd );
129     void AddWidth(  const long nAdd );
130     void AddHeight( const long nAdd );
131     void SetPosX(   const long nNew );
132     void SetPosY(   const long nNew );
133     void SetLeftAndWidth( long nLeft, long nNew );
134     void SetTopAndHeight( long nTop, long nNew );
135     void SetRightAndWidth( long nRight, long nNew );
136     void SetBottomAndHeight( long nBottom, long nNew );
137     void SetUpperLeftCorner(  const Point& rNew );
138     void SetUpperRightCorner(  const Point& rNew );
139     void SetLowerLeftCorner(  const Point& rNew );
140     const Size  _Size() const;
141     const Point TopLeft()  const;
142     const Point TopRight()  const;
143     const Point BottomLeft()  const;
144     const Point BottomRight()  const;
145     const Size  SwappedSize() const;
146     long GetLeftDistance( long ) const;
147     long GetBottomDistance( long ) const;
148     long GetRightDistance( long ) const;
149     long GetTopDistance( long ) const;
150     sal_Bool OverStepLeft( long ) const;
151     sal_Bool OverStepBottom( long ) const;
152     sal_Bool OverStepTop( long ) const;
153     sal_Bool OverStepRight( long ) const;
154 };
155 
156 // Implementation in in swrect.cxx
157 extern SvStream &operator<<( SvStream &rStream, const SwRect &rRect );
158 
159 typedef void (SwRect:: *SwRectSet)( const long nNew );
160 typedef long (SwRect:: *SwRectGet)() const;
161 typedef const Point (SwRect:: *SwRectPoint)() const;
162 typedef const Size (SwRect:: *SwRectSize)() const;
163 typedef sal_Bool (SwRect:: *SwRectMax)( long ) const;
164 typedef long (SwRect:: *SwRectDist)( long ) const;
165 typedef void (SwRect:: *SwRectSetTwice)( long, long );
166 typedef void (SwRect:: *SwRectSetPos)( const Point& );
167 
168 //---------------------------------- Set-Methoden
Chg(const Point & rNP,const Size & rNS)169 inline void SwRect::Chg( const Point& rNP, const Size &rNS )
170 {
171 	m_Point = rNP;
172 	m_Size = rNS;
173 }
Pos(const Point & rNew)174 inline void SwRect::Pos(  const Point& rNew )
175 {
176 	m_Point = rNew;
177 }
Pos(const long nNewX,const long nNewY)178 inline void SwRect::Pos( const long nNewX, const long nNewY )
179 {
180 	m_Point.setX(nNewX);
181 	m_Point.setY(nNewY);
182 }
SSize(const Size & rNew)183 inline void SwRect::SSize( const Size&  rNew  )
184 {
185 	m_Size = rNew;
186 }
SSize(const long nNewHeight,const long nNewWidth)187 inline void SwRect::SSize( const long nNewHeight, const long nNewWidth )
188 {
189 	m_Size.setWidth(nNewWidth);
190 	m_Size.setHeight(nNewHeight);
191 }
Width(long nNew)192 inline void SwRect::Width(  long nNew )
193 {
194 	m_Size.setWidth(nNew);
195 }
Height(long nNew)196 inline void SwRect::Height( long nNew )
197 {
198 	m_Size.setHeight(nNew);
199 }
Left(const long nLeft)200 inline void SwRect::Left( const long nLeft )
201 {
202 	m_Size.Width() += m_Point.getX() - nLeft;
203 	m_Point.setX(nLeft);
204 }
Right(const long nRight)205 inline void SwRect::Right( const long nRight )
206 {
207 	m_Size.setWidth(nRight - m_Point.getX() + 1);
208 }
Top(const long nTop)209 inline void SwRect::Top( const long nTop )
210 {
211 	m_Size.Height() += m_Point.getY() - nTop;
212 	m_Point.setY(nTop);
213 }
Bottom(const long nBottom)214 inline void SwRect::Bottom( const long nBottom )
215 {
216 	m_Size.setHeight(nBottom - m_Point.getY() + 1);
217 }
218 
219 //----------------------------------- Get-Methoden
Pos() const220 inline const Point &SwRect::Pos()  const
221 {
222 	return m_Point;
223 }
Pos()224 inline Point &SwRect::Pos()
225 {
226 	return m_Point;
227 }
SSize() const228 inline const Size  &SwRect::SSize() const
229 {
230 	return m_Size;
231 }
SSize()232 inline Size  &SwRect::SSize()
233 {
234 	return m_Size;
235 }
Width() const236 inline long SwRect::Width()  const
237 {
238 	return m_Size.Width();
239 }
Height() const240 inline long SwRect::Height() const
241 {
242 	return m_Size.Height();
243 }
Left() const244 inline long SwRect::Left()   const
245 {
246 	return m_Point.X();
247 }
Right() const248 inline long SwRect::Right()  const
249 {
250 	return m_Size.getWidth() ? m_Point.getX() + m_Size.getWidth() - 1 : m_Point.getX();
251 }
Top() const252 inline long SwRect::Top()	 const
253 {
254 	return m_Point.Y();
255 }
Bottom() const256 inline long SwRect::Bottom() const
257 {
258 	return m_Size.getHeight() ? m_Point.getY() + m_Size.getHeight() - 1 : m_Point.getY();
259 }
260 
261 //----------------------------------- operatoren
operator =(const SwRect & rRect)262 inline SwRect &SwRect::operator = ( const SwRect &rRect )
263 {
264 	m_Point = rRect.m_Point;
265 	m_Size = rRect.m_Size;
266 	return *this;
267 }
operator ==(const SwRect & rRect) const268 inline sal_Bool SwRect::operator == ( const SwRect& rRect ) const
269 {
270 	return (m_Point == rRect.m_Point && m_Size == rRect.m_Size);
271 }
operator !=(const SwRect & rRect) const272 inline sal_Bool SwRect::operator != ( const SwRect& rRect ) const
273 {
274 	return (m_Point != rRect.m_Point || m_Size != rRect.m_Size);
275 }
276 
operator +=(const Point & rPt)277 inline SwRect &SwRect::operator+=( const Point &rPt )
278 {
279 	m_Point += rPt;
280 	return *this;
281 }
operator -=(const Point & rPt)282 inline SwRect &SwRect::operator-=( const Point &rPt )
283 {
284 	m_Point -= rPt;
285 	return *this;
286 }
287 
operator +=(const Size & rSz)288 inline SwRect &SwRect::operator+=( const Size &rSz )
289 {
290 	m_Size.Width() += rSz.Width();
291 	m_Size.Height() += rSz.Height();
292 	return *this;
293 }
operator -=(const Size & rSz)294 inline SwRect &SwRect::operator-=( const Size &rSz )
295 {
296 	m_Size.Width() -= rSz.Width();
297 	m_Size.Height() -= rSz.Height();
298 	return *this;
299 }
300 
301 
302 //--------------------------- Sonstiges
SVRect() const303 inline Rectangle SwRect::SVRect() const
304 {
305 	ASSERT( !IsEmpty(), "SVRect() without Width or Height" );
306 	return Rectangle( m_Point.getX(), m_Point.getY(),
307 		m_Point.getX() + m_Size.getWidth() - 1,         //Right()
308 		m_Point.getY() + m_Size.getHeight() - 1 );      //Bottom()
309 }
310 
GetIntersection(const SwRect & rRect) const311 inline SwRect SwRect::GetIntersection( const SwRect& rRect ) const
312 {
313 	return SwRect( *this ).Intersection( rRect );
314 }
315 
HasArea() const316 inline sal_Bool SwRect::HasArea() const
317 {
318 	return !IsEmpty();
319 }
IsEmpty() const320 inline sal_Bool SwRect::IsEmpty() const
321 {
322 	return !(m_Size.getHeight() && m_Size.getWidth());
323 }
Clear()324 inline void SwRect::Clear()
325 {
326 	m_Point.setX(0);
327 	m_Point.setY(0);
328 	m_Size.setWidth(0);
329 	m_Size.setHeight(0);
330 }
331 
332 //-------------------------- CToren
SwRect()333 inline SwRect::SwRect() :
334 	m_Point( 0, 0 ),
335 	m_Size( 0, 0 )
336 {
337 }
SwRect(const SwRect & rRect)338 inline SwRect::SwRect( const SwRect &rRect ) :
339 	m_Point( rRect.m_Point ),
340 	m_Size( rRect.m_Size )
341 {
342 }
SwRect(const Point & rLT,const Size & rSize)343 inline SwRect::SwRect( const Point& rLT, const Size&  rSize ) :
344 	m_Point( rLT ),
345 	m_Size( rSize )
346 {
347 }
SwRect(const Point & rLT,const Point & rRB)348 inline SwRect::SwRect( const Point& rLT, const Point& rRB ) :
349 	m_Point( rLT ),
350 	m_Size( rRB.X() - rLT.X() + 1, rRB.Y() - rLT.Y() + 1 )
351 {
352 }
SwRect(long X,long Y,long W,long H)353 inline SwRect::SwRect( long X, long Y, long W, long H ) :
354 	m_Point( X, Y ),
355 	m_Size( W, H )
356 {
357 }
358 
359 
360 #endif	//_SWRECT_HXX
361