Don't call update for each thumbnail loaded

This commit is contained in:
2022-04-18 09:56:45 +02:00
parent fabf3f0c1a
commit a1848b27bf
2 changed files with 14 additions and 8 deletions
+12 -8
View File
@@ -57,6 +57,10 @@ ImageWidget::ImageWidget(QWidget *parent) : QOpenGLWidget(parent)
m_superpixel = m_invert = false; m_superpixel = m_invert = false;
m_showThumbnails = false; m_showThumbnails = false;
m_thumbnailCount = 0; m_thumbnailCount = 0;
m_updateTimer = new QTimer(this);
m_updateTimer->setInterval(500);
m_updateTimer->setSingleShot(true);
connect(m_updateTimer, SIGNAL(timeout()), this, SLOT(update()));
setAcceptDrops(true); setAcceptDrops(true);
} }
@@ -190,7 +194,7 @@ void ImageWidget::thumbnailLoaded(const Image *image)
int sizes[3] = { std::max(1, a > 1.0f ? THUMB_SIZE : (int)(THUMB_SIZE * a)), std::max(1, a < 1.0f ? THUMB_SIZE : (int)(THUMB_SIZE / a)), image->number() }; int sizes[3] = { std::max(1, a > 1.0f ? THUMB_SIZE : (int)(THUMB_SIZE * a)), std::max(1, a < 1.0f ? THUMB_SIZE : (int)(THUMB_SIZE / a)), image->number() };
m_bufferSizes->bind(); m_bufferSizes->bind();
m_bufferSizes->write(image->number() * sizeof(sizes), sizes, sizeof(sizes)); m_bufferSizes->write(image->number() * sizeof(sizes), sizes, sizeof(sizes));
update(); if(!m_updateTimer->isActive())m_updateTimer->start();
} }
void ImageWidget::showThumbnail(bool enable) void ImageWidget::showThumbnail(bool enable)
@@ -218,7 +222,7 @@ void ImageWidget::paintGL()
f->glUniform3i(m_thumbnailProgram->uniformLocation("viewport_row"), width(), height(), width()/THUMB_SIZE_BORDER); f->glUniform3i(m_thumbnailProgram->uniformLocation("viewport_row"), width(), height(), width()/THUMB_SIZE_BORDER);
m_thumbnailProgram->setUniformValue("mtf_param", m_low, m_mid, m_high); m_thumbnailProgram->setUniformValue("mtf_param", m_low, m_mid, m_high);
m_thumbnailProgram->setUniformValue("invert", m_invert); m_thumbnailProgram->setUniformValue("invert", m_invert);
m_thumbnailProgram->setUniformValue("offset", m_dx, m_dy); m_thumbnailProgram->setUniformValue("offset", 0, m_dy);
f3->glVertexAttribDivisor(m_thumbnailProgram->attributeLocation("imageSize_num"), 1); f3->glVertexAttribDivisor(m_thumbnailProgram->attributeLocation("imageSize_num"), 1);
QMatrix4x4 mvp; QMatrix4x4 mvp;
mvp.ortho(rect()); mvp.ortho(rect());
@@ -428,8 +432,8 @@ void ImageScrollAreaGL::setThumbnails(int count)
m_thumbCount = count; m_thumbCount = count;
if(m_thumbCount) if(m_thumbCount)
{ {
m_verticalScrollBar->setRange(0, (m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) + 1) * THUMB_SIZE_BORDER); m_verticalScrollBar->setRange(0, m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) * THUMB_SIZE_BORDER);
m_verticalScrollBar->setPageStep(THUMB_SIZE); m_verticalScrollBar->setPageStep(THUMB_SIZE_BORDER);
} }
else else
{ {
@@ -445,8 +449,8 @@ void ImageScrollAreaGL::updateScrollbars(bool zoom)
{ {
m_horizontalScrollBar->hide(); m_horizontalScrollBar->hide();
m_verticalScrollBar->show(); m_verticalScrollBar->show();
m_verticalScrollBar->setRange(0, (m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) + 1) * THUMB_SIZE_BORDER); m_verticalScrollBar->setRange(0, m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) * THUMB_SIZE_BORDER);
m_verticalScrollBar->setPageStep(128); m_verticalScrollBar->setPageStep(THUMB_SIZE_BORDER);
} }
else else
{ {
@@ -468,8 +472,8 @@ void ImageScrollAreaGL::resizeEvent(QResizeEvent *event)
QWidget::resizeEvent(event); QWidget::resizeEvent(event);
if(m_thumbCount) if(m_thumbCount)
{ {
m_verticalScrollBar->setRange(0, (m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) + 1) * THUMB_SIZE_BORDER); m_verticalScrollBar->setRange(0, m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) * THUMB_SIZE_BORDER);
m_verticalScrollBar->setPageStep(128); m_verticalScrollBar->setPageStep(THUMB_SIZE_BORDER);
} }
else else
{ {
+2
View File
@@ -10,6 +10,7 @@
#include <QOpenGLTexture> #include <QOpenGLTexture>
#include <QOpenGLVertexArrayObject> #include <QOpenGLVertexArrayObject>
#include <QScrollBar> #include <QScrollBar>
#include <QTimer>
#include "rawimage.h" #include "rawimage.h"
#include "imageringlist.h" #include "imageringlist.h"
@@ -27,6 +28,7 @@ class ImageWidget : public QOpenGLWidget
Q_OBJECT Q_OBJECT
QOpenGLFunctions *f; QOpenGLFunctions *f;
QOpenGLFunctions_3_3_Core *f3; QOpenGLFunctions_3_3_Core *f3;
QTimer *m_updateTimer;
std::unique_ptr<QOpenGLShaderProgram> m_program; std::unique_ptr<QOpenGLShaderProgram> m_program;
std::unique_ptr<QOpenGLShaderProgram> m_thumbnailProgram; std::unique_ptr<QOpenGLShaderProgram> m_thumbnailProgram;
std::unique_ptr<QOpenGLBuffer> m_buffer; std::unique_ptr<QOpenGLBuffer> m_buffer;