17struct ThumbnailRecord {
50 if (!node->
parent())
return;
53 bool shouldRegenerateThumbnail =
false;
58 ThumbnailRecord rec = *it;
63 shouldRegenerateThumbnail =
true;
66 shouldRegenerateThumbnail =
true;
69 if (shouldRegenerateThumbnail) {
70 addJobConcurrent(jobs, [node,
this] ()
mutable {
86 QMap<KisNodeWSP, ThumbnailRecord>
m_cache;
96 QMap<KisNodeWSP, ThumbnailRecord>
cache;
127 if (
m_d->image &&
m_d->taskGuard.isValid()) {
128 m_d->taskGuard.trigger();
135 if (
m_d->image &&
m_d->taskGuard.isValid()) {
136 m_d->taskGuard.trigger();
150 if (
m_d->image &&
m_d->taskGuard.isValid()) {
151 m_d->taskGuard.trigger();
164 auto it =
m_d->cache.find(node);
165 if (it !=
m_d->cache.end()) {
168 if (it->maxSize >
m_d->maxSize) {
169 image = image.scaled(
m_d->maxSize,
m_d->maxSize, Qt::KeepAspectRatio);
172 image = QImage(1, 1, QImage::Format_ARGB32);
181 for (
auto it =
cache.begin(); it !=
cache.end();) {
183 it =
cache.erase(it);
193 m_d->cleanupDeletedNodes();
199 m_d->cleanupDeletedNodes();
201 if (
m_d->image &&
m_d->taskGuard.isValid()) {
202 m_d->taskGuard.trigger();
214 qWarning() <<
"KisLayerThumbnailCache::slotThumbnailGenerated: node does not belong to the attached image anymore!" <<
ppVar(node) <<
ppVar(
m_d->image);
222#include "KisLayerThumbnailCache.moc"
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void initStrokeCallback() override
TaskGuard addIdleTaskWithGuard(KisIdleTaskStrokeStrategyFactory factory)
Registers the factory for the idle task.
void setImage(KisImageSP image)
QImage thumbnail(KisNodeSP node) const
void notifyNodeAdded(KisNodeSP node)
void sigLayerThumbnailUpdated(KisNodeSP node)
~KisLayerThumbnailCache()
void setIdleTaskManagerImpl(KisIdleTasksManager *manager)
QScopedPointer< Private > m_d
void setIdleTaskManager(KisIdleTasksManager *manager)
void setMaxSize(int maxSize)
void slotThumbnailGenerated(KisNodeSP node, int seqNo, int maxSize, const QImage &thumb)
void notifyNodeRemoved(KisNodeSP node)
KisRunnableStrokeJobsInterface * runnableJobsInterface() const
virtual void addRunnableJobs(const QVector< KisRunnableStrokeJobDataBase * > &list)=0
KUndo2MagicString kundo2_i18n(const char *text)
void recursiveApplyNodes(NodePointer node, Functor func)
void addJobConcurrent(QVector< Job * > &jobs, Func func)
virtual QImage createThumbnail(qint32 w, qint32 h, Qt::AspectRatioMode aspectRatioMode=Qt::IgnoreAspectRatio)
virtual int thumbnailSeqNo() const
virtual bool isFakeNode() const
KisIdleTasksManager::TaskGuard taskGuard
void cleanupDeletedNodes()
QMap< KisNodeWSP, ThumbnailRecord > cache
void initStrokeCallback() override
QMap< KisNodeWSP, ThumbnailRecord > m_cache
ThumbnailsStroke(KisImageSP image, int maxSize, const QMap< KisNodeWSP, ThumbnailRecord > &cache)
void sigThumbnailGenerated(KisNodeSP node, int maxSize, int seqNo, const QImage &thumb)