summaryrefslogtreecommitdiff
path: root/dw
diff options
context:
space:
mode:
authorJorge Arellano Cid <jcid@dillo.org>2011-07-29 15:45:45 -0400
committerJorge Arellano Cid <jcid@dillo.org>2011-07-29 15:45:45 -0400
commitccd39b8804cba58206d254944c8e7c3bb8e02cdf (patch)
tree6ac6da3e820e51dfa5a7aa10eff8bd6edc099c0b /dw
parentde3a234a12734101bd35b2f64302b65a19797ed0 (diff)
avoid double draw after scrollIdle()
After going back or forward to any page, there were two redraws: one from the origin and another from the scroll position. This patch avoids flicker, and makes rendering 100% faster in this case.
Diffstat (limited to 'dw')
-rw-r--r--dw/layout.cc12
-rw-r--r--dw/layout.hh2
2 files changed, 12 insertions, 2 deletions
diff --git a/dw/layout.cc b/dw/layout.cc
index cf19df37..170ec20e 100644
--- a/dw/layout.cc
+++ b/dw/layout.cc
@@ -194,6 +194,7 @@ Layout::Layout (Platform *platform)
canvasWidth = canvasAscent = canvasDescent = 0;
usesViewport = false;
+ drawAfterScrollReq = false;
scrollX = scrollY = 0;
viewportWidth = viewportHeight = 0;
hScrollbarThickness = vScrollbarThickness = 0;
@@ -456,6 +457,11 @@ void Layout::scrollIdle ()
if (xChanged || yChanged) {
adjustScrollPos ();
view->scrollTo (scrollX, scrollY);
+ if (drawAfterScrollReq) {
+ drawAfterScrollReq = false;
+ view->queueDrawTotal ();
+ MSG("Layout::scrollIdle: view->queueDrawTotal()\n");
+ }
}
scrollIdleId = -1;
@@ -503,7 +509,11 @@ void Layout::draw (View *view, Rectangle *area)
{
Rectangle widgetArea, intersection, widgetDrawArea;
- if (topLevel) {
+ if (scrollIdleId != -1) {
+ /* scroll is pending, defer draw until after scrollIdle() */
+ drawAfterScrollReq = true;
+
+ } else if (topLevel) {
/* Draw the top level widget. */
widgetArea.x = topLevel->allocation.x;
widgetArea.y = topLevel->allocation.y;
diff --git a/dw/layout.hh b/dw/layout.hh
index 98aa4fc1..d08eb363 100644
--- a/dw/layout.hh
+++ b/dw/layout.hh
@@ -138,7 +138,7 @@ private:
style::Cursor cursor;
int canvasWidth, canvasAscent, canvasDescent;
- bool usesViewport;
+ bool usesViewport, drawAfterScrollReq;
int scrollX, scrollY, viewportWidth, viewportHeight;
bool canvasHeightGreater;
int hScrollbarThickness, vScrollbarThickness;