Don't call update for each thumbnail loaded
This commit is contained in:
+12
-8
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user