summaryrefslogtreecommitdiff
path: root/debian/patches/0248-fix-qwidget-scroll-slowness.diff
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();