Krita Source Code Documentation
Loading...
Searching...
No Matches
KisResourceThumbnailCache Class Reference

#include <KisResourceThumbnailCache.h>

Classes

struct  Private
 

Public Member Functions

QImage getImage (const QModelIndex &index, const QSize size=QSize(-1, -1), Qt::AspectRatioMode aspectMode=Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode=Qt::FastTransformation)
 
 KisResourceThumbnailCache ()
 
 ~KisResourceThumbnailCache ()
 

Static Public Member Functions

static KisResourceThumbnailCacheinstance ()
 

Private Member Functions

void insert (const QPair< QString, QString > &key, const QImage &image)
 
void insert (const QString &storageLocation, const QString &resourceType, const QString &filename, const QImage &image)
 
QImage originalImage (const QString &storageLocation, const QString &resourceType, const QString &filename) const
 
void remove (const QPair< QString, QString > &key)
 
void remove (const QString &storageLocation, const QString &resourceType, const QString &filename)
 

Private Attributes

QScopedPointer< Privatem_d
 

Friends

class KisResourceLocator
 
class KisResourceQueryMapper
 
class KisStorageModel
 

Detailed Description

Definition at line 17 of file KisResourceThumbnailCache.h.

Constructor & Destructor Documentation

◆ KisResourceThumbnailCache()

KisResourceThumbnailCache::KisResourceThumbnailCache ( )

Definition at line 112 of file KisResourceThumbnailCache.cpp.

113 : m_d(new Private)
114{
115}
QScopedPointer< Private > m_d

◆ ~KisResourceThumbnailCache()

KisResourceThumbnailCache::~KisResourceThumbnailCache ( )

Definition at line 117 of file KisResourceThumbnailCache.cpp.

118{
119}

Member Function Documentation

◆ getImage()

QImage KisResourceThumbnailCache::getImage ( const QModelIndex & index,
const QSize size = QSize(-1, -1),
Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio,
Qt::TransformationMode transformMode = Qt::FastTransformation )

Definition at line 167 of file KisResourceThumbnailCache.cpp.

171{
172 const QString storageLocation = KisResourceLocator::instance()->makeStorageLocationAbsolute(
173 index.data(Qt::UserRole + KisAbstractResourceModel::Location).value<QString>());
174 const QString resourceType =
175 index.data(Qt::UserRole + KisAbstractResourceModel::ResourceType).value<QString>();
176 const QString filename = index.data(Qt::UserRole + KisAbstractResourceModel::Filename).value<QString>();
177
178 const ImageScalingParameters param = {size, aspectMode, transformMode};
179
180 ResourceKey key = m_d->key(storageLocation, resourceType, filename);
181
182 QImage result = m_d->getExactMatch(key, param);
183 if (!result.isNull()) {
184 return result;
185 } else if (m_d->containsOriginal(key)) {
186 result = m_d->getOriginal(key);
187 } else {
188 result = index.data(Qt::UserRole + KisAbstractResourceModel::Thumbnail).value<QImage>();
189 // KisResourceQueryMapper should have inserted the image, so we don't have to.
190 // Why there? Because most of the API usage for Thumbnail is going to be from index.data(), so we just
191 // remove the dependency that our user has to know this class for just accessing the cached original
192 // thumbnail.
193 KIS_SAFE_ASSERT_RECOVER_NOOP(result.isNull() || m_d->containsOriginal(key));
194 }
195 // if the size that the has been demanded, we will then cache the size and then pass it.
196 if (!result.isNull() && param.size.isValid()) {
197 const QImage scaledImage = result.scaled(param.size, param.aspectRatioMode, param.transformationMode);
198 if (m_d->scaledThumbnailCache.contains(key)) {
199 m_d->scaledThumbnailCache[key].insert(param, scaledImage);
200 } else {
201 ThumbnailCacheT scaledCacheMap;
202 scaledCacheMap.insert(param, scaledImage);
203 m_d->scaledThumbnailCache.insert(key, scaledCacheMap);
204 }
205 return scaledImage;
206 } else {
207 return result;
208 }
209}
QString makeStorageLocationAbsolute(QString storageLocation) const
static KisResourceLocator * instance()
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References KisAbstractResourceModel::Filename, KisResourceLocator::instance(), KIS_SAFE_ASSERT_RECOVER_NOOP, KisAbstractResourceModel::Location, m_d, KisResourceLocator::makeStorageLocationAbsolute(), KisAbstractResourceModel::ResourceType, and KisAbstractResourceModel::Thumbnail.

◆ insert() [1/2]

void KisResourceThumbnailCache::insert ( const QPair< QString, QString > & key,
const QImage & image )
private

Definition at line 140 of file KisResourceThumbnailCache.cpp.

141{
142 m_d->insertOriginal(key, image);
143}

References m_d.

◆ insert() [2/2]

void KisResourceThumbnailCache::insert ( const QString & storageLocation,
const QString & resourceType,
const QString & filename,
const QImage & image )
private

Definition at line 129 of file KisResourceThumbnailCache.cpp.

133{
134 if (image.isNull()) {
135 return;
136 }
137 insert(m_d->key(storageLocation, resourceType, filename), image);
138}
void insert(const QString &storageLocation, const QString &resourceType, const QString &filename, const QImage &image)

References insert(), and m_d.

◆ instance()

KisResourceThumbnailCache * KisResourceThumbnailCache::instance ( )
static

Definition at line 107 of file KisResourceThumbnailCache.cpp.

108{
109 return s_instance;
110}

◆ originalImage()

QImage KisResourceThumbnailCache::originalImage ( const QString & storageLocation,
const QString & resourceType,
const QString & filename ) const
private

Definition at line 121 of file KisResourceThumbnailCache.cpp.

124{
125 const ResourceKey key = m_d->key(storageLocation, resourceType, filename);
126 return m_d->containsOriginal(key) ? m_d->getOriginal(key) : QImage();
127}

References m_d.

◆ remove() [1/2]

void KisResourceThumbnailCache::remove ( const QPair< QString, QString > & key)
private

Definition at line 152 of file KisResourceThumbnailCache.cpp.

153{
154 if (m_d->originalImageCache.contains(key)) {
155 m_d->originalImageCache.remove(key);
156
157 if (m_d->scaledThumbnailCache.contains(key)) {
158 m_d->scaledThumbnailCache.remove(key);
159 }
160 } else {
161 // Something must have gone wrong for thumbnail to exist in scaledThumbnailCache but not be in
162 // original.
163 KIS_ASSERT(!m_d->scaledThumbnailCache.contains(key));
164 }
165}
#define KIS_ASSERT(cond)
Definition kis_assert.h:33

References KIS_ASSERT, and m_d.

◆ remove() [2/2]

void KisResourceThumbnailCache::remove ( const QString & storageLocation,
const QString & resourceType,
const QString & filename )
private

Definition at line 145 of file KisResourceThumbnailCache.cpp.

148{
149 remove(m_d->key(storageLocation, resourceType, filename));
150}
void remove(const QString &storageLocation, const QString &resourceType, const QString &filename)

References m_d, and remove().

Friends And Related Symbol Documentation

◆ KisResourceLocator

friend class KisResourceLocator
friend

Definition at line 32 of file KisResourceThumbnailCache.h.

◆ KisResourceQueryMapper

friend class KisResourceQueryMapper
friend

Definition at line 31 of file KisResourceThumbnailCache.h.

◆ KisStorageModel

friend class KisStorageModel
friend

Definition at line 33 of file KisResourceThumbnailCache.h.

Member Data Documentation

◆ m_d

QScopedPointer<Private> KisResourceThumbnailCache::m_d
private

Definition at line 50 of file KisResourceThumbnailCache.h.


The documentation for this class was generated from the following files: