1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtCore module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#include "qmargins.h"
41#include "qdatastream.h"
42
43#include <private/qdebug_p.h>
44
45QT_BEGIN_NAMESPACE
46
47/*!
48 \class QMargins
49 \inmodule QtCore
50 \ingroup painting
51 \since 4.6
52
53 \brief The QMargins class defines the four margins of a rectangle.
54
55 QMargin defines a set of four margins; left, top, right and bottom,
56 that describe the size of the borders surrounding a rectangle.
57
58 The isNull() function returns \c true only if all margins are set to zero.
59
60 QMargin objects can be streamed as well as compared.
61*/
62
63
64/*****************************************************************************
65 QMargins member functions
66 *****************************************************************************/
67
68/*!
69 \fn QMargins::QMargins()
70
71 Constructs a margins object with all margins set to 0.
72
73 \sa isNull()
74*/
75
76/*!
77 \fn QMargins::QMargins(int left, int top, int right, int bottom)
78
79 Constructs margins with the given \a left, \a top, \a right, \a bottom
80
81 \sa setLeft(), setRight(), setTop(), setBottom()
82*/
83
84/*!
85 \fn bool QMargins::isNull() const
86
87 Returns \c true if all margins are is 0; otherwise returns
88 false.
89*/
90
91
92/*!
93 \fn int QMargins::left() const
94
95 Returns the left margin.
96
97 \sa setLeft()
98*/
99
100/*!
101 \fn int QMargins::top() const
102
103 Returns the top margin.
104
105 \sa setTop()
106*/
107
108/*!
109 \fn int QMargins::right() const
110
111 Returns the right margin.
112*/
113
114/*!
115 \fn int QMargins::bottom() const
116
117 Returns the bottom margin.
118*/
119
120
121/*!
122 \fn void QMargins::setLeft(int left)
123
124 Sets the left margin to \a left.
125*/
126
127/*!
128 \fn void QMargins::setTop(int Top)
129
130 Sets the Top margin to \a Top.
131*/
132
133/*!
134 \fn void QMargins::setRight(int right)
135
136 Sets the right margin to \a right.
137*/
138
139/*!
140 \fn void QMargins::setBottom(int bottom)
141
142 Sets the bottom margin to \a bottom.
143*/
144
145/*!
146 \fn bool operator==(const QMargins &m1, const QMargins &m2)
147 \relates QMargins
148
149 Returns \c true if \a m1 and \a m2 are equal; otherwise returns \c false.
150*/
151
152/*!
153 \fn bool operator!=(const QMargins &m1, const QMargins &m2)
154 \relates QMargins
155
156 Returns \c true if \a m1 and \a m2 are different; otherwise returns \c false.
157*/
158
159/*!
160 \fn const QMargins operator+(const QMargins &m1, const QMargins &m2)
161 \relates QMargins
162
163 Returns a QMargins object that is the sum of the given margins, \a m1
164 and \a m2; each component is added separately.
165
166 \sa QMargins::operator+=(), QMargins::operator-=()
167
168 \since 5.1
169*/
170
171/*!
172 \fn const QMargins operator-(const QMargins &m1, const QMargins &m2)
173 \relates QMargins
174
175 Returns a QMargins object that is formed by subtracting \a m2 from
176 \a m1; each component is subtracted separately.
177
178 \sa QMargins::operator+=(), QMargins::operator-=()
179
180 \since 5.1
181*/
182
183/*!
184 \fn const QMargins operator+(const QMargins &lhs, int rhs)
185 \relates QMargins
186
187 Returns a QMargins object that is formed by adding \a rhs to
188 \a lhs.
189
190 \sa QMargins::operator+=(), QMargins::operator-=()
191
192 \since 5.3
193*/
194
195/*!
196 \fn const QMargins operator+(int lhs, const QMargins &rhs)
197 \relates QMargins
198
199 Returns a QMargins object that is formed by adding \a lhs to
200 \a rhs.
201
202 \sa QMargins::operator+=(), QMargins::operator-=()
203
204 \since 5.3
205*/
206
207/*!
208 \fn const QMargins operator-(const QMargins &lhs, int rhs)
209 \relates QMargins
210
211 Returns a QMargins object that is formed by subtracting \a rhs from
212 \a lhs.
213
214 \sa QMargins::operator+=(), QMargins::operator-=()
215
216 \since 5.3
217*/
218
219/*!
220 \fn const QMargins operator*(const QMargins &margins, int factor)
221 \relates QMargins
222
223 Returns a QMargins object that is formed by multiplying each component
224 of the given \a margins by \a factor.
225
226 \sa QMargins::operator*=(), QMargins::operator/=()
227
228 \since 5.1
229*/
230
231/*!
232 \fn const QMargins operator*(int factor, const QMargins &margins)
233 \relates QMargins
234 \overload
235
236 Returns a QMargins object that is formed by multiplying each component
237 of the given \a margins by \a factor.
238
239 \sa QMargins::operator*=(), QMargins::operator/=()
240
241 \since 5.1
242*/
243
244/*!
245 \fn const QMargins operator*(const QMargins &margins, qreal factor)
246 \relates QMargins
247 \overload
248
249 Returns a QMargins object that is formed by multiplying each component
250 of the given \a margins by \a factor.
251
252 \sa QMargins::operator*=(), QMargins::operator/=()
253
254 \since 5.1
255*/
256
257/*!
258 \fn const QMargins operator*(qreal factor, const QMargins &margins)
259 \relates QMargins
260 \overload
261
262 Returns a QMargins object that is formed by multiplying each component
263 of the given \a margins by \a factor.
264
265 \sa QMargins::operator*=(), QMargins::operator/=()
266
267 \since 5.1
268*/
269
270/*!
271 \fn const QMargins operator/(const QMargins &margins, int divisor)
272 \relates QMargins
273
274 Returns a QMargins object that is formed by dividing the components of
275 the given \a margins by the given \a divisor.
276
277 \sa QMargins::operator*=(), QMargins::operator/=()
278
279 \since 5.1
280*/
281
282/*!
283 \fn const QMargins operator/(const QMargins &, qreal)
284 \relates QMargins
285 \overload
286
287 Returns a QMargins object that is formed by dividing the components of
288 the given \a margins by the given \a divisor.
289
290 \sa QMargins::operator*=(), QMargins::operator/=()
291
292 \since 5.1
293*/
294
295/*!
296 \fn QMargins operator+(const QMargins &margins)
297 \relates QMargins
298
299 Returns a QMargin object that is formed from all components of \a margins.
300
301 \since 5.3
302*/
303
304/*!
305 \fn QMargins operator-(const QMargins &margins)
306 \relates QMargins
307
308 Returns a QMargin object that is formed by negating all components of \a margins.
309
310 \since 5.1
311*/
312
313/*!
314 \fn QMargins &QMargins::operator+=(const QMargins &margins)
315
316 Add each component of \a margins to the respective component of this object
317 and returns a reference to it.
318
319 \sa operator-=()
320
321 \since 5.1
322*/
323
324/*!
325 \fn QMargins &QMargins::operator-=(const QMargins &margins)
326
327 Subtract each component of \a margins from the respective component of this object
328 and returns a reference to it.
329
330 \sa operator+=()
331
332 \since 5.1
333*/
334
335/*!
336 \fn QMargins &QMargins::operator+=(int addend)
337 \overload
338
339 Adds the \a addend to each component of this object
340 and returns a reference to it.
341
342 \sa operator-=()
343*/
344
345/*!
346 \fn QMargins &QMargins::operator-=(int subtrahend)
347 \overload
348
349 Subtracts the \a subtrahend from each component of this object
350 and returns a reference to it.
351
352 \sa operator+=()
353*/
354
355/*!
356 \fn QMargins &QMargins::operator*=(int factor)
357
358 Multiplies each component of this object by \a factor
359 and returns a reference to it.
360
361 \sa operator/=()
362
363 \since 5.1
364*/
365
366/*!
367 \fn QMargins &QMargins::operator*=(qreal factor)
368 \overload
369
370 Multiplies each component of this object by \a factor
371 and returns a reference to it.
372
373 \sa operator/=()
374
375 \since 5.1
376*/
377
378/*!
379 \fn QMargins &QMargins::operator/=(int divisor)
380
381 Divides each component of this object by \a divisor
382 and returns a reference to it.
383
384 \sa operator*=()
385
386 \since 5.1
387*/
388
389/*!
390 \fn QMargins &QMargins::operator/=(qreal divisor)
391
392 \overload
393
394 \sa operator*=()
395
396 \since 5.1
397*/
398
399/*****************************************************************************
400 QMargins stream functions
401 *****************************************************************************/
402#ifndef QT_NO_DATASTREAM
403/*!
404 \fn QDataStream &operator<<(QDataStream &stream, const QMargins &m)
405 \relates QMargins
406
407 Writes margin \a m to the given \a stream and returns a
408 reference to the stream.
409
410 \sa {Serializing Qt Data Types}
411*/
412
413QDataStream &operator<<(QDataStream &s, const QMargins &m)
414{
415 s << m.left() << m.top() << m.right() << m.bottom();
416 return s;
417}
418
419/*!
420 \fn QDataStream &operator>>(QDataStream &stream, QMargins &m)
421 \relates QMargins
422
423 Reads a margin from the given \a stream into margin \a m
424 and returns a reference to the stream.
425
426 \sa {Serializing Qt Data Types}
427*/
428
429QDataStream &operator>>(QDataStream &s, QMargins &m)
430{
431 int left, top, right, bottom;
432 s >> left; m.setLeft(left);
433 s >> top; m.setTop(top);
434 s >> right; m.setRight(right);
435 s >> bottom; m.setBottom(bottom);
436 return s;
437}
438#endif // QT_NO_DATASTREAM
439
440#ifndef QT_NO_DEBUG_STREAM
441QDebug operator<<(QDebug dbg, const QMargins &m)
442{
443 QDebugStateSaver saver(dbg);
444 dbg.nospace();
445 dbg << "QMargins" << '(';
446 QtDebugUtils::formatQMargins(debug&: dbg, margins: m);
447 dbg << ')';
448 return dbg;
449}
450#endif
451
452/*!
453 \class QMarginsF
454 \inmodule QtCore
455 \ingroup painting
456 \since 5.3
457
458 \brief The QMarginsF class defines the four margins of a rectangle.
459
460 QMarginsF defines a set of four margins; left, top, right and bottom,
461 that describe the size of the borders surrounding a rectangle.
462
463 The isNull() function returns \c true only if all margins are very close to zero.
464
465 QMarginsF objects can be streamed as well as compared.
466*/
467
468
469/*****************************************************************************
470 QMarginsF member functions
471 *****************************************************************************/
472
473/*!
474 \fn QMarginsF::QMarginsF()
475
476 Constructs a margins object with all margins set to 0.
477
478 \sa isNull()
479*/
480
481/*!
482 \fn QMarginsF::QMarginsF(qreal left, qreal top, qreal right, qreal bottom)
483
484 Constructs margins with the given \a left, \a top, \a right, \a bottom
485
486 \sa setLeft(), setRight(), setTop(), setBottom()
487*/
488
489/*!
490 \fn QMarginsF::QMarginsF(const QMargins &margins)
491
492 Constructs margins copied from the given \a margins.
493*/
494
495/*!
496 \fn bool QMarginsF::isNull() const
497
498 Returns \c true if all margins are very close to 0; otherwise returns
499 false.
500
501 \sa qFuzzyIsNull
502*/
503
504
505/*!
506 \fn qreal QMarginsF::left() const
507
508 Returns the left margin.
509
510 \sa setLeft()
511*/
512
513/*!
514 \fn qreal QMarginsF::top() const
515
516 Returns the top margin.
517
518 \sa setTop()
519*/
520
521/*!
522 \fn qreal QMarginsF::right() const
523
524 Returns the right margin.
525*/
526
527/*!
528 \fn qreal QMarginsF::bottom() const
529
530 Returns the bottom margin.
531*/
532
533
534/*!
535 \fn void QMarginsF::setLeft(qreal left)
536
537 Sets the left margin to \a left.
538*/
539
540/*!
541 \fn void QMarginsF::setTop(qreal Top)
542
543 Sets the Top margin to \a Top.
544*/
545
546/*!
547 \fn void QMarginsF::setRight(qreal right)
548
549 Sets the right margin to \a right.
550*/
551
552/*!
553 \fn void QMarginsF::setBottom(qreal bottom)
554
555 Sets the bottom margin to \a bottom.
556*/
557
558/*!
559 \fn bool operator==(const QMarginsF &lhs, const QMarginsF &rhs)
560 \relates QMarginsF
561
562 Returns \c true if \a lhs and \a rhs are approximately equal; otherwise
563 returns false.
564
565 \warning This function does not check for strict equality; instead,
566 it uses a fuzzy comparison to compare the margins.
567
568 \sa qFuzzyCompare
569*/
570
571/*!
572 \fn bool operator!=(const QMarginsF &lhs, const QMarginsF &rhs)
573 \relates QMarginsF
574
575 Returns \c true if \a lhs and \a rhs are sufficiently different; otherwise
576 returns \c false.
577
578 \warning This function does not check for strict inequality; instead,
579 it uses a fuzzy comparison to compare the margins.
580
581 \sa qFuzzyCompare
582*/
583
584/*!
585 \fn const QMarginsF operator+(const QMarginsF &lhs, const QMarginsF &rhs)
586 \relates QMarginsF
587
588 Returns a QMarginsF object that is the sum of the given margins, \a lhs
589 and \a rhs; each component is added separately.
590
591 \sa QMarginsF::operator+=(), QMarginsF::operator-=()
592*/
593
594/*!
595 \fn const QMarginsF operator-(const QMarginsF &lhs, const QMarginsF &rhs)
596 \relates QMarginsF
597
598 Returns a QMarginsF object that is formed by subtracting \a rhs from
599 \a lhs; each component is subtracted separately.
600
601 \sa QMarginsF::operator+=(), QMarginsF::operator-=()
602*/
603
604/*!
605 \fn const QMarginsF operator+(const QMarginsF &lhs, qreal rhs)
606 \relates QMarginsF
607
608 Returns a QMarginsF object that is formed by adding \a rhs to
609 \a lhs.
610
611 \sa QMarginsF::operator+=(), QMarginsF::operator-=()
612*/
613
614/*!
615 \fn const QMarginsF operator+(qreal lhs, const QMarginsF &rhs)
616 \relates QMarginsF
617
618 Returns a QMarginsF object that is formed by adding \a lhs to
619 \a rhs.
620
621 \sa QMarginsF::operator+=(), QMarginsF::operator-=()
622*/
623
624/*!
625 \fn const QMarginsF operator-(const QMarginsF &lhs, qreal rhs)
626 \relates QMarginsF
627
628 Returns a QMarginsF object that is formed by subtracting \a rhs from
629 \a lhs.
630
631 \sa QMarginsF::operator+=(), QMarginsF::operator-=()
632*/
633
634/*!
635 \fn const QMarginsF operator*(const QMarginsF &lhs, qreal rhs)
636 \relates QMarginsF
637 \overload
638
639 Returns a QMarginsF object that is formed by multiplying each component
640 of the given \a lhs margins by \a rhs factor.
641
642 \sa QMarginsF::operator*=(), QMarginsF::operator/=()
643*/
644
645/*!
646 \fn const QMarginsF operator*(qreal lhs, const QMarginsF &rhs)
647 \relates QMarginsF
648 \overload
649
650 Returns a QMarginsF object that is formed by multiplying each component
651 of the given \a lhs margins by \a rhs factor.
652
653 \sa QMarginsF::operator*=(), QMarginsF::operator/=()
654*/
655
656/*!
657 \fn const QMarginsF operator/(const QMarginsF &lhs, qreal rhs)
658 \relates QMarginsF
659 \overload
660
661 Returns a QMarginsF object that is formed by dividing the components of
662 the given \a lhs margins by the given \a rhs divisor.
663
664 \sa QMarginsF::operator*=(), QMarginsF::operator/=()
665*/
666
667/*!
668 \fn QMarginsF operator+(const QMarginsF &margins)
669 \relates QMarginsF
670
671 Returns a QMargin object that is formed from all components of \a margins.
672*/
673
674/*!
675 \fn QMarginsF operator-(const QMarginsF &margins)
676 \relates QMarginsF
677
678 Returns a QMargin object that is formed by negating all components of \a margins.
679*/
680
681/*!
682 \fn QMarginsF &QMarginsF::operator+=(const QMarginsF &margins)
683
684 Add each component of \a margins to the respective component of this object
685 and returns a reference to it.
686
687 \sa operator-=()
688*/
689
690/*!
691 \fn QMarginsF &QMarginsF::operator-=(const QMarginsF &margins)
692
693 Subtract each component of \a margins from the respective component of this object
694 and returns a reference to it.
695
696 \sa operator+=()
697*/
698
699/*!
700 \fn QMarginsF &QMarginsF::operator+=(qreal addend)
701 \overload
702
703 Adds the \a addend to each component of this object
704 and returns a reference to it.
705
706 \sa operator-=()
707*/
708
709/*!
710 \fn QMarginsF &QMarginsF::operator-=(qreal subtrahend)
711 \overload
712
713 Subtracts the \a subtrahend from each component of this object
714 and returns a reference to it.
715
716 \sa operator+=()
717*/
718
719/*!
720 \fn QMarginsF &QMarginsF::operator*=(qreal factor)
721
722 Multiplies each component of this object by \a factor
723 and returns a reference to it.
724
725 \sa operator/=()
726*/
727
728/*!
729 \fn QMarginsF &QMarginsF::operator/=(qreal divisor)
730
731 Divides each component of this object by \a divisor
732 and returns a reference to it.
733
734 \sa operator*=()
735*/
736
737/*!
738 \fn QMargins QMarginsF::toMargins() const
739
740 Returns an integer based copy of this margins object.
741
742 Note that the components in the returned margins will be rounded to
743 the nearest integer.
744
745 \sa QMarginsF()
746*/
747
748/*****************************************************************************
749 QMarginsF stream functions
750 *****************************************************************************/
751#ifndef QT_NO_DATASTREAM
752/*!
753 \fn QDataStream &operator<<(QDataStream &stream, const QMarginsF &m)
754 \relates QMarginsF
755
756 Writes margin \a m to the given \a stream and returns a
757 reference to the stream.
758
759 \sa {Serializing Qt Data Types}
760*/
761
762QDataStream &operator<<(QDataStream &s, const QMarginsF &m)
763{
764 s << double(m.left()) << double(m.top()) << double(m.right()) << double(m.bottom());
765 return s;
766}
767
768/*!
769 \fn QDataStream &operator>>(QDataStream &stream, QMarginsF &m)
770 \relates QMarginsF
771
772 Reads a margin from the given \a stream into margin \a m
773 and returns a reference to the stream.
774
775 \sa {Serializing Qt Data Types}
776*/
777
778QDataStream &operator>>(QDataStream &s, QMarginsF &m)
779{
780 double left, top, right, bottom;
781 s >> left;
782 s >> top;
783 s >> right;
784 s >> bottom;
785 m = QMarginsF(qreal(left), qreal(top), qreal(right), qreal(bottom));
786 return s;
787}
788#endif // QT_NO_DATASTREAM
789
790#ifndef QT_NO_DEBUG_STREAM
791QDebug operator<<(QDebug dbg, const QMarginsF &m)
792{
793 QDebugStateSaver saver(dbg);
794 dbg.nospace();
795 dbg << "QMarginsF" << '(';
796 QtDebugUtils::formatQMargins(debug&: dbg, margins: m);
797 dbg << ')';
798 return dbg;
799}
800#endif
801
802QT_END_NAMESPACE
803

source code of qtbase/src/corelib/tools/qmargins.cpp