/work/prefix/include/QtGui/qregion.h
Line | Count | Source |
1 | | // Copyright (C) 2016 The Qt Company Ltd. |
2 | | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only |
3 | | |
4 | | #ifndef QREGION_H |
5 | | #define QREGION_H |
6 | | |
7 | | #include <QtGui/qtguiglobal.h> |
8 | | #include <QtCore/qatomic.h> |
9 | | #include <QtCore/qrect.h> |
10 | | #include <QtGui/qwindowdefs.h> |
11 | | |
12 | | #ifndef QT_NO_DATASTREAM |
13 | | #include <QtCore/qdatastream.h> |
14 | | #endif |
15 | | #include <QtCore/qspan.h> |
16 | | |
17 | | QT_BEGIN_NAMESPACE |
18 | | |
19 | | |
20 | | class QVariant; |
21 | | |
22 | | struct QRegionPrivate; |
23 | | |
24 | | class QBitmap; |
25 | | |
26 | | class Q_GUI_EXPORT QRegion |
27 | | { |
28 | | public: |
29 | | enum RegionType { Rectangle, Ellipse }; |
30 | | |
31 | | QRegion(); |
32 | | QRegion(int x, int y, int w, int h, RegionType t = Rectangle); |
33 | | QRegion(const QRect &r, RegionType t = Rectangle); |
34 | | QRegion(const QPolygon &pa, Qt::FillRule fillRule = Qt::OddEvenFill); |
35 | | QRegion(const QRegion ®ion); |
36 | | QRegion(QRegion &&other) noexcept |
37 | 0 | : d(std::exchange(other.d, const_cast<QRegionData*>(&shared_empty))) {} |
38 | | QRegion(const QBitmap &bitmap); |
39 | | ~QRegion(); |
40 | | QRegion &operator=(const QRegion &); |
41 | | QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QRegion) |
42 | 0 | void swap(QRegion &other) noexcept { qt_ptr_swap(d, other.d); } |
43 | | bool isEmpty() const; |
44 | | bool isNull() const; |
45 | | |
46 | | typedef const QRect *const_iterator; |
47 | | typedef std::reverse_iterator<const_iterator> const_reverse_iterator; |
48 | | |
49 | | const_iterator begin() const noexcept; |
50 | 0 | const_iterator cbegin() const noexcept { return begin(); } |
51 | | const_iterator end() const noexcept; |
52 | 0 | const_iterator cend() const noexcept { return end(); } |
53 | 0 | const_reverse_iterator rbegin() const noexcept { return const_reverse_iterator(end()); } |
54 | 0 | const_reverse_iterator crbegin() const noexcept { return rbegin(); } |
55 | 0 | const_reverse_iterator rend() const noexcept { return const_reverse_iterator(begin()); } |
56 | 0 | const_reverse_iterator crend() const noexcept { return rend(); } |
57 | | |
58 | | bool contains(const QPoint &p) const; |
59 | | bool contains(const QRect &r) const; |
60 | | |
61 | | void translate(int dx, int dy); |
62 | 0 | inline void translate(const QPoint &p) { translate(p.x(), p.y()); } |
63 | | [[nodiscard]] QRegion translated(int dx, int dy) const; |
64 | 0 | [[nodiscard]] inline QRegion translated(const QPoint &p) const { return translated(p.x(), p.y()); } |
65 | | |
66 | | [[nodiscard]] QRegion united(const QRegion &r) const; |
67 | | [[nodiscard]] QRegion united(const QRect &r) const; |
68 | | [[nodiscard]] QRegion intersected(const QRegion &r) const; |
69 | | [[nodiscard]] QRegion intersected(const QRect &r) const; |
70 | | [[nodiscard]] QRegion subtracted(const QRegion &r) const; |
71 | | [[nodiscard]] QRegion xored(const QRegion &r) const; |
72 | | |
73 | | bool intersects(const QRegion &r) const; |
74 | | bool intersects(const QRect &r) const; |
75 | | |
76 | | QRect boundingRect() const noexcept; |
77 | | void setRects(const QRect *rect, int num); |
78 | | void setRects(QSpan<const QRect> r); |
79 | | QSpan<const QRect> rects() const noexcept; |
80 | | int rectCount() const noexcept; |
81 | | |
82 | | QRegion operator|(const QRegion &r) const; |
83 | | QRegion operator+(const QRegion &r) const; |
84 | | QRegion operator+(const QRect &r) const; |
85 | | QRegion operator&(const QRegion &r) const; |
86 | | QRegion operator&(const QRect &r) const; |
87 | | QRegion operator-(const QRegion &r) const; |
88 | | QRegion operator^(const QRegion &r) const; |
89 | | |
90 | | QRegion& operator|=(const QRegion &r); |
91 | | QRegion& operator+=(const QRegion &r); |
92 | | QRegion& operator+=(const QRect &r); |
93 | | QRegion& operator&=(const QRegion &r); |
94 | | QRegion& operator&=(const QRect &r); |
95 | | QRegion& operator-=(const QRegion &r); |
96 | | QRegion& operator^=(const QRegion &r); |
97 | | |
98 | | bool operator==(const QRegion &r) const; |
99 | 0 | inline bool operator!=(const QRegion &r) const { return !(operator==(r)); } |
100 | | operator QVariant() const; |
101 | | |
102 | | // Platform specific conversion functions |
103 | | #if defined(Q_OS_WIN) || defined(Q_QDOC) |
104 | | HRGN toHRGN() const; |
105 | | static QRegion fromHRGN(HRGN hrgn); |
106 | | #endif |
107 | | |
108 | | #ifndef QT_NO_DATASTREAM |
109 | | friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QRegion &); |
110 | | friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QRegion &); |
111 | | #endif |
112 | | private: |
113 | | QRegion copy() const; // helper of detach. |
114 | | void detach(); |
115 | | Q_GUI_EXPORT |
116 | | friend bool qt_region_strictContains(const QRegion ®ion, |
117 | | const QRect &rect); |
118 | | friend struct QRegionPrivate; |
119 | | |
120 | | #ifndef QT_NO_DATASTREAM |
121 | | void exec(const QByteArray &ba, int ver = 0, QDataStream::ByteOrder byteOrder = QDataStream::BigEndian); |
122 | | #endif |
123 | | struct QRegionData { |
124 | | QtPrivate::RefCount ref = Q_REFCOUNT_INITIALIZE_OWNED; |
125 | | QRegionPrivate *qt_rgn; |
126 | | }; |
127 | | struct QRegionData *d; |
128 | | static const struct QRegionData shared_empty; |
129 | | static void cleanUp(QRegionData *x); |
130 | | }; |
131 | | Q_DECLARE_SHARED(QRegion) |
132 | | |
133 | | /***************************************************************************** |
134 | | QRegion stream functions |
135 | | *****************************************************************************/ |
136 | | |
137 | | #ifndef QT_NO_DATASTREAM |
138 | | Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QRegion &); |
139 | | Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QRegion &); |
140 | | #endif |
141 | | |
142 | | #ifndef QT_NO_DEBUG_STREAM |
143 | | Q_GUI_EXPORT QDebug operator<<(QDebug, const QRegion &); |
144 | | #endif |
145 | | |
146 | | QT_END_NAMESPACE |
147 | | |
148 | | #endif // QREGION_H |