blob: 8e0353b8a81adc13882617f3b176cca00a1e5571 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
qt-bugs@ issue : N227210
Trolltech task ID : 228764
bugs.kde.org number : 167739
applied: no
author: Germain Garand <germain@ebooksfrance.org>
QWidgetPrivate::scrollRect doesn't account for it's rect argument
but rather examine the whole widget surface when pondering if
it can apply accelerated blitting, resulting in unnecessarily slow
and non-blitting QWidget::scroll calls.
--- a/src/gui/painting/qbackingstore.cpp
+++ b/src/gui/painting/qbackingstore.cpp
@@ -517,7 +517,8 @@ void QWidgetPrivate::scrollRect(const QR
}
bool overlapped = false;
- bool accelerateScroll = accelEnv && isOpaque() && !(overlapped = isOverlapped(data.crect));
+ QRect cRect = clipRect();
+ bool accelerateScroll = accelEnv && isOpaque() && !(overlapped = isOverlapped(rect & cRect));
#if defined(Q_WS_QWS)
QWSWindowSurface *surface;
@@ -552,13 +553,13 @@ void QWidgetPrivate::scrollRect(const QR
#ifdef Q_WS_QWS
QWSWindowSurface *surface = static_cast<QWSWindowSurface*>(wbs->windowSurface);
const QRegion clip = surface->clipRegion().translated(-toplevelOffset)
- & clipRect();
+ & cRect;
const QRect scrollRect = rect & clip.boundingRect();
const QRect destRect = scrollRect.translated(dx, dy)
& scrollRect
& clip.boundingRect();
#else
- QRect scrollRect = rect & clipRect();
+ QRect scrollRect = rect & cRect;
QRect destRect = scrollRect.isValid() ? scrollRect.translated(dx,dy).intersected(scrollRect) : QRect();
|