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

#include <KisLayerThumbnailCache.h>

+ Inheritance diagram for KisLayerThumbnailCache:

Classes

struct  Private
 

Signals

void sigLayerThumbnailUpdated (KisNodeSP node)
 

Public Member Functions

void clear ()
 
 KisLayerThumbnailCache ()
 
int maxSize () const
 
void notifyNodeAdded (KisNodeSP node)
 
void notifyNodeRemoved (KisNodeSP node)
 
void setIdleTaskManager (KisIdleTasksManager *manager)
 
void setImage (KisImageSP image)
 
void setImage (KisImageSP image, KisIdleTasksManager *manager)
 
void setMaxSize (int maxSize)
 
void startThumbnailsUpdate ()
 
QImage thumbnail (KisNodeSP node) const
 
 ~KisLayerThumbnailCache ()
 

Private Slots

void slotThumbnailGenerated (KisNodeSP node, int seqNo, int maxSize, const QImage &thumb)
 

Private Member Functions

void setIdleTaskManagerImpl (KisIdleTasksManager *manager)
 

Private Attributes

QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 18 of file KisLayerThumbnailCache.h.

Constructor & Destructor Documentation

◆ KisLayerThumbnailCache()

KisLayerThumbnailCache::KisLayerThumbnailCache ( )

Definition at line 116 of file KisLayerThumbnailCache.cpp.

117 : m_d(new Private())
118{
119}
QScopedPointer< Private > m_d

◆ ~KisLayerThumbnailCache()

KisLayerThumbnailCache::~KisLayerThumbnailCache ( )
default

Member Function Documentation

◆ clear()

void KisLayerThumbnailCache::clear ( )

Definition at line 220 of file KisLayerThumbnailCache.cpp.

221{
222 m_d->cache.clear();
223}

References m_d.

◆ maxSize()

int KisLayerThumbnailCache::maxSize ( ) const

Definition at line 169 of file KisLayerThumbnailCache.cpp.

170{
171 return m_d->maxSize;
172}

References m_d.

◆ notifyNodeAdded()

void KisLayerThumbnailCache::notifyNodeAdded ( KisNodeSP node)

Definition at line 210 of file KisLayerThumbnailCache.cpp.

211{
212 Q_UNUSED(node);
213 m_d->cleanupDeletedNodes();
214
215 if (m_d->image && m_d->taskGuard.isValid()) {
216 m_d->taskGuard.trigger();
217 }
218}

References m_d.

◆ notifyNodeRemoved()

void KisLayerThumbnailCache::notifyNodeRemoved ( KisNodeSP node)

Definition at line 204 of file KisLayerThumbnailCache.cpp.

205{
206 Q_UNUSED(node);
207 m_d->cleanupDeletedNodes();
208}

References m_d.

◆ setIdleTaskManager()

void KisLayerThumbnailCache::setIdleTaskManager ( KisIdleTasksManager * manager)

Definition at line 146 of file KisLayerThumbnailCache.cpp.

147{
148 setIdleTaskManagerImpl(manager);
149 if (m_d->image && m_d->taskGuard.isValid()) {
150 m_d->taskGuard.trigger();
151 }
152}
void setIdleTaskManagerImpl(KisIdleTasksManager *manager)

References m_d, and setIdleTaskManagerImpl().

◆ setIdleTaskManagerImpl()

void KisLayerThumbnailCache::setIdleTaskManagerImpl ( KisIdleTasksManager * manager)
private

Definition at line 123 of file KisLayerThumbnailCache.cpp.

124{
125 if (manager) {
126 m_d->taskGuard = manager->addIdleTaskWithGuard([this] (KisImageSP image) {
127 ThumbnailsStroke *stroke = new ThumbnailsStroke(image, m_d->maxSize, m_d->cache);
128 connect(stroke, SIGNAL(sigThumbnailGenerated(KisNodeSP, int, int, QImage)), this, SLOT(slotThumbnailGenerated(KisNodeSP, int, int, QImage)));
129 return stroke;
130 });
131 } else {
132 m_d->taskGuard = KisIdleTasksManager::TaskGuard();
133 }
134}
TaskGuard addIdleTaskWithGuard(KisIdleTaskStrokeStrategyFactory factory)
Registers the factory for the idle task.
void slotThumbnailGenerated(KisNodeSP node, int seqNo, int maxSize, const QImage &thumb)

References KisIdleTasksManager::addIdleTaskWithGuard(), m_d, and slotThumbnailGenerated().

◆ setImage() [1/2]

void KisLayerThumbnailCache::setImage ( KisImageSP image)

Definition at line 136 of file KisLayerThumbnailCache.cpp.

137{
138 m_d->image = image;
139 m_d->cache.clear();
140
141 if (m_d->image && m_d->taskGuard.isValid()) {
142 m_d->taskGuard.trigger();
143 }
144}

References m_d.

◆ setImage() [2/2]

void KisLayerThumbnailCache::setImage ( KisImageSP image,
KisIdleTasksManager * manager )

Definition at line 154 of file KisLayerThumbnailCache.cpp.

155{
156 setIdleTaskManagerImpl(manager);
157 setImage(image);
158 // the update is triggered only by the second call, not the first one!
159}
void setImage(KisImageSP image)

References setIdleTaskManagerImpl(), and setImage().

◆ setMaxSize()

void KisLayerThumbnailCache::setMaxSize ( int maxSize)

Definition at line 161 of file KisLayerThumbnailCache.cpp.

162{
163 m_d->maxSize = maxSize;
164 if (m_d->image && m_d->taskGuard.isValid()) {
165 m_d->taskGuard.trigger();
166 }
167}

References m_d, and maxSize().

◆ sigLayerThumbnailUpdated

void KisLayerThumbnailCache::sigLayerThumbnailUpdated ( KisNodeSP node)
signal

◆ slotThumbnailGenerated

void KisLayerThumbnailCache::slotThumbnailGenerated ( KisNodeSP node,
int seqNo,
int maxSize,
const QImage & thumb )
privateslot

Definition at line 225 of file KisLayerThumbnailCache.cpp.

226{
227 if (node->image() != m_d->image) {
228 qWarning() << "KisLayerThumbnailCache::slotThumbnailGenerated: node does not belong to the attached image anymore!" << ppVar(node) << ppVar(m_d->image);
229 return;
230 }
231
232 m_d->cache[node] = {thumb, seqNo, maxSize};
233 Q_EMIT sigLayerThumbnailUpdated(node);
234}
void sigLayerThumbnailUpdated(KisNodeSP node)
#define ppVar(var)
Definition kis_debug.h:155
KisImageWSP image

References KisBaseNode::image, m_d, maxSize(), ppVar, and sigLayerThumbnailUpdated().

◆ startThumbnailsUpdate()

void KisLayerThumbnailCache::startThumbnailsUpdate ( )

◆ thumbnail()

QImage KisLayerThumbnailCache::thumbnail ( KisNodeSP node) const

Definition at line 174 of file KisLayerThumbnailCache.cpp.

175{
176 QImage image;
177
178 auto it = m_d->cache.find(node);
179 if (it != m_d->cache.end()) {
180 image = it->image;
181
182 if (it->maxSize > m_d->maxSize) {
183 image = image.scaled(m_d->maxSize, m_d->maxSize, Qt::KeepAspectRatio);
184 }
185 } else {
186 image = QImage(1, 1, QImage::Format_ARGB32);
187 image.fill(0);
188 }
189
190 return image;
191}

References m_d.

Member Data Documentation

◆ m_d

QScopedPointer<Private> KisLayerThumbnailCache::m_d
private

Definition at line 50 of file KisLayerThumbnailCache.h.


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