diff options
author | Liang Qi <liang.qi@qt.io> | 2016-09-21 07:14:33 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-09-21 07:14:40 +0200 |
commit | d10e4c193b0152350e884adcc1060aabd1a974f7 (patch) | |
tree | 23b553e40575d4660709fe8765dcb77e3625103d /src/gui/painting/qbrush.cpp | |
parent | 8d64d1e0c3f7ebcee859e8b5f40aa27a8df86351 (diff) | |
parent | 25e9bde2d665866f7a9a40d1ed3aa8fabcf2ac2f (diff) |
Merge remote-tracking branch 'origin/5.6' into 5.7
Change-Id: I9cfefaf22b010fca937be77979f5fb50574bb71e
Diffstat (limited to 'src/gui/painting/qbrush.cpp')
-rw-r--r-- | src/gui/painting/qbrush.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index 3a296ac40c..0d26457c15 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -585,7 +585,7 @@ void QBrush::detach(Qt::BrushStyle newStyle) if (newStyle == d->style && d->ref.load() == 1) return; - QScopedPointer<QBrushData> x; + QScopedPointer<QBrushData, QBrushDataPointerDeleter> x; switch(newStyle) { case Qt::TexturePattern: { QTexturedBrushData *tbd = new QTexturedBrushData; @@ -601,28 +601,30 @@ void QBrush::detach(Qt::BrushStyle newStyle) } case Qt::LinearGradientPattern: case Qt::RadialGradientPattern: - case Qt::ConicalGradientPattern: - x.reset(new QGradientBrushData); + case Qt::ConicalGradientPattern: { + QGradientBrushData *gbd = new QGradientBrushData; switch (d->style) { case Qt::LinearGradientPattern: case Qt::RadialGradientPattern: case Qt::ConicalGradientPattern: - static_cast<QGradientBrushData *>(x.data())->gradient = + gbd->gradient = static_cast<QGradientBrushData *>(d.data())->gradient; break; default: break; } + x.reset(gbd); break; + } default: x.reset(new QBrushData); break; } - x->ref.store(1); + x->ref.store(1); // must be first lest the QBrushDataPointerDeleter turns into a no-op x->style = newStyle; x->color = d->color; x->transform = d->transform; - d.reset(x.take()); + d.swap(x); } |