]> cloud.milkyroute.net Git - dolphin.git/commitdiff
++optimization
authorRafael Fernández López <ereslibre@kde.org>
Thu, 28 Jun 2007 23:29:47 +0000 (23:29 +0000)
committerRafael Fernández López <ereslibre@kde.org>
Thu, 28 Jun 2007 23:29:47 +0000 (23:29 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=681449

src/klistview.cpp
src/klistview_p.h

index fa78de638e3c4cb6dbc02b44ab954a425912a27d..403e984a295ce4b96d27392fa23d18d4367df30e 100644 (file)
@@ -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)
index 2980e98d66cd4c8dd87a992dc10a834de2eb13d9..11c0c3a6e83e425822ac1bb86519f4665dbe1d20 100644 (file)
@@ -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<QString, QRect> categoriesPosition;
     QStringList categories;
     QModelIndexList intersectedIndexes;
-    QString hoveredCategory;
+    QRect lastDraggedItemsRect;
 
     // Attributes for speed reasons
     KSortFilterProxyModel *proxyModel;