41 {
43
46
49
50
51 if (!node->
parent())
return;
53
54 bool shouldRegenerateThumbnail = false;
55
57
59 ThumbnailRecord rec = *it;
60
63
64 shouldRegenerateThumbnail = true;
65 }
66 } else {
67 shouldRegenerateThumbnail = true;
68 }
69
70 if (shouldRegenerateThumbnail) {
72
74 QElapsedTimer timer;
75 timer.start();
77 const int measuredTime = timer.elapsed();
78
80 measuredTime > timeout) {
81 warnUI << "WARNING: thumbnail generation for" << node->name() << "took longer than expected:" << measuredTime << "(timeout:" << timeout << ")";
82 warnUI << " This layer's thumbnail will be rendered in imprecise mode from now on";
83 node->setPreferredThumbnailBoundsMode(KisThumbnailBoundsMode::Coarse);
84 }
85
87 });
88 }
89 });
90
92 }
int layerThumbnailGenerationTimeout(bool defaultValue=false) const
void initStrokeCallback() override
KisRunnableStrokeJobsInterface * runnableJobsInterface() const
virtual void addRunnableJobs(const QVector< KisRunnableStrokeJobDataBase * > &list)=0
void recursiveApplyNodes(NodePointer node, Functor func)
void addJobConcurrent(QVector< Job * > &jobs, Func func)
QImage createPreferredThumbnail(qint32 w, qint32 h, Qt::AspectRatioMode aspectRatioMode=Qt::IgnoreAspectRatio)
KisThumbnailBoundsMode preferredThumbnailBoundsMode() const
virtual int thumbnailSeqNo() const
virtual bool isFakeNode() const