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

View File

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