summaryrefslogtreecommitdiffstats
path: root/src/iconview/qiconview.cpp
diff options
context:
space:
mode:
authorDarrell Anderson <[email protected]>2013-03-02 15:54:34 -0600
committerDarrell Anderson <[email protected]>2013-03-02 15:54:34 -0600
commit85e23da660cc38aa36026664631e9effcb53726b (patch)
tree5daf0998c4c154b41fc500204e55c97d83534510 /src/iconview/qiconview.cpp
parent67196343e4fac61834c980d6ccd4d9b661e781b6 (diff)
parentcb6a50aa2564adf03b5ccd87b8ee0e68947d3a61 (diff)
downloadtqt3-85e23da660cc38aa36026664631e9effcb53726b.tar.gz
tqt3-85e23da660cc38aa36026664631e9effcb53726b.zip
Merge branch 'master' of http://scm.trinitydesktop.org/scm/git/tqt3
Diffstat (limited to 'src/iconview/qiconview.cpp')
-rw-r--r--src/iconview/qiconview.cpp51
1 files changed, 48 insertions, 3 deletions
diff --git a/src/iconview/qiconview.cpp b/src/iconview/qiconview.cpp
index ee4a0fe36..c1ba1ea34 100644
--- a/src/iconview/qiconview.cpp
+++ b/src/iconview/qiconview.cpp
@@ -214,6 +214,7 @@ public:
TQIconViewItem *currentItem, *tmpCurrentItem, *highlightedItem,
*startDragItem, *pressedItem, *selectAnchor, *renamingItem;
TQRect *rubber;
+ TQPixmap *backBuffer;
TQTimer *scrollTimer, *adjustTimer, *updateTimer, *inputTimer,
*fullRedrawTimer;
int rastX, rastY, spacing;
@@ -2800,6 +2801,7 @@ TQIconView::TQIconView( TQWidget *parent, const char *name, WFlags f )
d->currentItem = 0;
d->highlightedItem = 0;
d->rubber = 0;
+ d->backBuffer = 0;
d->scrollTimer = 0;
d->startDragItem = 0;
d->tmpCurrentItem = 0;
@@ -2953,6 +2955,8 @@ TQIconView::~TQIconView()
delete item;
item = tmp;
}
+ delete d->backBuffer;
+ d->backBuffer = 0;
delete d->fm;
d->fm = 0;
#ifndef QT_NO_TOOLTIP
@@ -4973,6 +4977,47 @@ void TQIconView::contentsDropEvent( TQDropEvent *e )
#endif
/*!
+ This function grabs all paintevents that otherwise would have been
+ processed by the TQScrollView::viewportPaintEvent(). Here we use a
+ doublebuffer to reduce 'on-paint' flickering on TQIconView
+ (and of course its children).
+
+ \sa TQScrollView::viewportPaintEvent(), TQIconView::drawContents()
+*/
+
+void TQIconView::bufferedPaintEvent( TQPaintEvent* pe )
+{
+ TQWidget* vp = viewport();
+ TQRect 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 TQPixmap(vp->size());
+ if ( d->backBuffer->size() != vp->size() ) {
+ // Resize function (with hysteresis). 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 );
+ }
+
+ TQPainter p;
+ p.begin(d->backBuffer, vp);
+ drawContentsOffset(&p, contentsX(), contentsY(), ex, ey, ew, eh);
+ p.end();
+ bitBlt(vp, r.x(), r.y(), d->backBuffer, r.x(), r.y(), ew, eh);
+}
+
+/*!
\reimp
*/
@@ -5755,11 +5800,11 @@ bool TQIconView::eventFilter( TQObject * o, TQEvent * e )
if ( d->dragging ) {
if ( !d->rubber )
drawDragShapes( d->oldDragPos );
- }
- viewportPaintEvent( (TQPaintEvent*)e );
- if ( d->dragging ) {
+ viewportPaintEvent( (TQPaintEvent*)e );
if ( !d->rubber )
drawDragShapes( d->oldDragPos );
+ } else {
+ bufferedPaintEvent( (TQPaintEvent*)e );
}
}
return TRUE;