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 1359 : long& A() { return nA; }
42 1357 : 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 814030 : inline Pair::Pair()
56 : {
57 814030 : nA = nB = 0;
58 814030 : }
59 :
60 2831930 : inline Pair::Pair( long _nA, long _nB )
61 : {
62 2831930 : Pair::nA = _nA;
63 2831930 : Pair::nB = _nB;
64 2831930 : }
65 :
66 147299 : inline sal_Bool Pair::operator == ( const Pair& rPair ) const
67 : {
68 147299 : return ((nA == rPair.nA) && (nB == rPair.nB));
69 : }
70 :
71 288086 : inline sal_Bool Pair::operator != ( const Pair& rPair ) const
72 : {
73 288086 : 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 1876282 : long X() const { return nA; }
85 1613977 : long Y() const { return nB; }
86 :
87 600375 : long& X() { return nA; }
88 565787 : 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 290035 : long getX() const { return X(); }
107 237401 : long getY() const { return Y(); }
108 16559 : void setX(long nX) { X() = nX; }
109 12361 : void setY(long nY) { Y() = nY; }
110 : };
111 :
112 474842 : inline Point::Point()
113 : {
114 474842 : }
115 :
116 1892223 : inline Point::Point( long nX, long nY ) : Pair( nX, nY )
117 : {
118 1892223 : }
119 :
120 8 : inline void Point::Move( long nHorzMove, long nVertMove )
121 : {
122 8 : nA += nHorzMove;
123 8 : nB += nVertMove;
124 8 : }
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 104895 : inline Point& Point::operator += ( const Point& rPoint )
147 : {
148 104895 : nA += rPoint.nA;
149 104895 : nB += rPoint.nB;
150 104895 : return *this;
151 : }
152 :
153 19864 : inline Point& Point::operator -= ( const Point& rPoint )
154 : {
155 19864 : nA -= rPoint.nA;
156 19864 : nB -= rPoint.nB;
157 19864 : 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 209344 : inline Point operator+( const Point &rVal1, const Point &rVal2 )
175 : {
176 209344 : return Point( rVal1.nA+rVal2.nA, rVal1.nB+rVal2.nB );
177 : }
178 :
179 113980 : inline Point operator-( const Point &rVal1, const Point &rVal2 )
180 : {
181 113980 : 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 1303758 : long Width() const { return nA; }
210 1128527 : long Height() const { return nB; }
211 :
212 1318368 : long& Width() { return nA; }
213 689422 : long& Height() { return nB; }
214 :
215 349691 : long getWidth() const { return Width(); }
216 315502 : long getHeight() const { return Height(); }
217 64464 : void setWidth(long nWidth) { Width() = nWidth; }
218 55078 : void setHeight(long nHeight) { Height() = nHeight; }
219 : };
220 :
221 338940 : inline Size::Size()
222 : {
223 338940 : }
224 :
225 908796 : inline Size::Size( long nWidth, long nHeight ) :
226 908796 : Pair( nWidth, nHeight )
227 : {
228 908796 : }
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 26 : long Min() const { return nA; }
248 16 : long Max() const { return nB; }
249 26174 : long Len() const { return nB - nA + 1; }
250 :
251 51856 : long& Min() { return nA; }
252 107842 : 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 30897 : inline Range::Range( long nMin, long nMax ) : Pair( nMin, nMax )
264 : {
265 30897 : }
266 :
267 0 : inline sal_Bool Range::IsInside( long nIs ) const
268 : {
269 0 : return ((nA <= nIs) && (nIs <= nB ));
270 : }
271 :
272 2794 : inline void Range::Justify()
273 : {
274 2794 : if ( nA > nB )
275 : {
276 0 : long nHelp = nA;
277 0 : nA = nB;
278 0 : nB = nHelp;
279 : }
280 2794 : }
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 42 : long Len() const { return nB - nA; }
304 :
305 36 : long& Min() { return nA; }
306 48 : long& Max() { return nB; }
307 :
308 : sal_Bool IsInside( long nIs ) const;
309 :
310 : void Justify();
311 :
312 0 : 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 248 : inline Selection::Selection()
321 : {
322 248 : }
323 :
324 0 : inline Selection::Selection( long nPos ) : Pair( nPos, nPos )
325 : {
326 0 : }
327 :
328 12 : inline Selection::Selection( long nMin, long nMax ) :
329 12 : Pair( nMin, nMax )
330 : {
331 12 : }
332 :
333 0 : inline sal_Bool Selection::IsInside( long nIs ) const
334 : {
335 0 : return ((nA <= nIs) && (nIs < nB ));
336 : }
337 :
338 12 : inline void Selection::Justify()
339 : {
340 12 : if ( nA > nB )
341 : {
342 0 : long nHelp = nA;
343 0 : nA = nB;
344 0 : nB = nHelp;
345 : }
346 12 : }
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 278998 : long Left() const { return nLeft; }
368 265265 : long Right() const { return nRight; }
369 278946 : long Top() const { return nTop; }
370 263345 : long Bottom() const { return nBottom; }
371 :
372 293728 : long& Left() { return nLeft; }
373 244587 : long& Right() { return nRight; }
374 327150 : long& Top() { return nTop; }
375 197751 : 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 35904 : 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 2 : long getX() const { return nLeft; }
424 2 : long getY() const { return nTop; }
425 3689 : long getWidth() const { return nRight - nLeft; }
426 3731 : long getHeight() const { return nBottom - nTop; }
427 1540 : void setX( long n ) { nRight += n-nLeft; nLeft = n; }
428 1540 : void setY( long n ) { nBottom += n-nTop; nTop = n; }
429 6326 : void setWidth( long n ) { nRight = nLeft + n; }
430 7347 : 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 355141 : inline Rectangle::Rectangle()
440 : {
441 355141 : nLeft = nTop = 0;
442 355141 : nRight = nBottom = RECT_EMPTY;
443 355141 : }
444 :
445 46187 : inline Rectangle::Rectangle( const Point& rLT, const Point& rRB )
446 : {
447 46187 : nLeft = rLT.X();
448 46187 : nTop = rLT.Y();
449 46187 : nRight = rRB.X();
450 46187 : nBottom = rRB.Y();
451 46187 : }
452 :
453 159600 : inline Rectangle::Rectangle( long _nLeft, long _nTop,
454 : long _nRight, long _nBottom )
455 : {
456 159600 : nLeft = _nLeft;
457 159600 : nTop = _nTop;
458 159600 : nRight = _nRight;
459 159600 : nBottom = _nBottom;
460 159600 : }
461 :
462 165162 : inline Rectangle::Rectangle( const Point& rLT, const Size& rSize )
463 : {
464 165162 : nLeft = rLT.X();
465 165162 : nTop = rLT.Y();
466 165162 : nRight = rSize.Width() ? nLeft+rSize.Width()-1 : RECT_EMPTY;
467 165162 : nBottom = rSize.Height() ? nTop+rSize.Height()-1 : RECT_EMPTY;
468 165162 : }
469 :
470 343524 : inline sal_Bool Rectangle::IsEmpty() const
471 : {
472 343524 : return ((nRight == RECT_EMPTY) || (nBottom == RECT_EMPTY));
473 : }
474 :
475 87461 : inline Point Rectangle::TopLeft() const
476 : {
477 87461 : return Point( nLeft, nTop );
478 : }
479 :
480 65314 : inline Point Rectangle::TopRight() const
481 : {
482 65314 : return Point( (nRight == RECT_EMPTY) ? nLeft : nRight, nTop );
483 : }
484 :
485 18361 : inline Point Rectangle::BottomLeft() const
486 : {
487 18361 : return Point( nLeft, (nBottom == RECT_EMPTY) ? nTop : nBottom );
488 : }
489 :
490 19074 : inline Point Rectangle::BottomRight() const
491 : {
492 : return Point( (nRight == RECT_EMPTY) ? nLeft : nRight,
493 19074 : (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 10179 : inline Point Rectangle::Center() const
531 : {
532 10179 : if ( IsEmpty() )
533 2753 : return Point( nLeft, nTop );
534 : else
535 7426 : return Point( nLeft+(nRight-nLeft)/2 , nTop+(nBottom-nTop)/2 );
536 : }
537 :
538 23683 : inline void Rectangle::Move( long nHorzMove, long nVertMove )
539 : {
540 23683 : nLeft += nHorzMove;
541 23683 : nTop += nVertMove;
542 23683 : if ( nRight != RECT_EMPTY )
543 16791 : nRight += nHorzMove;
544 23683 : if ( nBottom != RECT_EMPTY )
545 16995 : nBottom += nVertMove;
546 23683 : }
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 1910 : inline void Rectangle::SetPos( const Point& rPoint )
563 : {
564 1910 : if ( nRight != RECT_EMPTY )
565 1835 : nRight += rPoint.X() - nLeft;
566 1910 : if ( nBottom != RECT_EMPTY )
567 1835 : nBottom += rPoint.Y() - nTop;
568 1910 : nLeft = rPoint.X();
569 1910 : nTop = rPoint.Y();
570 1910 : }
571 :
572 109652 : inline long Rectangle::GetWidth() const
573 : {
574 : long n;
575 109652 : if ( nRight == RECT_EMPTY )
576 6341 : n = 0;
577 : else
578 : {
579 103311 : n = nRight - nLeft;
580 103311 : if( n < 0 )
581 369 : n--;
582 : else
583 102942 : n++;
584 : }
585 :
586 109652 : return n;
587 : }
588 :
589 132554 : inline long Rectangle::GetHeight() const
590 : {
591 : long n;
592 132554 : if ( nBottom == RECT_EMPTY )
593 5931 : n = 0;
594 : else
595 : {
596 126623 : n = nBottom - nTop;
597 126623 : if ( n < 0 )
598 699 : n--;
599 : else
600 125924 : n++;
601 : }
602 :
603 132554 : return n;
604 : }
605 :
606 22859 : inline Size Rectangle::GetSize() const
607 : {
608 22859 : 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 1831 : inline sal_Bool Rectangle::operator == ( const Rectangle& rRect ) const
624 : {
625 : return ((nLeft == rRect.nLeft ) &&
626 : (nTop == rRect.nTop ) &&
627 : (nRight == rRect.nRight ) &&
628 1831 : (nBottom == rRect.nBottom ));
629 : }
630 :
631 2437 : inline sal_Bool Rectangle::operator != ( const Rectangle& rRect ) const
632 : {
633 : return ((nLeft != rRect.nLeft ) ||
634 : (nTop != rRect.nTop ) ||
635 : (nRight != rRect.nRight ) ||
636 2437 : (nBottom != rRect.nBottom ));
637 : }
638 :
639 48929 : inline Rectangle& Rectangle::operator +=( const Point& rPt )
640 : {
641 48929 : nLeft += rPt.X();
642 48929 : nTop += rPt.Y();
643 48929 : if ( nRight != RECT_EMPTY )
644 46433 : nRight += rPt.X();
645 48929 : if ( nBottom != RECT_EMPTY )
646 46207 : nBottom += rPt.Y();
647 48929 : return *this;
648 : }
649 :
650 332 : inline Rectangle& Rectangle::operator -= ( const Point& rPt )
651 : {
652 332 : nLeft -= rPt.X();
653 332 : nTop -= rPt.Y();
654 332 : if ( nRight != RECT_EMPTY )
655 332 : nRight -= rPt.X();
656 332 : if ( nBottom != RECT_EMPTY )
657 332 : nBottom -= rPt.Y();
658 332 : return *this;
659 : }
660 :
661 1873 : inline Rectangle operator + ( const Rectangle& rRect, const Point& rPt )
662 : {
663 3746 : Rectangle aRect( rRect.nLeft + rPt.X(), rRect.nTop + rPt.Y(),
664 1873 : (rRect.nRight == RECT_EMPTY) ? RECT_EMPTY : rRect.nRight + rPt.X(),
665 7492 : (rRect.nBottom == RECT_EMPTY) ? RECT_EMPTY : rRect.nBottom + rPt.Y() );
666 1873 : return aRect;
667 : }
668 :
669 1024 : inline Rectangle operator - ( const Rectangle& rRect, const Point& rPt )
670 : {
671 1024 : Rectangle aRect( rRect.nLeft - rPt.X(),
672 1024 : rRect.nTop - rPt.Y(),
673 1024 : (rRect.nRight == RECT_EMPTY) ? RECT_EMPTY : rRect.nRight - rPt.X(),
674 4096 : (rRect.nBottom == RECT_EMPTY) ? RECT_EMPTY : rRect.nBottom - rPt.Y() );
675 1024 : 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: */
|