From ec023ac66004fdfbda9a4de7a414157626e0e6b6 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 2 Sep 2020 15:37:58 +0100 Subject: [PATCH] Avoid unnecessary re-layouts when populating thumbnails --- qrenderdoc/Widgets/ResourcePreview.h | 6 ++---- qrenderdoc/Widgets/ThumbnailStrip.cpp | 22 ++++++++++++++++------ qrenderdoc/Windows/TextureViewer.cpp | 3 +++ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/qrenderdoc/Widgets/ResourcePreview.h b/qrenderdoc/Widgets/ResourcePreview.h index 927689cce..c11a0dcb1 100644 --- a/qrenderdoc/Widgets/ResourcePreview.h +++ b/qrenderdoc/Widgets/ResourcePreview.h @@ -58,10 +58,8 @@ public: void setActive(bool b) { m_Active = b; - if(b) - show(); - else - hide(); + // we unconditionally hide the preview, the thumbnail strip will show it + hide(); } bool isActive() { return m_Active; } void setSize(QSize s); diff --git a/qrenderdoc/Widgets/ThumbnailStrip.cpp b/qrenderdoc/Widgets/ThumbnailStrip.cpp index 7214bfa89..e2fe7fd31 100644 --- a/qrenderdoc/Widgets/ThumbnailStrip.cpp +++ b/qrenderdoc/Widgets/ThumbnailStrip.cpp @@ -77,6 +77,9 @@ void ThumbnailStrip::showEvent(QShowEvent *event) void ThumbnailStrip::refreshLayout() { + if(updatesEnabled()) + setUpdatesEnabled(false); + QRect avail = geometry(); avail.adjust(6, 6, -6, -6); @@ -97,9 +100,7 @@ void ThumbnailStrip::refreshLayout() ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); delete layout; - layout = new QHBoxLayout(ui->scrollAreaWidgetContents); - for(ResourcePreview *w : m_Thumbnails) - layout->addWidget(w); + layout = new QHBoxLayout(); layout->setSpacing(6); layout->setContentsMargins(6, 6, 6, 6); layout->setAlignment(Qt::AlignTop); @@ -139,9 +140,7 @@ void ThumbnailStrip::refreshLayout() ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); delete layout; - layout = new QVBoxLayout(ui->scrollAreaWidgetContents); - for(ResourcePreview *w : m_Thumbnails) - layout->addWidget(w); + layout = new QVBoxLayout(); layout->setSpacing(6); layout->setContentsMargins(6, 6, 6, 6); layout->setAlignment(Qt::AlignTop); @@ -172,4 +171,15 @@ void ThumbnailStrip::refreshLayout() c->setSize(QSize(avail.width(), aspectHeight)); } } + + for(ResourcePreview *w : m_Thumbnails) + layout->addWidget(w); + + for(ResourcePreview *w : m_Thumbnails) + if(w->isActive()) + w->show(); + + ui->scrollAreaWidgetContents->setLayout(layout); + + setUpdatesEnabled(true); } diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index 60bf96448..9a37cbba6 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -3013,6 +3013,9 @@ void TextureViewer::OnEventChanged(uint32_t eventId) int outIndex = 0; int inIndex = 0; + ui->outputThumbs->setUpdatesEnabled(false); + ui->inputThumbs->setUpdatesEnabled(false); + bool copy = false, clear = false, compute = false; Following::GetDrawContext(m_Ctx, copy, clear, compute);