Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 23rd, 2012  |  syntax: C++  |  size: 1.45 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. void QSingleImageViewPrivate::updateScrollBars()
  2. {
  3.     Q_Q(QSingleImageView);
  4.  
  5.     QSizeF pixmapSize = pixmap.size() * visualZoomFactor;
  6.     QSize sizeHint = QSize(q->verticalScrollBar()->sizeHint().width(), q->horizontalScrollBar()->sizeHint().height());
  7.     QSize maxViewportSize = q->maximumViewportSize();
  8.  
  9.     bool hScrollBarVisible = pixmapSize.width() > maxViewportSize.width();
  10.     bool vScrollBarVisible = pixmapSize.height() > maxViewportSize.height();
  11.  
  12.     QSize viewportSize = maxViewportSize;
  13.     if (vScrollBarVisible)
  14.         viewportSize.rwidth() -= sizeHint.width();
  15.     if (hScrollBarVisible)
  16.         viewportSize.rheight() -= sizeHint.height();
  17.  
  18.     qreal dx = pixmapSize.width() - viewportSize.width();
  19.     qreal dy = pixmapSize.height() - viewportSize.height();
  20.  
  21.     qreal dx2 = vScrollBarVisible ? qBound(0.0, 1.0*abs(dx), (qreal)sizeHint.width()) : 0;
  22.     qreal dy2 = hScrollBarVisible ? qBound(0.0, 1.0*abs(dy), (qreal)sizeHint.height()) : 0;
  23.  
  24.     int hmax = pixmapSize.width() - maxViewportSize.width();
  25.     int vmax = pixmapSize.height() - maxViewportSize.height();
  26.  
  27.     hmax /= 2.0;
  28.     vmax /= 2.0;
  29.  
  30.     q->horizontalScrollBar()->setRange(-qMax(0, hmax), qMax(0.0, hmax + dx2));
  31.     q->verticalScrollBar()->setRange(-qMax(0, vmax), qMax(0.0, vmax + dy2));
  32.  
  33.     qDebug() << pixmapSize << sizeHint << maxViewportSize << viewportSize << dx << dy << hScrollBarVisible << vScrollBarVisible;
  34.  
  35.     q->viewport()->update();
  36. }