diff --git a/imagescrollareagl.cpp b/imagescrollareagl.cpp index a2dde9c..7c7bff1 100644 --- a/imagescrollareagl.cpp +++ b/imagescrollareagl.cpp @@ -57,6 +57,10 @@ ImageWidget::ImageWidget(QWidget *parent) : QOpenGLWidget(parent) m_superpixel = m_invert = false; m_showThumbnails = false; 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); } @@ -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() }; m_bufferSizes->bind(); m_bufferSizes->write(image->number() * sizeof(sizes), sizes, sizeof(sizes)); - update(); + if(!m_updateTimer->isActive())m_updateTimer->start(); } 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); m_thumbnailProgram->setUniformValue("mtf_param", m_low, m_mid, m_high); 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); QMatrix4x4 mvp; mvp.ortho(rect()); @@ -428,8 +432,8 @@ void ImageScrollAreaGL::setThumbnails(int count) m_thumbCount = count; if(m_thumbCount) { - m_verticalScrollBar->setRange(0, (m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) + 1) * THUMB_SIZE_BORDER); - m_verticalScrollBar->setPageStep(THUMB_SIZE); + m_verticalScrollBar->setRange(0, m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) * THUMB_SIZE_BORDER); + m_verticalScrollBar->setPageStep(THUMB_SIZE_BORDER); } else { @@ -445,8 +449,8 @@ void ImageScrollAreaGL::updateScrollbars(bool zoom) { m_horizontalScrollBar->hide(); m_verticalScrollBar->show(); - m_verticalScrollBar->setRange(0, (m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) + 1) * THUMB_SIZE_BORDER); - m_verticalScrollBar->setPageStep(128); + m_verticalScrollBar->setRange(0, m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) * THUMB_SIZE_BORDER); + m_verticalScrollBar->setPageStep(THUMB_SIZE_BORDER); } else { @@ -468,8 +472,8 @@ void ImageScrollAreaGL::resizeEvent(QResizeEvent *event) QWidget::resizeEvent(event); if(m_thumbCount) { - m_verticalScrollBar->setRange(0, (m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) + 1) * THUMB_SIZE_BORDER); - m_verticalScrollBar->setPageStep(128); + m_verticalScrollBar->setRange(0, m_thumbCount / (m_imageWidget->width() / THUMB_SIZE_BORDER) * THUMB_SIZE_BORDER); + m_verticalScrollBar->setPageStep(THUMB_SIZE_BORDER); } else { diff --git a/imagescrollareagl.h b/imagescrollareagl.h index 5a80fdf..dc0c924 100644 --- a/imagescrollareagl.h +++ b/imagescrollareagl.h @@ -10,6 +10,7 @@ #include #include #include +#include #include "rawimage.h" #include "imageringlist.h" @@ -27,6 +28,7 @@ class ImageWidget : public QOpenGLWidget Q_OBJECT QOpenGLFunctions *f; QOpenGLFunctions_3_3_Core *f3; + QTimer *m_updateTimer; std::unique_ptr m_program; std::unique_ptr m_thumbnailProgram; std::unique_ptr m_buffer;