Take scroll position into account when painting drag pixmap.
authorStephen Kelly <stephen.kelly@kdab.com>
Thu, 9 Aug 2012 12:49:38 +0000 (14:49 +0200)
committerQt by Nokia <qt-info@nokia.com>
Fri, 10 Aug 2012 19:59:47 +0000 (21:59 +0200)
Task-number: QTBUG-26793

Change-Id: Ic19cb6581cd5838d26713998e152772a5d12da4f
Reviewed-by: David Faure <faure@kde.org>
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
src/widgets/itemviews/qlistview.cpp
tests/auto/widgets/itemviews/qlistview/qlistview.pro
tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp

index 82792d5..14c6172 100644 (file)
@@ -654,7 +654,7 @@ QItemViewPaintPairs QListViewPrivate::draggablePaintPairs(const QModelIndexList
     QRect &rect = *r;
     const QRect viewportRect = viewport->rect();
     QItemViewPaintPairs ret;
-    const QSet<QModelIndex> visibleIndexes = intersectingSet(viewportRect).toList().toSet();
+    const QSet<QModelIndex> visibleIndexes = intersectingSet(viewportRect.translated(q->horizontalOffset(), q->verticalOffset())).toList().toSet();
     for (int i = 0; i < indexes.count(); ++i) {
         const QModelIndex &index = indexes.at(i);
         if (visibleIndexes.contains(index)) {
index 6820370..1fb5b7f 100644 (file)
@@ -1,6 +1,6 @@
 CONFIG += testcase
 TARGET = tst_qlistview
-QT += widgets gui-private testlib
+QT += widgets gui-private widgets-private core-private testlib
 SOURCES  += tst_qlistview.cpp
 win32:!wince*: LIBS += -luser32
 DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
index a9169b0..507a5f3 100644 (file)
@@ -45,6 +45,7 @@
 #include <qabstractitemmodel.h>
 #include <qapplication.h>
 #include <qlistview.h>
+#include <private/qlistview_p.h>
 #include <qlistwidget.h>
 #include <qitemdelegate.h>
 #include <qstandarditemmodel.h>
@@ -133,6 +134,8 @@ private slots:
     void taskQTBUG_12308_wrongFlowLayout();
     void taskQTBUG_21115_scrollToAndHiddenItems_data();
     void taskQTBUG_21115_scrollToAndHiddenItems();
+    void draggablePaintPairs_data();
+    void draggablePaintPairs();
 };
 
 // Testing get/set functions
@@ -2115,6 +2118,44 @@ void tst_QListView::taskQTBUG_21115_scrollToAndHiddenItems()
     QCOMPARE(lv.visualRect(index), firstItemRect);
 }
 
+void tst_QListView::draggablePaintPairs_data()
+{
+    QTest::addColumn<int>("row");
+
+    for (int row = 0; row < 30; ++row)
+      QTest::newRow("row-" + QByteArray::number(row)) << row;
+}
+
+void tst_QListView::draggablePaintPairs()
+{
+    QFETCH(int, row);
+
+    QListView view;
+
+    QStringListModel model;
+    QStringList list;
+    for (int i = 0; i < 30; i++)
+        list << QString::number(i);
+    model.setStringList(list);
+    view.setModel(&model);
+
+    view.show();
+    QTest::qWaitForWindowExposed(&view);
+
+    QModelIndex expectedIndex = model.index(row, 0);
+    QListViewPrivate *privateClass = static_cast<QListViewPrivate *>(QListViewPrivate::get(&view));
+    QRect rect;
+    QModelIndexList indexList;
+    indexList << expectedIndex;
+    view.scrollTo(expectedIndex);
+    QItemViewPaintPairs pairs = privateClass->draggablePaintPairs(indexList, &rect);
+    QCOMPARE(indexList.size(), pairs.size());
+    foreach (const QItemViewPaintPair pair, pairs) {
+        QCOMPARE(rect, pair.first);
+        QCOMPARE(expectedIndex, pair.second);
+    }
+}
+
 
 QTEST_MAIN(tst_QListView)
 #include "tst_qlistview.moc"