<rdar://problem/9414874> Layout unnecessarily interrupts smooth scrolling at msnbc.com
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 May 2011 00:45:30 +0000 (00:45 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 12 May 2011 00:45:30 +0000 (00:45 +0000)
https://bugs.webkit.org/show_bug.cgi?id=60677

Reviewed by Darin Adler.

* platform/ScrollView.cpp:
(WebCore::ScrollView::updateScrollbars): Only perform an immediate scroll, aborting any running
animation, if the new scroll offset computed here is different from the current scroll offset.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@86293 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/ScrollView.cpp

index 4143e5a..d02cdb8 100644 (file)
@@ -1,3 +1,14 @@
+2011-05-11  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Darin Adler.
+
+        <rdar://problem/9414874> Layout unnecessarily interrupts smooth scrolling at msnbc.com
+        https://bugs.webkit.org/show_bug.cgi?id=60677
+
+        * platform/ScrollView.cpp:
+        (WebCore::ScrollView::updateScrollbars): Only perform an immediate scroll, aborting any running
+        animation, if the new scroll offset computed here is different from the current scroll offset.
+
 2011-05-11  Kent Tamura  <tkent@chromium.org>
 
         Reviewed by Dimitri Glazkov.
index 14add0c..95c18c1 100644 (file)
@@ -536,9 +536,6 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
 
     m_inUpdateScrollbars = true;
 
-    IntPoint scrollPoint = adjustScrollPositionWithinRange(IntPoint(desiredOffset));
-    IntSize scroll(scrollPoint.x(), scrollPoint.y());
-
     if (m_horizontalScrollbar) {
         int clientWidth = visibleWidth();
         m_horizontalScrollbar->setEnabled(contentsWidth() > clientWidth);
@@ -586,7 +583,9 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
         updateScrollCorner();
     }
 
-    ScrollableArea::scrollToOffsetWithoutAnimation(FloatPoint(scroll.width() + m_scrollOrigin.x(), scroll.height() + m_scrollOrigin.y()));
+    IntPoint scrollPoint = adjustScrollPositionWithinRange(IntPoint(desiredOffset)) + IntSize(m_scrollOrigin.x(), m_scrollOrigin.y());
+    if (scrollPoint != scrollPosition())
+        ScrollableArea::scrollToOffsetWithoutAnimation(scrollPoint);
 
     // Make sure the scrollbar offsets are up to date.
     if (m_horizontalScrollbar)