QStyleHelper: Use palette cache key in pixmap key

This reverts commit d7bcdc3a44.

Now that QPalette::setBrush() is a bit smarter (see
c564779c07), we can be
confident the palette's cache key won't change so often.
Therefore, we can use it again as part of every pixmap's
cache key.

Change-Id: I5cab2296a937f9149c7745291e0442eea24f4e9d
Task-number: QTBUG-65475
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
This commit is contained in:
Gabriel de Dietrich 2018-01-04 10:59:11 -08:00
parent 2226f01d74
commit 1e75dcf251
1 changed files with 1 additions and 20 deletions

View File

@ -51,8 +51,6 @@
#include "qstylehelper_p.h"
#include <qstringbuilder.h>
#include <qdatastream.h>
#include <qcryptographichash.h>
QT_BEGIN_NAMESPACE
@ -66,6 +64,7 @@ QString uniqueName(const QString &key, const QStyleOption *option, const QSize &
QString tmp = key % HexString<uint>(option->state)
% HexString<uint>(option->direction)
% HexString<uint>(complexOption ? uint(complexOption->activeSubControls) : 0u)
% HexString<quint64>(option->palette.cacheKey())
% HexString<uint>(size.width())
% HexString<uint>(size.height());
@ -77,24 +76,6 @@ QString uniqueName(const QString &key, const QStyleOption *option, const QSize &
}
#endif // QT_CONFIG(spinbox)
// QTBUG-56743, try to create a palette cache key reflecting the value,
// as leaks may occur in conjunction with QStyleSheetStyle/QRenderRule modifying
// palettes when using QPalette::cacheKey()
if (option->palette != QGuiApplication::palette()) {
tmp.append(QLatin1Char('P'));
#ifndef QT_NO_DATASTREAM
QByteArray key;
key.reserve(5120); // Observed 5040B for a serialized palette on 64bit
{
QDataStream str(&key, QIODevice::WriteOnly);
str << option->palette;
}
const QByteArray sha1 = QCryptographicHash::hash(key, QCryptographicHash::Sha1).toHex();
tmp.append(QString::fromLatin1(sha1));
#else // QT_NO_DATASTREAM
tmp.append(QString::number(option->palette.cacheKey(), 16));
#endif // !QT_NO_DATASTREAM
}
return tmp;
}