]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/klistview.cpp
Improve speed when we have lots of selections that are partially outside the viewport.
[dolphin.git] / src / klistview.cpp
index 526fb8dfcdf94bca5201f63eb0b4be1e45aef825..e3ea89e4163a32158ccc028f9c5d438db1111d1f 100644 (file)
@@ -169,16 +169,14 @@ QRect KListView::Private::visualRectInViewport(const QModelIndex &index) const
     retRect.setLeft(retRect.left() + column * listView->spacing() +
                     column * itemWidth);
 
-    float rows;
-    int rowsInt;
     foreach (const QString &category, categories)
     {
         if (category == curCategory)
             break;
 
-        rows = (float) ((float) categoriesIndexes[category].count() /
-                        (float) elementsPerRow);
-        rowsInt = categoriesIndexes[category].count() / elementsPerRow;
+        float rows = (float) ((float) categoriesIndexes[category].count() /
+                              (float) elementsPerRow);
+        int rowsInt = categoriesIndexes[category].count() / elementsPerRow;
 
         if (rows - trunc(rows)) rowsInt++;
 
@@ -226,16 +224,14 @@ QRect KListView::Private::visualCategoryRectInViewport(const QString &category)
     if (!elementsPerRow)
         elementsPerRow++;
 
-    float rows;
-    int rowsInt;
     foreach (const QString &itCategory, categories)
     {
         if (itCategory == category)
             break;
 
-        rows = (float) ((float) categoriesIndexes[itCategory].count() /
-                        (float) elementsPerRow);
-        rowsInt = categoriesIndexes[itCategory].count() / elementsPerRow;
+        float rows = (float) ((float) categoriesIndexes[itCategory].count() /
+                              (float) elementsPerRow);
+        int rowsInt = categoriesIndexes[itCategory].count() / elementsPerRow;
 
         if (rows - trunc(rows)) rowsInt++;
 
@@ -395,35 +391,37 @@ void KListView::Private::drawDraggedItems(QPainter *painter)
 {
     QStyleOptionViewItemV3 option = listView->viewOptions();
     option.state &= ~QStyle::State_MouseOver;
-    int dx;
-    int dy;
     foreach (const QModelIndex &index, listView->selectionModel()->selectedIndexes())
     {
-        dx = mousePosition.x() - initialPressPosition.x() + listView->horizontalOffset();
-        dy = mousePosition.y() - initialPressPosition.y() + listView->verticalOffset();
+        const int dx = mousePosition.x() - initialPressPosition.x() + listView->horizontalOffset();
+        const int dy = mousePosition.y() - initialPressPosition.y() + listView->verticalOffset();
 
         option.rect = visualRect(index);
         option.rect.adjust(dx, dy, dx, dy);
 
-        listView->itemDelegate(index)->paint(painter, option, index);
+        if (option.rect.intersects(listView->viewport()->rect()))
+        {
+            listView->itemDelegate(index)->paint(painter, option, index);
+        }
     }
 }
 
 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();
+        int dx = mousePosition.x() - initialPressPosition.x() + listView->horizontalOffset();
+        int dy = mousePosition.y() - initialPressPosition.y() + listView->verticalOffset();
 
         currentRect = visualRect(index);
         currentRect.adjust(dx, dy, dx, dy);
 
-        rectToUpdate = rectToUpdate.united(currentRect);
+        if (currentRect.intersects(listView->viewport()->rect()))
+        {
+            rectToUpdate = rectToUpdate.united(currentRect);
+        }
     }
 
     listView->viewport()->update(lastDraggedItemsRect);
@@ -993,6 +991,8 @@ void KListView::rowsInsertedArtifficial(const QModelIndex &parent,
                                         int start,
                                         int end)
 {
+    Q_UNUSED(parent);
+
     d->lastSelection = QItemSelection();
     d->elementsInfo.clear();
     d->elementsPosition.clear();