Tor Arne Vestbø <tavestbo@trolltech.com>
authorhausmann@webkit.org <hausmann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Apr 2008 08:53:27 +0000 (08:53 +0000)
committerhausmann@webkit.org <hausmann@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Apr 2008 08:53:27 +0000 (08:53 +0000)
Make mouse wheel events over scrollbars behave the same as in Qt, i.e. both
horizontal and vertical wheel events will scroll the view in the orientation
of the scrollbar underneath the cursor.

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

WebCore/ChangeLog
WebCore/platform/qt/ScrollViewQt.cpp

index 58f8cd6..b23de60 100644 (file)
@@ -1,3 +1,15 @@
+2008-04-24  Tor Arne Vestbø  <tavestbo@trolltech.com>
+
+        Reviewed by Simon.
+
+        Make mouse wheel events over scrollbars behave the same as in Qt, i.e. both
+        horizontal and vertical wheel events will scroll the view in the orientation
+        of the scrollbar underneath the cursor.
+
+        * platform/qt/ScrollViewQt.cpp:
+        (WebCore::ScrollView::paint):
+        (WebCore::ScrollView::wheelEvent):
+
 2008-04-23  Jon Honeycutt  <jhoneycutt@apple.com>
 
         Reviewed by Brady.
index 6cd92bf..bf032c5 100644 (file)
@@ -687,15 +687,31 @@ void ScrollView::paint(GraphicsContext* context, const IntRect& rect)
 
 void ScrollView::wheelEvent(PlatformWheelEvent& e)
 {
+    float deltaX = e.deltaX();
+    float deltaY = e.deltaY();
+
+    PlatformMouseEvent mouseEvent(e.pos(), e.globalPos(), NoButton, MouseEventScroll,
+            0, e.shiftKey(), e.ctrlKey(), e.altKey(), e.metaKey(), 0);
+    PlatformScrollbar* scrollBar = scrollbarUnderMouse(mouseEvent);
+
+    if (scrollBar && scrollBar == verticalScrollBar()) {
+        deltaY = (deltaY == 0 ? deltaX : deltaY);
+        deltaX = 0;
+    } else if (scrollBar && scrollBar == horizontalScrollBar()) {
+        deltaX = (deltaX == 0 ? deltaY : deltaX);
+        deltaY = 0;
+    }
+
     // Determine how much we want to scroll.  If we can move at all, we will accept the event.
     IntSize maxScrollDelta = maximumScroll();
-    if ((e.deltaX() < 0 && maxScrollDelta.width() > 0) ||
-        (e.deltaX() > 0 && scrollOffset().width() > 0) ||
-        (e.deltaY() < 0 && maxScrollDelta.height() > 0) ||
-        (e.deltaY() > 0 && scrollOffset().height() > 0))
-        e.accept();
+    if ((deltaX < 0 && maxScrollDelta.width() > 0) ||
+        (deltaX > 0 && scrollOffset().width() > 0) ||
+        (deltaY < 0 && maxScrollDelta.height() > 0) ||
+        (deltaY > 0 && scrollOffset().height() > 0)) {
 
-    scrollBy(-e.deltaX() * LINE_STEP, -e.deltaY() * LINE_STEP);
+        e.accept();
+        scrollBy(-deltaX * LINE_STEP, -deltaY * LINE_STEP);
+    }
 }
 
 bool ScrollView::scroll(ScrollDirection direction, ScrollGranularity granularity)