diff --git a/wallpapers/image/CMakeLists.txt b/wallpapers/image/CMakeLists.txt --- a/wallpapers/image/CMakeLists.txt +++ b/wallpapers/image/CMakeLists.txt @@ -24,7 +24,6 @@ KF5::KIOCore KF5::KIOWidgets # KFileDialog KF5::NewStuff - KF5::GuiAddons ) if(BUILD_TESTING) diff --git a/wallpapers/image/backgroundlistmodel.h b/wallpapers/image/backgroundlistmodel.h --- a/wallpapers/image/backgroundlistmodel.h +++ b/wallpapers/image/backgroundlistmodel.h @@ -23,6 +23,7 @@ #include "image.h" #include +#include #include #include #include @@ -32,8 +33,6 @@ #include #include -#include - #include class QEventLoop; @@ -115,7 +114,7 @@ QHash m_sizeCache; QHash m_previewJobs; KDirWatch m_dirwatch; - KImageCache* m_imageCache; + QCache m_imageCache; QString m_findToken; int m_screenshotSize; diff --git a/wallpapers/image/backgroundlistmodel.cpp b/wallpapers/image/backgroundlistmodel.cpp --- a/wallpapers/image/backgroundlistmodel.cpp +++ b/wallpapers/image/backgroundlistmodel.cpp @@ -39,7 +39,6 @@ #include #include #include -#include #include #include @@ -70,19 +69,16 @@ : QAbstractListModel(parent), m_wallpaper(wallpaper) { + m_imageCache.setMaxCost(10 * 1024 * 1024); // 10 MiB + connect(&m_dirwatch, &KDirWatch::deleted, this, &BackgroundListModel::removeBackground); //TODO: on Qt 4.4 use the ui scale factor QFontMetrics fm(QGuiApplication::font()); m_screenshotSize = fm.width('M') * 15; - - m_imageCache = new KImageCache(QStringLiteral("plasma_wallpaper_preview"), 10485760); } -BackgroundListModel::~BackgroundListModel() -{ - delete m_imageCache; -} +BackgroundListModel::~BackgroundListModel() = default; QHash BackgroundListModel::BackgroundListModel::roleNames() const { @@ -343,14 +339,14 @@ } case ScreenshotRole: { - QPixmap preview = QPixmap(QSize(m_screenshotSize*1.6, - m_screenshotSize)); - if (m_imageCache->findPixmap(b.filePath("preferred"), &preview)) { - return preview; + const QString path = b.filePath("preferred"); + + QPixmap *cachedPreview = m_imageCache.object(path); + if (cachedPreview) { + return *cachedPreview; } -// qCDebug(IMAGEWALLPAPER) << "WP preferred: " << b.filePath("preferred"); -// qCDebug(IMAGEWALLPAPER) << "WP screenshot: " << b.filePath("screenshot"); - QUrl file = QUrl::fromLocalFile(b.filePath("preferred")); + + const QUrl file = QUrl::fromLocalFile(path); if (!m_previewJobs.contains(file) && file.isValid()) { KFileItemList list; @@ -451,7 +447,9 @@ return; } - m_imageCache->insertPixmap(b.filePath("preferred"), preview); + const int cost = preview.width() * preview.height() * preview.depth() / 8; + m_imageCache.insert(b.filePath("preferred"), new QPixmap(preview), cost); + //qCDebug(IMAGEWALLPAPER) << "WP preview size:" << preview.size(); emit dataChanged(index, index); }