Title: [139117] branches/chromium/1364
Revision
139117
Author
ael...@chromium.org
Date
2013-01-08 14:50:23 -0800 (Tue, 08 Jan 2013)

Log Message

Merge 139022
> Divide gesture scroll delta by scale factor
> https://bugs.webkit.org/show_bug.cgi?id=106263
> 
> Reviewed by Adam Barth.
> 
> Gesture scroll deltas were not being adjusted by the frame's scale
> factors, resulting in overly fast main-thread scrolling when zoomed
> in.
> 
> New test: fast/events/touch/gesture/touch-gesture-scroll-div-scaled.html
> 
> * page/EventHandler.cpp:
> (WebCore::EventHandler::handleGestureScrollCore):
> 

TBR=ael...@chromium.org

BUG=166628
Review URL: https://codereview.chromium.org/11826009

Modified Paths

Added Paths

Diff

Copied: branches/chromium/1364/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-scaled-expected.txt (from rev 139022, trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-scaled-expected.txt) (0 => 139117)


--- branches/chromium/1364/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-scaled-expected.txt	                        (rev 0)
+++ branches/chromium/1364/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-scaled-expected.txt	2013-01-08 22:50:23 UTC (rev 139117)
@@ -0,0 +1,10 @@
+This tests gesture event scrolling of an overflow div with page scale.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+gesture events not implemented on this platform or gesture event scrolling of a document is broken
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Copied: branches/chromium/1364/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-scaled.html (from rev 139022, trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-scaled.html) (0 => 139117)


--- branches/chromium/1364/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-scaled.html	                        (rev 0)
+++ branches/chromium/1364/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-scaled.html	2013-01-08 22:50:23 UTC (rev 139117)
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+<script src=""
+<style type="text/css">
+#touchtarget {
+  width: 100px;
+  height: 100px;
+  position: relative;
+  background: white;
+}
+
+::-webkit-scrollbar {
+    width: 0px;
+    height: 0px;
+}
+
+#movingbox {
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  word-wrap: break-word;
+  overflow-y: scroll;
+  overflow-x: scroll;
+  display: block;
+}
+
+#greenbox {
+  width: 100px;
+  height: 100px;
+  background: green;
+  padding: 0px;
+  margin: 0px;
+}
+
+#redbox {
+  width: 100px;
+  height: 100px;
+  background: red;
+  padding: 0px;
+  margin: 0px;
+}
+
+td {
+  padding: 0px;
+}
+</style>
+</head>
+<body style="margin:0" _onload_="runTest();">
+<div id="touchtarget">
+  <div id="movingbox">
+    <table border="0" cellspacing="0px" id="tablefoo">
+      <tr>
+        <td><div id="redbox"></div></td>
+        <td><div id="greenbox"></div></td>
+      </tr>
+      <tr>
+        <td><div id="greenbox"></div></td>
+        <td><div id="greenbox"></div></td>
+      </tr>
+    </table>
+  </div>
+</div>
+
+<p id="description"></p>
+<div id="console"></div>
+<script type="text/_javascript_">
+
+var movingdiv;
+var expectedGesturesTotal = 2;
+var gesturesOccurred = 0;
+var scrollAmountX = ['45', '45'];
+var scrollAmountY = ['0', '48'];
+var wheelEventsOccurred = 0;
+var expectedWheelEventsOccurred = ['1', '1'];
+var scrollEventsOccurred = 0;
+var expectedScrollEventsOccurred = '1';
+var scrolledElement = 'movingdiv'
+
+function firstGestureScroll()
+{
+    debug("first gesture");
+    eventSender.gestureScrollBegin(95, 12);
+    eventSender.gestureScrollUpdate(-90, 0);
+    eventSender.gestureScrollEnd(0, 0);
+
+    // Wait for layout.
+    checkScrollOffset();
+}
+
+ function secondGestureScroll()
+ {
+     debug("second gesture");
+     eventSender.gestureScrollBegin(12, 97);
+     eventSender.gestureScrollUpdate(0, -95);
+     eventSender.gestureScrollEnd(0, 0);
+
+     // Wait for layout.
+     checkScrollOffset();
+ }
+
+if (window.testRunner)
+    testRunner.waitUntilDone();
+
+function runTest()
+{
+    var scaleFactor = 2.0;
+    var scaleOffset = 0;
+    if (window.internals) {
+       window.internals.setPageScaleFactor(scaleFactor, scaleOffset, scaleOffset);
+    }
+
+    movingdiv = document.getElementById('movingbox');
+    movingdiv.addEventListener("scroll", recordScroll);
+    window.addEventListener("mousewheel", recordWheel);
+
+    if (window.eventSender) {
+        description('This tests gesture event scrolling of an overflow div with page scale.');
+
+        if (checkTestDependencies())
+            firstGestureScroll();
+        else
+            exitIfNecessary();
+    } else {
+        debug("This test requires DumpRenderTree.  Touch scroll the red rect to log.");
+    }
+}
+</script>
+</body>
+</html>

Copied: branches/chromium/1364/LayoutTests/platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-div-scaled-expected.txt (from rev 139022, trunk/LayoutTests/platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-div-scaled-expected.txt) (0 => 139117)


--- branches/chromium/1364/LayoutTests/platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-div-scaled-expected.txt	                        (rev 0)
+++ branches/chromium/1364/LayoutTests/platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-div-scaled-expected.txt	2013-01-08 22:50:23 UTC (rev 139117)
@@ -0,0 +1,21 @@
+This tests gesture event scrolling of an overflow div with page scale.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+first gesture
+wheel event 0+> [object HTMLDivElement]
+PASS movingdiv.scrollTop is 0
+PASS movingdiv.scrollLeft is 45
+PASS wheelEventsOccurred is 1
+second gesture
+wheel event 0+> [object HTMLDivElement]
+PASS movingdiv.scrollTop is 48
+PASS movingdiv.scrollLeft is 45
+PASS wheelEventsOccurred is 1
+scroll event 0+> [object HTMLDivElement]
+PASS scrollEventsOccurred is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Modified: branches/chromium/1364/Source/WebCore/page/EventHandler.cpp (139116 => 139117)


--- branches/chromium/1364/Source/WebCore/page/EventHandler.cpp	2013-01-08 22:50:14 UTC (rev 139116)
+++ branches/chromium/1364/Source/WebCore/page/EventHandler.cpp	2013-01-08 22:50:23 UTC (rev 139117)
@@ -2593,10 +2593,13 @@
 bool EventHandler::handleGestureScrollCore(const PlatformGestureEvent& gestureEvent, PlatformWheelEventGranularity granularity, bool latchedWheel)
 {
     const float tickDivisor = (float)WheelEvent::tickMultiplier;
+    const float scaleFactor = m_frame->pageZoomFactor() * m_frame->frameScaleFactor();
+    float scaledDeltaX = gestureEvent.deltaX() / scaleFactor;
+    float scaledDeltaY = gestureEvent.deltaY() / scaleFactor;
     IntPoint point(gestureEvent.position().x(), gestureEvent.position().y());
     IntPoint globalPoint(gestureEvent.globalPosition().x(), gestureEvent.globalPosition().y());
     PlatformWheelEvent syntheticWheelEvent(point, globalPoint,
-        gestureEvent.deltaX(), gestureEvent.deltaY(), gestureEvent.deltaX() / tickDivisor, gestureEvent.deltaY() / tickDivisor,
+        scaledDeltaX, scaledDeltaY, scaledDeltaX / tickDivisor, scaledDeltaY / tickDivisor,
         granularity,
         gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey());
     syntheticWheelEvent.setUseLatchedEventNode(latchedWheel);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to