Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 : #ifndef _SV_GEN_HXX
20 : #define _SV_GEN_HXX
21 :
22 : #include "tools/toolsdllapi.h"
23 : #include <tools/solar.h>
24 :
25 : #include <limits.h>
26 : #include <ostream>
27 :
28 : class SvStream;
29 :
30 : // Pair
31 :
32 : class SAL_WARN_UNUSED Pair
33 : {
34 : public:
35 : Pair();
36 : Pair( long nA, long nB );
37 :
38 0 : long A() const { return nA; }
39 0 : long B() const { return nB; }
40 :
41 2833 : long& A() { return nA; }
42 2829 : long& B() { return nB; }
43 :
44 : sal_Bool operator == ( const Pair& rPair ) const;
45 : sal_Bool operator != ( const Pair& rPair ) const;
46 :
47 : TOOLS_DLLPUBLIC friend SvStream& operator>>( SvStream& rIStream, Pair& rPair );
48 : TOOLS_DLLPUBLIC friend SvStream& operator<<( SvStream& rOStream, const Pair& rPair );
49 :
50 : protected:
51 : long nA;
52 : long nB;
53 : };
54 :
55 1761787 : inline Pair::Pair()
56 : {
57 1761787 : nA = nB = 0;
58 1761787 : }
59 :
60 6255360 : inline Pair::Pair( long _nA, long _nB )
61 : {
62 6255360 : Pair::nA = _nA;
63 6255360 : Pair::nB = _nB;
64 6255360 : }
65 :
66 379817 : inline sal_Bool Pair::operator == ( const Pair& rPair ) const
67 : {
68 379817 : return ((nA == rPair.nA) && (nB == rPair.nB));
69 : }
70 :
71 599749 : inline sal_Bool Pair::operator != ( const Pair& rPair ) const
72 : {
73 599749 : return ((nA != rPair.nA) || (nB != rPair.nB));
74 : }
75 :
76 : // Point
77 :
78 : class SAL_WARN_UNUSED Point : public Pair
79 : {
80 : public:
81 : Point();
82 : Point( long nX, long nY );
83 :
84 4102447 : long X() const { return nA; }
85 3501544 : long Y() const { return nB; }
86 :
87 1317251 : long& X() { return nA; }
88 1216823 : long& Y() { return nB; }
89 :
90 : void Move( long nHorzMove, long nVertMove );
91 : sal_Bool IsAbove( const Point& rPoint ) const;
92 : sal_Bool IsBelow( const Point& rPoint ) const;
93 : sal_Bool IsLeft( const Point& rPoint ) const;
94 : sal_Bool IsRight( const Point& rPoint ) const;
95 :
96 : Point& operator += ( const Point& rPoint );
97 : Point& operator -= ( const Point& rPoint );
98 : Point& operator *= ( const long nVal );
99 : Point& operator /= ( const long nVal );
100 :
101 : friend inline Point operator+( const Point &rVal1, const Point &rVal2 );
102 : friend inline Point operator-( const Point &rVal1, const Point &rVal2 );
103 : friend inline Point operator*( const Point &rVal1, const long nVal2 );
104 : friend inline Point operator/( const Point &rVal1, const long nVal2 );
105 :
106 626621 : long getX() const { return X(); }
107 532683 : long getY() const { return Y(); }
108 35761 : void setX(long nX) { X() = nX; }
109 28339 : void setY(long nY) { Y() = nY; }
110 : };
111 :
112 1022175 : inline Point::Point()
113 : {
114 1022175 : }
115 :
116 4212650 : inline Point::Point( long nX, long nY ) : Pair( nX, nY )
117 : {
118 4212650 : }
119 :
120 20 : inline void Point::Move( long nHorzMove, long nVertMove )
121 : {
122 20 : nA += nHorzMove;
123 20 : nB += nVertMove;
124 20 : }
125 :
126 : inline sal_Bool Point::IsAbove( const Point& rPoint ) const
127 : {
128 : return (nB > rPoint.nB);
129 : }
130 :
131 : inline sal_Bool Point::IsBelow( const Point& rPoint ) const
132 : {
133 : return (nB < rPoint.nB);
134 : }
135 :
136 : inline sal_Bool Point::IsLeft( const Point& rPoint ) const
137 : {
138 : return (nA < rPoint.nA);
139 : }
140 :
141 : inline sal_Bool Point::IsRight( const Point& rPoint ) const
142 : {
143 : return (nA > rPoint.nA);
144 : }
145 :
146 231126 : inline Point& Point::operator += ( const Point& rPoint )
147 : {
148 231126 : nA += rPoint.nA;
149 231126 : nB += rPoint.nB;
150 231126 : return *this;
151 : }
152 :
153 43052 : inline Point& Point::operator -= ( const Point& rPoint )
154 : {
155 43052 : nA -= rPoint.nA;
156 43052 : nB -= rPoint.nB;
157 43052 : return *this;
158 : }
159 :
160 0 : inline Point& Point::operator *= ( const long nVal )
161 : {
162 0 : nA *= nVal;
163 0 : nB *= nVal;
164 0 : return *this;
165 : }
166 :
167 0 : inline Point& Point::operator /= ( const long nVal )
168 : {
169 0 : nA /= nVal;
170 0 : nB /= nVal;
171 0 : return *this;
172 : }
173 :
174 466600 : inline Point operator+( const Point &rVal1, const Point &rVal2 )
175 : {
176 466600 : return Point( rVal1.nA+rVal2.nA, rVal1.nB+rVal2.nB );
177 : }
178 :
179 241010 : inline Point operator-( const Point &rVal1, const Point &rVal2 )
180 : {
181 241010 : return Point( rVal1.nA-rVal2.nA, rVal1.nB-rVal2.nB );
182 : }
183 :
184 0 : inline Point operator*( const Point &rVal1, const long nVal2 )
185 : {
186 0 : return Point( rVal1.nA*nVal2, rVal1.nB*nVal2 );
187 : }
188 :
189 0 : inline Point operator/( const Point &rVal1, const long nVal2 )
190 : {
191 0 : return Point( rVal1.nA/nVal2, rVal1.nB/nVal2 );
192 : }
193 :
194 : template< typename charT, typename traits >
195 : inline std::basic_ostream<charT, traits> & operator <<(
196 : std::basic_ostream<charT, traits> & stream, const Point& point )
197 : {
198 : return stream << point.X() << ',' << point.Y();
199 : }
200 :
201 : // Size
202 :
203 : class SAL_WARN_UNUSED Size : public Pair
204 : {
205 : public:
206 : Size();
207 : Size( long nWidth, long nHeight );
208 :
209 2875966 : long Width() const { return nA; }
210 2525154 : long Height() const { return nB; }
211 :
212 3037524 : long& Width() { return nA; }
213 1476661 : long& Height() { return nB; }
214 :
215 776169 : long getWidth() const { return Width(); }
216 713278 : long getHeight() const { return Height(); }
217 144585 : void setWidth(long nWidth) { Width() = nWidth; }
218 124294 : void setHeight(long nHeight) { Height() = nHeight; }
219 : };
220 :
221 739002 : inline Size::Size()
222 : {
223 739002 : }
224 :
225 1977073 : inline Size::Size( long nWidth, long nHeight ) :
226 1977073 : Pair( nWidth, nHeight )
227 : {
228 1977073 : }
229 :
230 : template< typename charT, typename traits >
231 : inline std::basic_ostream<charT, traits> & operator <<(
232 : std::basic_ostream<charT, traits> & stream, const Size& size )
233 : {
234 : return stream << size.Width() << 'x' << size.Height();
235 : }
236 :
237 : // Range
238 :
239 : #define RANGE_MAX LONG_MAX
240 :
241 : class SAL_WARN_UNUSED Range : public Pair
242 : {
243 : public:
244 : Range();
245 : Range( long nMin, long nMax );
246 :
247 52 : long Min() const { return nA; }
248 32 : long Max() const { return nB; }
249 54531 : long Len() const { return nB - nA + 1; }
250 :
251 108666 : long& Min() { return nA; }
252 224760 : long& Max() { return nB; }
253 :
254 : sal_Bool IsInside( long nIs ) const;
255 :
256 : void Justify();
257 : };
258 :
259 0 : inline Range::Range()
260 : {
261 0 : }
262 :
263 65413 : inline Range::Range( long nMin, long nMax ) : Pair( nMin, nMax )
264 : {
265 65413 : }
266 :
267 0 : inline sal_Bool Range::IsInside( long nIs ) const
268 : {
269 0 : return ((nA <= nIs) && (nIs <= nB ));
270 : }
271 :
272 6360 : inline void Range::Justify()
273 : {
274 6360 : if ( nA > nB )
275 : {
276 0 : long nHelp = nA;
277 0 : nA = nB;
278 0 : nB = nHelp;
279 : }
280 6360 : }
281 :
282 : template< typename charT, typename traits >
283 : inline std::basic_ostream<charT, traits> & operator <<(
284 : std::basic_ostream<charT, traits> & stream, const Range& range )
285 : {
286 : return stream << range.Min() << '-' << range.Max();
287 : }
288 :
289 : // Selection
290 :
291 : #define SELECTION_MIN LONG_MIN
292 : #define SELECTION_MAX LONG_MAX
293 :
294 : class SAL_WARN_UNUSED Selection : public Pair
295 : {
296 : public:
297 : Selection();
298 : Selection( long nPos );
299 : Selection( long nMin, long nMax );
300 :
301 0 : long Min() const { return nA; }
302 0 : long Max() const { return nB; }
303 220 : long Len() const { return nB - nA; }
304 :
305 282 : long& Min() { return nA; }
306 368 : long& Max() { return nB; }
307 :
308 : sal_Bool IsInside( long nIs ) const;
309 :
310 : void Justify();
311 :
312 18 : sal_Bool operator !() const { return !Len(); }
313 :
314 0 : long getMin() const { return Min(); }
315 : long getMax() const { return Max(); }
316 0 : void setMin(long nMin) { Min() = nMin; }
317 0 : void setMax(long nMax) { Max() = nMax; }
318 : };
319 :
320 610 : inline Selection::Selection()
321 : {
322 610 : }
323 :
324 0 : inline Selection::Selection( long nPos ) : Pair( nPos, nPos )
325 : {
326 0 : }
327 :
328 220 : inline Selection::Selection( long nMin, long nMax ) :
329 220 : Pair( nMin, nMax )
330 : {
331 220 : }
332 :
333 0 : inline sal_Bool Selection::IsInside( long nIs ) const
334 : {
335 0 : return ((nA <= nIs) && (nIs < nB ));
336 : }
337 :
338 68 : inline void Selection::Justify()
339 : {
340 68 : if ( nA > nB )
341 : {
342 0 : long nHelp = nA;
343 0 : nA = nB;
344 0 : nB = nHelp;
345 : }
346 68 : }
347 :
348 : template< typename charT, typename traits >
349 : inline std::basic_ostream<charT, traits> & operator <<(
350 : std::basic_ostream<charT, traits> & stream, const Selection& selection )
351 : {
352 : return stream << selection.Min() << '-' << selection.Max();
353 : }
354 : // Rectangle
355 :
356 : #define RECT_EMPTY ((short)-32767)
357 :
358 : class TOOLS_DLLPUBLIC SAL_WARN_UNUSED Rectangle
359 : {
360 : public:
361 : Rectangle();
362 : Rectangle( const Point& rLT, const Point& rRB );
363 : Rectangle( long nLeft, long nTop,
364 : long nRight, long nBottom );
365 : Rectangle( const Point& rLT, const Size& rSize );
366 :
367 648167 : long Left() const { return nLeft; }
368 618309 : long Right() const { return nRight; }
369 647963 : long Top() const { return nTop; }
370 613786 : long Bottom() const { return nBottom; }
371 :
372 649299 : long& Left() { return nLeft; }
373 520487 : long& Right() { return nRight; }
374 723343 : long& Top() { return nTop; }
375 421505 : long& Bottom() { return nBottom; }
376 :
377 : inline Point TopLeft() const;
378 : inline Point TopRight() const;
379 : inline Point TopCenter() const;
380 : inline Point BottomLeft() const;
381 : inline Point BottomRight() const;
382 : inline Point BottomCenter() const;
383 : inline Point LeftCenter() const;
384 : inline Point RightCenter() const;
385 : inline Point Center() const;
386 :
387 : inline void Move( long nHorzMove, long nVertMove );
388 : inline void Transpose();
389 : inline void SetPos( const Point& rPoint );
390 : void SetSize( const Size& rSize );
391 : inline Size GetSize() const;
392 :
393 : inline long GetWidth() const;
394 : inline long GetHeight() const;
395 :
396 : Rectangle& Union( const Rectangle& rRect );
397 : Rectangle& Intersection( const Rectangle& rRect );
398 : inline Rectangle GetUnion( const Rectangle& rRect ) const;
399 : inline Rectangle GetIntersection( const Rectangle& rRect ) const;
400 :
401 : void Justify();
402 :
403 : sal_Bool IsInside( const Point& rPOINT ) const;
404 : sal_Bool IsInside( const Rectangle& rRect ) const;
405 : sal_Bool IsOver( const Rectangle& rRect ) const;
406 :
407 77420 : void SetEmpty() { nRight = nBottom = RECT_EMPTY; }
408 : inline sal_Bool IsEmpty() const;
409 :
410 : inline sal_Bool operator == ( const Rectangle& rRect ) const;
411 : inline sal_Bool operator != ( const Rectangle& rRect ) const;
412 :
413 : inline Rectangle& operator += ( const Point& rPt );
414 : inline Rectangle& operator -= ( const Point& rPt );
415 :
416 : friend inline Rectangle operator + ( const Rectangle& rRect, const Point& rPt );
417 : friend inline Rectangle operator - ( const Rectangle& rRect, const Point& rPt );
418 :
419 : TOOLS_DLLPUBLIC friend SvStream& operator>>( SvStream& rIStream, Rectangle& rRect );
420 : TOOLS_DLLPUBLIC friend SvStream& operator<<( SvStream& rOStream, const Rectangle& rRect );
421 :
422 : // ONE
423 12 : long getX() const { return nLeft; }
424 36 : long getY() const { return nTop; }
425 7450 : long getWidth() const { return nRight - nLeft; }
426 7574 : long getHeight() const { return nBottom - nTop; }
427 3465 : void setX( long n ) { nRight += n-nLeft; nLeft = n; }
428 3457 : void setY( long n ) { nBottom += n-nTop; nTop = n; }
429 13176 : void setWidth( long n ) { nRight = nLeft + n; }
430 15492 : void setHeight( long n ) { nBottom = nTop + n; }
431 :
432 : private:
433 : long nLeft;
434 : long nTop;
435 : long nRight;
436 : long nBottom;
437 : };
438 :
439 754563 : inline Rectangle::Rectangle()
440 : {
441 754563 : nLeft = nTop = 0;
442 754563 : nRight = nBottom = RECT_EMPTY;
443 754563 : }
444 :
445 96814 : inline Rectangle::Rectangle( const Point& rLT, const Point& rRB )
446 : {
447 96814 : nLeft = rLT.X();
448 96814 : nTop = rLT.Y();
449 96814 : nRight = rRB.X();
450 96814 : nBottom = rRB.Y();
451 96814 : }
452 :
453 371687 : inline Rectangle::Rectangle( long _nLeft, long _nTop,
454 : long _nRight, long _nBottom )
455 : {
456 371687 : nLeft = _nLeft;
457 371687 : nTop = _nTop;
458 371687 : nRight = _nRight;
459 371687 : nBottom = _nBottom;
460 371687 : }
461 :
462 369799 : inline Rectangle::Rectangle( const Point& rLT, const Size& rSize )
463 : {
464 369799 : nLeft = rLT.X();
465 369799 : nTop = rLT.Y();
466 369799 : nRight = rSize.Width() ? nLeft+rSize.Width()-1 : RECT_EMPTY;
467 369799 : nBottom = rSize.Height() ? nTop+rSize.Height()-1 : RECT_EMPTY;
468 369799 : }
469 :
470 778682 : inline sal_Bool Rectangle::IsEmpty() const
471 : {
472 778682 : return ((nRight == RECT_EMPTY) || (nBottom == RECT_EMPTY));
473 : }
474 :
475 198854 : inline Point Rectangle::TopLeft() const
476 : {
477 198854 : return Point( nLeft, nTop );
478 : }
479 :
480 151407 : inline Point Rectangle::TopRight() const
481 : {
482 151407 : return Point( (nRight == RECT_EMPTY) ? nLeft : nRight, nTop );
483 : }
484 :
485 41282 : inline Point Rectangle::BottomLeft() const
486 : {
487 41282 : return Point( nLeft, (nBottom == RECT_EMPTY) ? nTop : nBottom );
488 : }
489 :
490 42575 : inline Point Rectangle::BottomRight() const
491 : {
492 : return Point( (nRight == RECT_EMPTY) ? nLeft : nRight,
493 42575 : (nBottom == RECT_EMPTY) ? nTop : nBottom );
494 : }
495 :
496 0 : inline Point Rectangle::TopCenter() const
497 : {
498 0 : if ( IsEmpty() )
499 0 : return Point( nLeft, nTop );
500 : else
501 0 : return Point( Min( nLeft, nRight ) + Abs( (nRight - nLeft)/2 ),
502 0 : Min( nTop, nBottom) );
503 : }
504 :
505 0 : inline Point Rectangle::BottomCenter() const
506 : {
507 0 : if ( IsEmpty() )
508 0 : return Point( nLeft, nTop );
509 : else
510 0 : return Point( Min( nLeft, nRight ) + Abs( (nRight - nLeft)/2 ),
511 0 : Max( nTop, nBottom) );
512 : }
513 :
514 0 : inline Point Rectangle::LeftCenter() const
515 : {
516 0 : if ( IsEmpty() )
517 0 : return Point( nLeft, nTop );
518 : else
519 0 : return Point( Min( nLeft, nRight ), nTop + (nBottom - nTop)/2 );
520 : }
521 :
522 0 : inline Point Rectangle::RightCenter() const
523 : {
524 0 : if ( IsEmpty() )
525 0 : return Point( nLeft, nTop );
526 : else
527 0 : return Point( Max( nLeft, nRight ), nTop + (nBottom - nTop)/2 );
528 : }
529 :
530 21943 : inline Point Rectangle::Center() const
531 : {
532 21943 : if ( IsEmpty() )
533 5500 : return Point( nLeft, nTop );
534 : else
535 16443 : return Point( nLeft+(nRight-nLeft)/2 , nTop+(nBottom-nTop)/2 );
536 : }
537 :
538 48205 : inline void Rectangle::Move( long nHorzMove, long nVertMove )
539 : {
540 48205 : nLeft += nHorzMove;
541 48205 : nTop += nVertMove;
542 48205 : if ( nRight != RECT_EMPTY )
543 34409 : nRight += nHorzMove;
544 48205 : if ( nBottom != RECT_EMPTY )
545 34817 : nBottom += nVertMove;
546 48205 : }
547 :
548 0 : void Rectangle::Transpose()
549 : {
550 0 : if ( !IsEmpty() )
551 : {
552 0 : long swap( nLeft );
553 0 : nLeft = nTop;
554 0 : nTop = swap;
555 :
556 0 : swap = nRight;
557 0 : nRight = nBottom;
558 0 : nBottom = swap;
559 : }
560 0 : }
561 :
562 3812 : inline void Rectangle::SetPos( const Point& rPoint )
563 : {
564 3812 : if ( nRight != RECT_EMPTY )
565 3662 : nRight += rPoint.X() - nLeft;
566 3812 : if ( nBottom != RECT_EMPTY )
567 3662 : nBottom += rPoint.Y() - nTop;
568 3812 : nLeft = rPoint.X();
569 3812 : nTop = rPoint.Y();
570 3812 : }
571 :
572 249071 : inline long Rectangle::GetWidth() const
573 : {
574 : long n;
575 249071 : if ( nRight == RECT_EMPTY )
576 13391 : n = 0;
577 : else
578 : {
579 235680 : n = nRight - nLeft;
580 235680 : if( n < 0 )
581 750 : n--;
582 : else
583 234930 : n++;
584 : }
585 :
586 249071 : return n;
587 : }
588 :
589 298354 : inline long Rectangle::GetHeight() const
590 : {
591 : long n;
592 298354 : if ( nBottom == RECT_EMPTY )
593 12413 : n = 0;
594 : else
595 : {
596 285941 : n = nBottom - nTop;
597 285941 : if ( n < 0 )
598 1402 : n--;
599 : else
600 284539 : n++;
601 : }
602 :
603 298354 : return n;
604 : }
605 :
606 48307 : inline Size Rectangle::GetSize() const
607 : {
608 48307 : return Size( GetWidth(), GetHeight() );
609 : }
610 :
611 0 : inline Rectangle Rectangle::GetUnion( const Rectangle& rRect ) const
612 : {
613 0 : Rectangle aTmpRect( *this );
614 0 : return aTmpRect.Union( rRect );
615 : }
616 :
617 0 : inline Rectangle Rectangle::GetIntersection( const Rectangle& rRect ) const
618 : {
619 0 : Rectangle aTmpRect( *this );
620 0 : return aTmpRect.Intersection( rRect );
621 : }
622 :
623 3950 : inline sal_Bool Rectangle::operator == ( const Rectangle& rRect ) const
624 : {
625 : return ((nLeft == rRect.nLeft ) &&
626 : (nTop == rRect.nTop ) &&
627 : (nRight == rRect.nRight ) &&
628 3950 : (nBottom == rRect.nBottom ));
629 : }
630 :
631 5874 : inline sal_Bool Rectangle::operator != ( const Rectangle& rRect ) const
632 : {
633 : return ((nLeft != rRect.nLeft ) ||
634 : (nTop != rRect.nTop ) ||
635 : (nRight != rRect.nRight ) ||
636 5874 : (nBottom != rRect.nBottom ));
637 : }
638 :
639 103474 : inline Rectangle& Rectangle::operator +=( const Point& rPt )
640 : {
641 103474 : nLeft += rPt.X();
642 103474 : nTop += rPt.Y();
643 103474 : if ( nRight != RECT_EMPTY )
644 98500 : nRight += rPt.X();
645 103474 : if ( nBottom != RECT_EMPTY )
646 98066 : nBottom += rPt.Y();
647 103474 : return *this;
648 : }
649 :
650 4 : inline Rectangle& Rectangle::operator -= ( const Point& rPt )
651 : {
652 4 : nLeft -= rPt.X();
653 4 : nTop -= rPt.Y();
654 4 : if ( nRight != RECT_EMPTY )
655 4 : nRight -= rPt.X();
656 4 : if ( nBottom != RECT_EMPTY )
657 4 : nBottom -= rPt.Y();
658 4 : return *this;
659 : }
660 :
661 3986 : inline Rectangle operator + ( const Rectangle& rRect, const Point& rPt )
662 : {
663 7972 : Rectangle aRect( rRect.nLeft + rPt.X(), rRect.nTop + rPt.Y(),
664 3986 : (rRect.nRight == RECT_EMPTY) ? RECT_EMPTY : rRect.nRight + rPt.X(),
665 15944 : (rRect.nBottom == RECT_EMPTY) ? RECT_EMPTY : rRect.nBottom + rPt.Y() );
666 3986 : return aRect;
667 : }
668 :
669 2048 : inline Rectangle operator - ( const Rectangle& rRect, const Point& rPt )
670 : {
671 2048 : Rectangle aRect( rRect.nLeft - rPt.X(),
672 2048 : rRect.nTop - rPt.Y(),
673 2048 : (rRect.nRight == RECT_EMPTY) ? RECT_EMPTY : rRect.nRight - rPt.X(),
674 8192 : (rRect.nBottom == RECT_EMPTY) ? RECT_EMPTY : rRect.nBottom - rPt.Y() );
675 2048 : return aRect;
676 : }
677 :
678 : template< typename charT, typename traits >
679 : inline std::basic_ostream<charT, traits> & operator <<(
680 : std::basic_ostream<charT, traits> & stream, const Rectangle& rectangle )
681 : {
682 : return stream << rectangle.getX() << ',' << rectangle.getY() << ' '
683 : << rectangle.getWidth() << 'x' << rectangle.getHeight();
684 : }
685 :
686 : #endif
687 :
688 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|