summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@qt.io>2023-09-11 16:59:36 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-03-09 00:10:22 +0000
commitd09dd5b945ba2b836cadd8d943bdb5a757a2f8fd (patch)
tree51798d717a140012743bc2823637bd5511ca7459
parent99766ce294497359dece1b5574d84cc079a95ec5 (diff)
Avoid QRubberBand leaving artefacts in QListView
On hidpi screens, the painted edges of the rubberband can extend beyond the selection rect because of scaling. Extend the area to be updated by 2x frame width, when the rubberband changes. Fixes: QTBUG-113432 Pick-to: 6.5 Change-Id: Ie7aec1fefdc3fbf71c63952b693f462697adf849 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> (cherry picked from commit a5a6b657a799cbed4567f60342714df52f9c8891) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> (cherry picked from commit bcc581761451b4464d5a81f83d8d2afb07ca9512)
-rw-r--r--src/widgets/itemviews/qlistview.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp
index bfa28c6e51..3a526d0878 100644
--- a/src/widgets/itemviews/qlistview.cpp
+++ b/src/widgets/itemviews/qlistview.cpp
@@ -755,7 +755,10 @@ void QListView::mouseMoveEvent(QMouseEvent *e)
&& d->selectionMode != NoSelection) {
QRect rect(d->pressedPosition, e->position().toPoint() + QPoint(horizontalOffset(), verticalOffset()));
rect = rect.normalized();
- d->viewport->update(d->mapToViewport(rect.united(d->elasticBand)));
+ const int margin = 2 * style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+ const QRect viewPortRect = rect.united(d->elasticBand)
+ .adjusted(-margin, -margin, margin, margin);
+ d->viewport->update(d->mapToViewport(viewPortRect));
d->elasticBand = rect;
}
}
@@ -769,7 +772,9 @@ void QListView::mouseReleaseEvent(QMouseEvent *e)
QAbstractItemView::mouseReleaseEvent(e);
// #### move this implementation into a dynamic class
if (d->showElasticBand && d->elasticBand.isValid()) {
- d->viewport->update(d->mapToViewport(d->elasticBand));
+ const int margin = 2 * style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+ const QRect viewPortRect = d->elasticBand.adjusted(-margin, -margin, margin, margin);
+ d->viewport->update(d->mapToViewport(viewPortRect));
d->elasticBand = QRect();
}
}