From b0f4dab4c825650c3a7a72b87508bf6f3e5ffd50 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 14 May 2010 23:47:37 +0200 Subject: Revert "More improvements to pixmap cache key generation" This reverts commit c8d2e18c4b431870560f324a17f20904bb47ae68. --- src/gui/image/qicon.cpp | 26 ++++++++++++++++---------- src/gui/styles/qgtkpainter.cpp | 19 +++++++++++++------ src/gui/styles/qstylehelper.cpp | 30 +++++++++++++++++++++--------- src/gui/styles/qstylehelper_p.h | 32 -------------------------------- 4 files changed, 50 insertions(+), 57 deletions(-) diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp index 7696632..9f1eea2 100644 --- a/src/gui/image/qicon.cpp +++ b/src/gui/image/qicon.cpp @@ -55,7 +55,6 @@ #include "qcache.h" #include "qdebug.h" #include "private/qguiplatformplugin_p.h" -#include "private/qstylehelper_p.h" #ifdef Q_WS_MAC #include @@ -262,17 +261,24 @@ QPixmap QPixmapIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::St if (!actualSize.isNull() && (actualSize.width() > size.width() || actualSize.height() > size.height())) actualSize.scale(size, Qt::KeepAspectRatio); + int digits = sizeof(qint64)/sizeof(QChar); + quint64 tkey = pm.cacheKey(), + tmode = pe->mode, + tpalkey = QApplication::palette().cacheKey(), + twidth = actualSize.width(), + theight = actualSize.height(); + QString key = QLatin1Literal("qt_") - % HexString(pm.cacheKey()) - % HexString(pe->mode) - % HexString(QApplication::palette().cacheKey()) - % HexString(actualSize.width()) - % HexString(actualSize.height()); + % QString::fromRawData((QChar*)&tkey, digits) + % QString::fromRawData((QChar*)&tmode, digits) + % QString::fromRawData((QChar*)&tpalkey, digits) + % QString::fromRawData((QChar*)&twidth, digits) + % QString::fromRawData((QChar*)&theight, digits); if (mode == QIcon::Active) { - if (QPixmapCache::find(key % HexString(mode), pm)) + if (QPixmapCache::find(key + QString::number(mode), pm)) return pm; // horray - if (QPixmapCache::find(key % HexString(QIcon::Normal), pm)) { + if (QPixmapCache::find(key + QString::number(QIcon::Normal), pm)) { QStyleOption opt(0); opt.palette = QApplication::palette(); QPixmap active = QApplication::style()->generatedIconPixmap(QIcon::Active, pm, &opt); @@ -281,7 +287,7 @@ QPixmap QPixmapIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::St } } - if (!QPixmapCache::find(key % HexString(mode), pm)) { + if (!QPixmapCache::find(key + QString::number(mode), pm)) { if (pm.size() != actualSize) pm = pm.scaled(actualSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); if (pe->mode != mode && mode != QIcon::Normal) { @@ -291,7 +297,7 @@ QPixmap QPixmapIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::St if (!generated.isNull()) pm = generated; } - QPixmapCache::insert(key % HexString(mode), pm); + QPixmapCache::insert(key + QString::number(mode), pm); } return pm; } diff --git a/src/gui/styles/qgtkpainter.cpp b/src/gui/styles/qgtkpainter.cpp index 79c53e9..a6686e2 100644 --- a/src/gui/styles/qgtkpainter.cpp +++ b/src/gui/styles/qgtkpainter.cpp @@ -47,7 +47,6 @@ // This class is primarily a wrapper around the gtk painter functions // and takes care of converting all such calls into cached Qt pixmaps. -#include #include #include #include @@ -155,13 +154,21 @@ QGtkPainter::QGtkPainter(QPainter *_painter) static QString uniqueName(const QString &key, GtkStateType state, GtkShadowType shadow, const QSize &size, GtkWidget *widget = 0) { + + int digits = sizeof(qint64)/sizeof(QChar); + quint64 tstate= state, + tshadow = shadow, + twidth = size.width(), + theight = size.height(), + twidget = quint64(widget); + // Note the widget arg should ideally use the widget path, though would compromise performance QString tmp = key - % HexString(state) - % HexString(shadow) - % HexString(size.width()) - % HexString(size.height()) - % HexString(quint64(widget)); + % QString::fromRawData((QChar*)&tstate, digits) + % QString::fromRawData((QChar*)&tshadow, digits) + % QString::fromRawData((QChar*)&twidth, digits) + % QString::fromRawData((QChar*)&theight, digits) + % QString::fromRawData((QChar*)&twidget, digits); return tmp; } diff --git a/src/gui/styles/qstylehelper.cpp b/src/gui/styles/qstylehelper.cpp index d09d7fa..22f2014 100644 --- a/src/gui/styles/qstylehelper.cpp +++ b/src/gui/styles/qstylehelper.cpp @@ -63,18 +63,30 @@ namespace QStyleHelper { QString uniqueName(const QString &key, const QStyleOption *option, const QSize &size) { const QStyleOptionComplex *complexOption = qstyleoption_cast(option); - QString tmp = key % HexString(option->state) - % HexString(option->direction) - % HexString(complexOption ? uint(complexOption->activeSubControls) : 0u) - % HexString(option->palette.cacheKey()) - % HexString(size.width()) - % HexString(size.height()); + int digits = sizeof(qint64)/sizeof(QChar); + quint64 state = option->state, + direction = option->direction, + subcontrols = (complexOption ? uint(complexOption->activeSubControls) : 0u), + palettekey = option->palette.cacheKey(), + width = size.width(), + height = size.height(); + + QString tmp = key % QString::fromRawData((QChar*)&state, digits) + % QString::fromRawData((QChar*)&direction, digits) + % QString::fromRawData((QChar*)&subcontrols, digits) + % QString::fromRawData((QChar*)&palettekey, digits) + % QString::fromRawData((QChar*)&width, digits) + % QString::fromRawData((QChar*)&height, digits); #ifndef QT_NO_SPINBOX if (const QStyleOptionSpinBox *spinBox = qstyleoption_cast(option)) { - tmp = tmp % HexString(spinBox->buttonSymbols) - % HexString(spinBox->stepEnabled) - % QLatin1Char(spinBox->frame ? '1' : '0'); ; + quint64 buttonsymbols = spinBox->buttonSymbols, + stepEnabled = spinBox->stepEnabled, + frame = spinBox->frame; + + tmp = tmp % QString::fromRawData((QChar*)&buttonsymbols, digits) + % QString::fromRawData((QChar*)&stepEnabled, digits) + % QString::fromRawData((QChar*)&frame, digits); } #endif // QT_NO_SPINBOX return tmp; diff --git a/src/gui/styles/qstylehelper_p.h b/src/gui/styles/qstylehelper_p.h index 555ad60..31cc4ed 100644 --- a/src/gui/styles/qstylehelper_p.h +++ b/src/gui/styles/qstylehelper_p.h @@ -41,7 +41,6 @@ #include #include -#include #include #ifndef QSTYLEHELPER_P_H @@ -80,37 +79,6 @@ namespace QStyleHelper int bottom = 0); } -// internal helper. Converts an integer value to an unique string token -template - struct HexString -{ - inline HexString(const T t) - : val(t) - {} - - inline void write(QChar *&dest) const - { - const ushort hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - const char *c = reinterpret_cast(&val); - for (uint i = 0; i < sizeof(T); ++i) { - *dest++ = hexChars[*c & 0xf]; - *dest++ = hexChars[(*c & 0xf0) >> 4]; - ++c; - } - } - const T val; -}; - -// specialization to enable fast concatenating of our string tokens to a string -template - struct QConcatenable > -{ - typedef HexString type; - enum { ExactSize = true }; - static int size(const HexString &str) { return sizeof(str.val) * 2; } - static inline void appendTo(const HexString &str, QChar *&out) { str.write(out); } -}; - QT_END_NAMESPACE #endif // QSTYLEHELPER_P_H -- cgit v0.12