QIconPrivate: Pass QIconEngine as parameter to constructor

This removes the need to assign to the member variable
after constructing an instance.
Simplify code accordingly.

Change-Id: I9660f1ff2cb5a17b8eee697988bed03b76468112
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
This commit is contained in:
Friedemann Kleint 2016-09-16 15:58:02 +02:00
parent 3982e710cb
commit 6005d75c15
2 changed files with 16 additions and 28 deletions

View File

@ -137,8 +137,8 @@ static qreal qt_effective_device_pixel_ratio(QWindow *window = 0)
return qApp->devicePixelRatio(); // Don't know which window to target.
}
QIconPrivate::QIconPrivate()
: engine(0), ref(1),
QIconPrivate::QIconPrivate(QIconEngine *e)
: engine(e), ref(1),
serialNum(serialNumCounter.fetchAndAddRelaxed(1)),
detach_no(0),
is_mask(false)
@ -673,9 +673,8 @@ QIcon::QIcon(const QString &fileName)
ownership of the engine.
*/
QIcon::QIcon(QIconEngine *engine)
:d(new QIconPrivate)
:d(new QIconPrivate(engine))
{
d->engine = engine;
}
/*!
@ -950,8 +949,7 @@ void QIcon::detach()
d = 0;
return;
} else if (d->ref.load() != 1) {
QIconPrivate *x = new QIconPrivate;
x->engine = d->engine->clone();
QIconPrivate *x = new QIconPrivate(d->engine->clone());
if (!d->ref.deref())
delete d;
d = x;
@ -974,10 +972,8 @@ void QIcon::addPixmap(const QPixmap &pixmap, Mode mode, State state)
if (pixmap.isNull())
return;
detach();
if (!d) {
d = new QIconPrivate;
d->engine = new QPixmapIconEngine;
}
if (!d)
d = new QIconPrivate(new QPixmapIconEngine);
d->engine->addPixmap(pixmap, mode, state);
}
@ -1037,8 +1033,7 @@ void QIcon::addFile(const QString &fileName, const QSize &size, Mode mode, State
if (!engine)
engine = iconEngineFromSuffix(fileName, QMimeDatabase().mimeTypeForFile(info).preferredSuffix());
#endif // !QT_NO_MIMETYPE
d = new QIconPrivate;
d->engine = engine ? engine : new QPixmapIconEngine;
d = new QIconPrivate(engine ? engine : new QPixmapIconEngine);
}
d->engine->addFile(fileName, size, mode, state);
@ -1240,12 +1235,10 @@ bool QIcon::hasThemeIcon(const QString &name)
*/
void QIcon::setIsMask(bool isMask)
{
if (!d) {
d = new QIconPrivate;
d->engine = new QPixmapIconEngine;
} else {
if (!d)
d = new QIconPrivate(new QPixmapIconEngine);
else
detach();
}
d->is_mask = isMask;
}
@ -1326,22 +1319,17 @@ QDataStream &operator>>(QDataStream &s, QIcon &icon)
QString key;
s >> key;
if (key == QLatin1String("QPixmapIconEngine")) {
icon.d = new QIconPrivate;
QIconEngine *engine = new QPixmapIconEngine;
icon.d->engine = engine;
engine->read(s);
icon.d = new QIconPrivate(new QPixmapIconEngine);
icon.d->engine->read(s);
} else if (key == QLatin1String("QIconLoaderEngine")) {
icon.d = new QIconPrivate;
QIconEngine *engine = new QIconLoaderEngine();
icon.d->engine = engine;
engine->read(s);
icon.d = new QIconPrivate(new QIconLoaderEngine());
icon.d->engine->read(s);
} else {
const int index = loader()->indexOf(key);
if (index != -1) {
if (QIconEnginePlugin *factory = qobject_cast<QIconEnginePlugin*>(loader()->instance(index))) {
if (QIconEngine *engine= factory->create()) {
icon.d = new QIconPrivate;
icon.d->engine = engine;
icon.d = new QIconPrivate(engine);
engine->read(s);
} // factory
} // instance

View File

@ -64,7 +64,7 @@ QT_BEGIN_NAMESPACE
class QIconPrivate
{
public:
QIconPrivate();
explicit QIconPrivate(QIconEngine *e);
~QIconPrivate() {
delete engine;