Commit 9b7318c1 authored by Dmitry Kazakov's avatar Dmitry Kazakov
Browse files

Make sure that thumbnails are generated from exactBounds()

Now the layer thumbnails are generated only at the very end of the stroke,
that is, when the image is idle. It makes it possible to use more
expensive exactBounds() routine for the thumbnails update.

BUG:459273
parent bb280906
Pipeline #234831 canceled with stage
in 16 minutes and 28 seconds
......@@ -1832,7 +1832,7 @@ QImage KisPaintDevice::createThumbnail(qint32 maxw, qint32 maxh,
qreal oversample, KoColorConversionTransformation::Intent renderingIntent,
KoColorConversionTransformation::ConversionFlags conversionFlags)
{
const QRect deviceExtent = extent();
const QRect deviceExtent = exactBounds();
const QSize thumbnailSize = deviceExtent.size().scaled(maxw, maxh, aspectRatioMode);
return createThumbnail(thumbnailSize.width(), thumbnailSize.height(),
oversample, renderingIntent, conversionFlags);
......
......@@ -159,7 +159,7 @@ LayerBox::LayerBox()
: QDockWidget(i18n("Layers"))
, m_canvas(0)
, m_wdgLayerBox(new Ui_WdgLayerBox)
, m_thumbnailCompressor(500, KisSignalCompressor::FIRST_INACTIVE)
, m_thumbnailCompressor(200, KisSignalCompressor::FIRST_INACTIVE)
, m_colorLabelCompressor(500, KisSignalCompressor::FIRST_INACTIVE)
, m_thumbnailSizeCompressor(100, KisSignalCompressor::FIRST_INACTIVE)
, m_treeIndentationCompressor(100, KisSignalCompressor::FIRST_INACTIVE)
......@@ -306,7 +306,8 @@ LayerBox::LayerBox()
setEnabled(false);
connect(&m_thumbnailCompressor, SIGNAL(timeout()), SLOT(updateThumbnail()));
connect(&m_idleWatcher, SIGNAL(startedIdleMode()), SLOT(updateDirtyThumbnails()));
connect(&m_thumbnailCompressor, SIGNAL(timeout()), SLOT(notifyThumbnailDirty()));
connect(&m_colorLabelCompressor, SIGNAL(timeout()), SLOT(updateAvailableLabels()));
......@@ -541,6 +542,7 @@ void LayerBox::setCanvas(KoCanvasBase *canvas)
disconnect(m_nodeManager, 0, this, 0);
disconnect(m_nodeModel, 0, m_nodeManager, 0);
m_nodeManager->slotSetSelectedNodes(KisNodeList());
m_idleWatcher.setTrackedImages({});
}
m_canvas = dynamic_cast<KisCanvas2*>(canvas);
......@@ -549,6 +551,7 @@ void LayerBox::setCanvas(KoCanvasBase *canvas)
m_image = m_canvas->image();
emit imageChanged();
connect(m_image, SIGNAL(sigImageUpdated(QRect)), &m_thumbnailCompressor, SLOT(start()));
m_idleWatcher.setTrackedImage(m_image);
KisDocument* doc = static_cast<KisDocument*>(m_canvas->imageView()->document());
KisShapeController *kritaShapeController =
......@@ -1096,9 +1099,17 @@ void LayerBox::slotNodeManagerChangedSelection(const KisNodeList &nodes)
model->select(selection, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
}
void LayerBox::updateThumbnail()
void LayerBox::notifyThumbnailDirty()
{
m_wdgLayerBox->listLayers->updateNode(m_wdgLayerBox->listLayers->currentIndex());
m_dirtyThumbnailNodes.insert(m_wdgLayerBox->listLayers->currentIndex());
}
void LayerBox::updateDirtyThumbnails()
{
Q_FOREACH (const QModelIndex &index, m_dirtyThumbnailNodes) {
m_wdgLayerBox->listLayers->updateNode(index);
}
m_dirtyThumbnailNodes.clear();
}
void LayerBox::slotRenameCurrentNode()
......
......@@ -34,6 +34,7 @@
#include <QCheckBox>
#include <kis_slider_spin_box.h>
#include <QComboBox>
#include <kis_idle_watcher.h>
class QModelIndex;
......@@ -123,7 +124,6 @@ private Q_SLOTS:
void slotLayerOpMenuOpened();
void slotLayerOpMenuClosed();
void updateThumbnail();
void updateAvailableLabels();
void updateLayerFiltering();
......@@ -135,6 +135,8 @@ private Q_SLOTS:
void slotImageTimeChanged(int time);
void slotForgetAboutSavedNodeBeforeEditSelectionMode();
void notifyThumbnailDirty();
void updateDirtyThumbnails();
Q_SIGNALS:
void imageChanged();
......@@ -185,6 +187,8 @@ private:
KisNodeWSP m_savedNodeBeforeEditSelectionMode;
bool m_blockOpacityUpdate {false};
KisSignalAutoConnectionsStore m_activeNodeConnections;
QSet<QModelIndex> m_dirtyThumbnailNodes;
KisIdleWatcher m_idleWatcher;
};
class LayerBoxFactory : public KoDockFactoryBase
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment