Make QRegion::shared_empty const
Continuing the trend of QString, QVector, etc. Change-Id: I8f53d4abfa0dd941bfdfd3c1a9049a42dbf92691 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
2045a657da
commit
d93e4eff50
@ -240,7 +240,7 @@ QRegion::QRegion(int x, int y, int w, int h, RegionType t)
|
|||||||
|
|
||||||
void QRegion::detach()
|
void QRegion::detach()
|
||||||
{
|
{
|
||||||
if (d->ref.load() != 1)
|
if (d->ref.isShared())
|
||||||
*this = copy();
|
*this = copy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1588,7 +1588,7 @@ void QRegionPrivate::selfTest() const
|
|||||||
#endif // QT_REGION_DEBUG
|
#endif // QT_REGION_DEBUG
|
||||||
|
|
||||||
static QRegionPrivate qrp;
|
static QRegionPrivate qrp;
|
||||||
QRegion::QRegionData QRegion::shared_empty = {Q_BASIC_ATOMIC_INITIALIZER(1), &qrp};
|
const QRegion::QRegionData QRegion::shared_empty = {Q_REFCOUNT_INITIALIZE_STATIC, &qrp};
|
||||||
|
|
||||||
typedef void (*OverlapFunc)(QRegionPrivate &dest, const QRect *r1, const QRect *r1End,
|
typedef void (*OverlapFunc)(QRegionPrivate &dest, const QRect *r1, const QRect *r1End,
|
||||||
const QRect *r2, const QRect *r2End, int y1, int y2);
|
const QRect *r2, const QRect *r2End, int y1, int y2);
|
||||||
@ -3786,19 +3786,17 @@ QRegionPrivate *qt_bitmapToRegion(const QBitmap& bitmap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QRegion::QRegion()
|
QRegion::QRegion()
|
||||||
: d(&shared_empty)
|
: d(const_cast<QRegionData*>(&shared_empty))
|
||||||
{
|
{
|
||||||
d->ref.ref();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QRegion::QRegion(const QRect &r, RegionType t)
|
QRegion::QRegion(const QRect &r, RegionType t)
|
||||||
{
|
{
|
||||||
if (r.isEmpty()) {
|
if (r.isEmpty()) {
|
||||||
d = &shared_empty;
|
d = const_cast<QRegionData*>(&shared_empty);
|
||||||
d->ref.ref();
|
|
||||||
} else {
|
} else {
|
||||||
d = new QRegionData;
|
d = new QRegionData;
|
||||||
d->ref.store(1);
|
d->ref.initializeOwned();
|
||||||
if (t == Rectangle) {
|
if (t == Rectangle) {
|
||||||
d->qt_rgn = new QRegionPrivate(r);
|
d->qt_rgn = new QRegionPrivate(r);
|
||||||
} else if (t == Ellipse) {
|
} else if (t == Ellipse) {
|
||||||
@ -3817,15 +3815,13 @@ QRegion::QRegion(const QPolygon &a, Qt::FillRule fillRule)
|
|||||||
fillRule == Qt::WindingFill ? WindingRule : EvenOddRule);
|
fillRule == Qt::WindingFill ? WindingRule : EvenOddRule);
|
||||||
if (qt_rgn) {
|
if (qt_rgn) {
|
||||||
d = new QRegionData;
|
d = new QRegionData;
|
||||||
d->ref.store(1);
|
d->ref.initializeOwned();
|
||||||
d->qt_rgn = qt_rgn;
|
d->qt_rgn = qt_rgn;
|
||||||
} else {
|
} else {
|
||||||
d = &shared_empty;
|
d = const_cast<QRegionData*>(&shared_empty);
|
||||||
d->ref.ref();
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
d = &shared_empty;
|
d = const_cast<QRegionData*>(&shared_empty);
|
||||||
d->ref.ref();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3839,11 +3835,10 @@ QRegion::QRegion(const QRegion &r)
|
|||||||
QRegion::QRegion(const QBitmap &bm)
|
QRegion::QRegion(const QBitmap &bm)
|
||||||
{
|
{
|
||||||
if (bm.isNull()) {
|
if (bm.isNull()) {
|
||||||
d = &shared_empty;
|
d = const_cast<QRegionData*>(&shared_empty);
|
||||||
d->ref.ref();
|
|
||||||
} else {
|
} else {
|
||||||
d = new QRegionData;
|
d = new QRegionData;
|
||||||
d->ref.store(1);
|
d->ref.initializeOwned();
|
||||||
d->qt_rgn = qt_bitmapToRegion(bm);
|
d->qt_rgn = qt_bitmapToRegion(bm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3878,7 +3873,7 @@ QRegion QRegion::copy() const
|
|||||||
{
|
{
|
||||||
QRegion r;
|
QRegion r;
|
||||||
QScopedPointer<QRegionData> x(new QRegionData);
|
QScopedPointer<QRegionData> x(new QRegionData);
|
||||||
x->ref.store(1);
|
x->ref.initializeOwned();
|
||||||
if (d->qt_rgn)
|
if (d->qt_rgn)
|
||||||
x->qt_rgn = new QRegionPrivate(*d->qt_rgn);
|
x->qt_rgn = new QRegionPrivate(*d->qt_rgn);
|
||||||
else
|
else
|
||||||
|
@ -150,11 +150,11 @@ Q_GUI_EXPORT
|
|||||||
void exec(const QByteArray &ba, int ver = 0, QDataStream::ByteOrder byteOrder = QDataStream::BigEndian);
|
void exec(const QByteArray &ba, int ver = 0, QDataStream::ByteOrder byteOrder = QDataStream::BigEndian);
|
||||||
#endif
|
#endif
|
||||||
struct QRegionData {
|
struct QRegionData {
|
||||||
QBasicAtomicInt ref;
|
QtPrivate::RefCount ref;
|
||||||
QRegionPrivate *qt_rgn;
|
QRegionPrivate *qt_rgn;
|
||||||
};
|
};
|
||||||
struct QRegionData *d;
|
struct QRegionData *d;
|
||||||
static struct QRegionData shared_empty;
|
static const struct QRegionData shared_empty;
|
||||||
static void cleanUp(QRegionData *x);
|
static void cleanUp(QRegionData *x);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user