diff options
Diffstat (limited to 'src/icondelegate.cpp')
| -rw-r--r-- | src/icondelegate.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/icondelegate.cpp b/src/icondelegate.cpp index 8c2fe5cc..794ac7f3 100644 --- a/src/icondelegate.cpp +++ b/src/icondelegate.cpp @@ -22,6 +22,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include <QLabel>
#include <QPainter>
#include <QDebug>
+#include <QPixmapCache>
IconDelegate::IconDelegate(QObject *parent)
@@ -34,7 +35,7 @@ void IconDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, {
QStyledItemDelegate::paint(painter, option, index);
- QList<QIcon> icons = getIcons(index);
+ QList<QString> icons = getIcons(index);
int x = 4;
painter->save();
@@ -43,8 +44,14 @@ void IconDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, iconWidth = std::min(16, iconWidth);
painter->translate(option.rect.topLeft());
- for (auto iter = icons.begin(); iter != icons.end(); ++iter) {
- painter->drawPixmap(x, 2, iconWidth, iconWidth, iter->pixmap(QSize(iconWidth, iconWidth)));
+ for (const QString &iconId : icons) {
+ QPixmap icon;
+ QString fullIconId = QString("%1_%2").arg(iconId).arg(iconWidth);
+ if (!QPixmapCache::find(fullIconId, &icon)) {
+ icon = QIcon(iconId).pixmap(iconWidth, iconWidth);
+ QPixmapCache::insert(fullIconId, icon);
+ }
+ painter->drawPixmap(x, 2, iconWidth, iconWidth, icon);
x += iconWidth + 4;
}
|
