From: Rafael Fernández López Date: Thu, 28 Jun 2007 23:29:47 +0000 (+0000) Subject: ++optimization X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/71680def7f7c9b3e59d4bc93816b87e6131d35da ++optimization svn path=/trunk/KDE/kdebase/apps/; revision=681449 --- diff --git a/src/klistview.cpp b/src/klistview.cpp index fa78de638..403e984a2 100644 --- a/src/klistview.cpp +++ b/src/klistview.cpp @@ -409,6 +409,30 @@ void KListView::Private::drawDraggedItems(QPainter *painter) } } +void KListView::Private::drawDraggedItems() +{ + int dx; + int dy; + QRect rectToUpdate; + QRect currentRect; + foreach (const QModelIndex &index, listView->selectionModel()->selectedIndexes()) + { + dx = mousePosition.x() - initialPressPosition.x() + listView->horizontalOffset(); + dy = mousePosition.y() - initialPressPosition.y() + listView->verticalOffset(); + + currentRect = visualRect(index); + currentRect.adjust(dx, dy, dx, dy); + + rectToUpdate = rectToUpdate.united(currentRect); + } + + listView->viewport()->update(lastDraggedItemsRect); + + lastDraggedItemsRect = rectToUpdate; + + listView->viewport()->update(rectToUpdate); +} + //============================================================================== @@ -890,6 +914,8 @@ void KListView::dragMoveEvent(QDragMoveEvent *event) } d->dragLeftViewport = false; + + d->drawDraggedItems(); } void KListView::dragLeaveEvent(QDragLeaveEvent *event) diff --git a/src/klistview_p.h b/src/klistview_p.h index 2980e98d6..11c0c3a6e 100644 --- a/src/klistview_p.h +++ b/src/klistview_p.h @@ -99,10 +99,16 @@ public: void updateScrollbars(); /** - * This method will draw dragged items + * This method will draw dragged items in the painting operation */ void drawDraggedItems(QPainter *painter); + /** + * This method will determine which rect needs to be updated because of a + * dragging operation + */ + void drawDraggedItems(); + // Attributes @@ -121,6 +127,7 @@ public: bool isDragging; bool dragLeftViewport; QModelIndex hovered; + QString hoveredCategory; QPoint initialPressPosition; QPoint mousePosition; QItemSelection lastSelection; @@ -135,7 +142,7 @@ public: QHash categoriesPosition; QStringList categories; QModelIndexList intersectedIndexes; - QString hoveredCategory; + QRect lastDraggedItemsRect; // Attributes for speed reasons KSortFilterProxyModel *proxyModel;