
Untitled
By: a guest on
May 23rd, 2012 | syntax:
C++ | size: 1.45 KB | hits: 15 | expires: Never
void QSingleImageViewPrivate::updateScrollBars()
{
Q_Q(QSingleImageView);
QSizeF pixmapSize = pixmap.size() * visualZoomFactor;
QSize sizeHint = QSize(q->verticalScrollBar()->sizeHint().width(), q->horizontalScrollBar()->sizeHint().height());
QSize maxViewportSize = q->maximumViewportSize();
bool hScrollBarVisible = pixmapSize.width() > maxViewportSize.width();
bool vScrollBarVisible = pixmapSize.height() > maxViewportSize.height();
QSize viewportSize = maxViewportSize;
if (vScrollBarVisible)
viewportSize.rwidth() -= sizeHint.width();
if (hScrollBarVisible)
viewportSize.rheight() -= sizeHint.height();
qreal dx = pixmapSize.width() - viewportSize.width();
qreal dy = pixmapSize.height() - viewportSize.height();
qreal dx2 = vScrollBarVisible ? qBound(0.0, 1.0*abs(dx), (qreal)sizeHint.width()) : 0;
qreal dy2 = hScrollBarVisible ? qBound(0.0, 1.0*abs(dy), (qreal)sizeHint.height()) : 0;
int hmax = pixmapSize.width() - maxViewportSize.width();
int vmax = pixmapSize.height() - maxViewportSize.height();
hmax /= 2.0;
vmax /= 2.0;
q->horizontalScrollBar()->setRange(-qMax(0, hmax), qMax(0.0, hmax + dx2));
q->verticalScrollBar()->setRange(-qMax(0, vmax), qMax(0.0, vmax + dy2));
qDebug() << pixmapSize << sizeHint << maxViewportSize << viewportSize << dx << dy << hScrollBarVisible << vScrollBarVisible;
q->viewport()->update();
}