Diffstat (limited to 'qt/qt-2.3.7.patch/qte237-iconviewspeed.patch') (more/less context) (ignore whitespace changes)
-rw-r--r-- | qt/qt-2.3.7.patch/qte237-iconviewspeed.patch | 7 |
1 files changed, 0 insertions, 7 deletions
diff --git a/qt/qt-2.3.7.patch/qte237-iconviewspeed.patch b/qt/qt-2.3.7.patch/qte237-iconviewspeed.patch index 63e45ec..81064e1 100644 --- a/qt/qt-2.3.7.patch/qte237-iconviewspeed.patch +++ b/qt/qt-2.3.7.patch/qte237-iconviewspeed.patch @@ -1,85 +1,78 @@ Speed up patches backported from http://robotics.dei.unipd.it/~koral/KDE/kflicker.html and http://lists.kde.org/?l=kde-optimize&m=105382164111363&w=2 (complete thread) diff -u qt-2.3.7_old/src/iconview/qiconview.cpp qt-2.3.7/src/iconview/qiconview.cpp --- qt-2.3.7_old/src/iconview/qiconview.cpp 2004-06-13 22:29:56.000000000 +0200 +++ qt-2.3.7/src/iconview/qiconview.cpp 2004-06-13 22:33:32.000000000 +0200 -@@ -1,5 +1,5 @@ - /**************************************************************************** --** $Id$ -+** $Id$ - ** - ** Implementation of QIconView widget class - ** @@ -220,6 +220,7 @@ QIconView::SelectionMode selectionMode; QIconViewItem *currentItem, *tmpCurrentItem, *highlightedItem, *startDragItem, *pressedItem, *selectAnchor; QRect *rubber; + QPixmap *backBuffer; QTimer *scrollTimer, *adjustTimer, *updateTimer, *inputTimer, *fullRedrawTimer; int rastX, rastY, spacing; @@ -2263,6 +2264,7 @@ d->currentItem = 0; d->highlightedItem = 0; d->rubber = 0; + d->backBuffer = 0; d->scrollTimer = 0; d->startDragItem = 0; d->tmpCurrentItem = 0; @@ -2411,6 +2413,8 @@ delete item; item = tmp; } + delete d->backBuffer; + d->backBuffer = 0; delete d->fm; d->fm = 0; #ifndef QT_NO_TOOLTIP @@ -2877,6 +2881,48 @@ } /*! + This function grabs all paintevents that otherwise would have been + processed by the QScrollView::viewportPaintEvent(). Here we use a + doublebuffer to reduce 'on-paint' flickering on QIconView + (and of course its childs). + + \sa QScrollView::viewportPaintEvent(), QIconView::drawContents() +*/ + +void QIconView::bufferedPaintEvent( QPaintEvent* pe ) +{ + QWidget* vp = viewport(); + QRect r = pe->rect() & vp->rect(); + int ex = r.x() + contentsX(); + int ey = r.y() + contentsY(); + int ew = r.width(); + int eh = r.height(); + + if ( !d->backBuffer ) + d->backBuffer = new QPixmap(vp->size()); + if ( d->backBuffer->size() != vp->size() ) { + //Resize function (with hysteesis). Uses a good compromise between memory + //consumption and speed (number) of resizes. + float newWidth = (float)vp->width(); + float newHeight = (float)vp->height(); + if ( newWidth > d->backBuffer->width() || newHeight > d->backBuffer->height() ) + { + newWidth *= 1.1892; + newHeight *= 1.1892; + d->backBuffer->resize( (int)newWidth, (int)newHeight ); + } else if ( 1.5*newWidth < d->backBuffer->width() || 1.5*newHeight < d->backBuffer->height() ) + d->backBuffer->resize( (int)newWidth, (int)newHeight ); + } + + QPainter p; + p.begin(d->backBuffer, vp); |