[chromium] synthesize wheel events for fling on main thread
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Mar 2012 14:51:06 +0000 (14:51 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Mar 2012 14:51:06 +0000 (14:51 +0000)
https://bugs.webkit.org/show_bug.cgi?id=81458

Source/WebKit/chromium:

Support track pad fling by generating a sequence of wheel events.

Patch by Robert Kroeger <rjkroege@chromium.org> on 2012-03-19
Reviewed by James Robinson.

* src/WebViewImpl.cpp:
(WebKit::WebViewImpl::WebViewImpl):
(WebKit::WebViewImpl::scrollBy): Call-back from PlatformGestureCurve to dispatch wheel event.
(WebKit):
(WebKit::WebViewImpl::gestureEvent): Handle GestureFlingStart and GestureFlingCancel.
(WebKit::WebViewImpl::updateAnimations): Requests a PlatformGestureCurve to animate forward.
(WebKit::WebViewImpl::didCommitLoad): Halt flings on navigations.
* src/WebViewImpl.h:
(WebCore):
(WebViewImpl):

Tools:

Added the ability to dispatch GestureFlingStart and GestureFlingCancel from EventSender.

Patch by Robert Kroeger <rjkroege@chromium.org> on 2012-03-19
Reviewed by James Robinson.

* DumpRenderTree/chromium/EventSender.cpp:
(EventSender::EventSender):
(EventSender::gestureFlingCancel):
(EventSender::gestureFlingStart):
* DumpRenderTree/chromium/EventSender.h:
(EventSender):

LayoutTests:

Show that the GestureFlingStart and GestureFlingEnd events are handled and
connect up with WebViewImpl

Patch by Robert Kroeger <rjkroege@chromium.org> on 2012-03-19
Reviewed by James Robinson.

* fast/events/touch/gesture/pad-gesture-cancel-expected.txt: Added.
* fast/events/touch/gesture/pad-gesture-cancel.html: Added.
* fast/events/touch/gesture/pad-gesture-cancel.js: Added.
(recordWheelEvent):
(if):
* fast/events/touch/gesture/pad-gesture-fling-expected.txt: Added.
* fast/events/touch/gesture/pad-gesture-fling.html: Added.
* fast/events/touch/gesture/pad-gesture-fling.js: Added.
(recordWheelEvent):
(if):
* platform/chromium/fast/events/touch/gesture/pad-gesture-cancel-expected.txt: Added.
* platform/chromium/fast/events/touch/gesture/pad-gesture-fling-expected.txt: Added.

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

15 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/events/touch/gesture/pad-gesture-cancel-expected.txt [new file with mode: 0644]
LayoutTests/fast/events/touch/gesture/pad-gesture-cancel.html [new file with mode: 0644]
LayoutTests/fast/events/touch/gesture/pad-gesture-cancel.js [new file with mode: 0644]
LayoutTests/fast/events/touch/gesture/pad-gesture-fling-expected.txt [new file with mode: 0644]
LayoutTests/fast/events/touch/gesture/pad-gesture-fling.html [new file with mode: 0644]
LayoutTests/fast/events/touch/gesture/pad-gesture-fling.js [new file with mode: 0644]
LayoutTests/platform/chromium/fast/events/touch/gesture/pad-gesture-cancel-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium/fast/events/touch/gesture/pad-gesture-fling-expected.txt [new file with mode: 0644]
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/src/WebViewImpl.cpp
Source/WebKit/chromium/src/WebViewImpl.h
Tools/ChangeLog
Tools/DumpRenderTree/chromium/EventSender.cpp
Tools/DumpRenderTree/chromium/EventSender.h

index 113828deae7b69433ed43f0ada24df2bb84220ae..97fd6ea3dd1b43a87fe1620f9df9fef89191765b 100644 (file)
@@ -1,3 +1,26 @@
+2012-03-19  Robert Kroeger  <rjkroege@chromium.org>
+
+        [chromium] synthesize wheel events for fling on main thread
+        https://bugs.webkit.org/show_bug.cgi?id=81458
+
+        Show that the GestureFlingStart and GestureFlingEnd events are handled and
+        connect up with WebViewImpl
+
+        Reviewed by James Robinson.
+
+        * fast/events/touch/gesture/pad-gesture-cancel-expected.txt: Added.
+        * fast/events/touch/gesture/pad-gesture-cancel.html: Added.
+        * fast/events/touch/gesture/pad-gesture-cancel.js: Added.
+        (recordWheelEvent):
+        (if):
+        * fast/events/touch/gesture/pad-gesture-fling-expected.txt: Added.
+        * fast/events/touch/gesture/pad-gesture-fling.html: Added.
+        * fast/events/touch/gesture/pad-gesture-fling.js: Added.
+        (recordWheelEvent):
+        (if):
+        * platform/chromium/fast/events/touch/gesture/pad-gesture-cancel-expected.txt: Added.
+        * platform/chromium/fast/events/touch/gesture/pad-gesture-fling-expected.txt: Added.
+
 2012-03-19  Ádám Kallai  <kadam@inf.u-szeged.hu>
 
         [Qt] Unreviewed. Add new platform specific expectation after r110667.
diff --git a/LayoutTests/fast/events/touch/gesture/pad-gesture-cancel-expected.txt b/LayoutTests/fast/events/touch/gesture/pad-gesture-cancel-expected.txt
new file mode 100644 (file)
index 0000000..ca3d365
--- /dev/null
@@ -0,0 +1,10 @@
+Tests basic use of GestureFlingCancel
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+FAIL actualWheelEventsOccurred should be 1. Was 0.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/events/touch/gesture/pad-gesture-cancel.html b/LayoutTests/fast/events/touch/gesture/pad-gesture-cancel.html
new file mode 100644 (file)
index 0000000..4772d58
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<span id="e"></span>
+<span id="f"></span>
+<script src="pad-gesture-cancel.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/events/touch/gesture/pad-gesture-cancel.js b/LayoutTests/fast/events/touch/gesture/pad-gesture-cancel.js
new file mode 100644 (file)
index 0000000..12bc3d8
--- /dev/null
@@ -0,0 +1,36 @@
+description("Tests basic use of GestureFlingCancel");
+
+var expectedWheelEventsOccurred = "0";
+var actualWheelEventsOccurred = 0;
+
+function recordWheelEvent(event)
+{
+    shouldBe('event.clientX', "10");
+    shouldBe('event.clientY', "11");
+
+    // Test deliberately does not equality check wheelDeltas to not be fragile in the face of curve adjustment.
+    shouldBeTrue("event.wheelDeltaX > 5");
+    shouldBeTrue("event.wheelDeltaY > 5");
+    actualWheelEventsOccurred++;
+}
+
+document.addEventListener("mousewheel", recordWheelEvent);
+
+if (window.layoutTestController && window.eventSender && window.eventSender.gestureFlingStart) {
+    eventSender.gestureFlingStart(10, 11, 1000, 1000);
+    eventSender.gestureFlingCancel();
+    layoutTestController.display();
+}
+
+setTimeout(function() {
+    shouldBe('actualWheelEventsOccurred', expectedWheelEventsOccurred);
+}, 100);
+
+if (window.layoutTestController)
+    layoutTestController.waitUntilDone();
+
+setTimeout(function() {
+    isSuccessfullyParsed();
+    if (window.layoutTestController)
+        layoutTestController.notifyDone();
+}, 200);
diff --git a/LayoutTests/fast/events/touch/gesture/pad-gesture-fling-expected.txt b/LayoutTests/fast/events/touch/gesture/pad-gesture-fling-expected.txt
new file mode 100644 (file)
index 0000000..070d850
--- /dev/null
@@ -0,0 +1,10 @@
+Tests basic use of GestureFlingStart
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+FAIL actualWheelEventsOccurred should be 2. Was 0.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/events/touch/gesture/pad-gesture-fling.html b/LayoutTests/fast/events/touch/gesture/pad-gesture-fling.html
new file mode 100644 (file)
index 0000000..4f142b5
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<span id="e"></span>
+<span id="f"></span>
+<script src="pad-gesture-fling.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/events/touch/gesture/pad-gesture-fling.js b/LayoutTests/fast/events/touch/gesture/pad-gesture-fling.js
new file mode 100644 (file)
index 0000000..d902109
--- /dev/null
@@ -0,0 +1,37 @@
+description("Tests basic use of GestureFlingStart");
+
+var expectedWheelEventsOccurred = "2";
+var actualWheelEventsOccurred = 0;
+
+function recordWheelEvent(event)
+{
+    shouldBe('event.clientX', "10");
+    shouldBe('event.clientY', "11");
+
+    // Test deliberately does not equality check wheelDeltas to not be fragile in the face of curve adjustment.
+    shouldBeTrue("event.wheelDeltaX > 5");
+    shouldBeTrue("event.wheelDeltaY > 5");
+    actualWheelEventsOccurred++;
+}
+
+document.addEventListener("mousewheel", recordWheelEvent);
+
+if (window.layoutTestController && window.eventSender && window.eventSender.gestureFlingStart) {
+    eventSender.gestureFlingStart(10, 11, 1000, 1000);
+    layoutTestController.display();
+    layoutTestController.display();
+    layoutTestController.display();
+}
+
+setTimeout(function() {
+    shouldBe('actualWheelEventsOccurred', expectedWheelEventsOccurred);
+}, 100);
+
+if (window.layoutTestController)
+    layoutTestController.waitUntilDone();
+
+setTimeout(function() {
+    isSuccessfullyParsed();
+    if (window.layoutTestController)
+        layoutTestController.notifyDone();
+}, 200);
diff --git a/LayoutTests/platform/chromium/fast/events/touch/gesture/pad-gesture-cancel-expected.txt b/LayoutTests/platform/chromium/fast/events/touch/gesture/pad-gesture-cancel-expected.txt
new file mode 100644 (file)
index 0000000..270069b
--- /dev/null
@@ -0,0 +1,10 @@
+Tests basic use of GestureFlingCancel
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS actualWheelEventsOccurred is 0
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/platform/chromium/fast/events/touch/gesture/pad-gesture-fling-expected.txt b/LayoutTests/platform/chromium/fast/events/touch/gesture/pad-gesture-fling-expected.txt
new file mode 100644 (file)
index 0000000..86e46dc
--- /dev/null
@@ -0,0 +1,18 @@
+Tests basic use of GestureFlingStart
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS event.clientX is 10
+PASS event.clientY is 11
+PASS event.wheelDeltaX > 5 is true
+PASS event.wheelDeltaY > 5 is true
+PASS event.clientX is 10
+PASS event.clientY is 11
+PASS event.wheelDeltaX > 5 is true
+PASS event.wheelDeltaY > 5 is true
+PASS actualWheelEventsOccurred is 2
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
index c8d78ffac24b64206ace675bb06954862cb4eb5a..e49de5ccd0f11ffe12de03150b436e204ecfb01b 100644 (file)
@@ -1,3 +1,23 @@
+2012-03-19  Robert Kroeger  <rjkroege@chromium.org>
+
+        [chromium] synthesize wheel events for fling on main thread
+        https://bugs.webkit.org/show_bug.cgi?id=81458
+
+        Support track pad fling by generating a sequence of wheel events.
+
+        Reviewed by James Robinson.
+
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::WebViewImpl):
+        (WebKit::WebViewImpl::scrollBy): Call-back from PlatformGestureCurve to dispatch wheel event.
+        (WebKit):
+        (WebKit::WebViewImpl::gestureEvent): Handle GestureFlingStart and GestureFlingCancel.
+        (WebKit::WebViewImpl::updateAnimations): Requests a PlatformGestureCurve to animate forward.
+        (WebKit::WebViewImpl::didCommitLoad): Halt flings on navigations.
+        * src/WebViewImpl.h:
+        (WebCore):
+        (WebViewImpl):
+
 2012-03-19  Keishi Hattori  <keishi@webkit.org>
 
         [chromium] Fix build that was broken by r111137
index 48906ea5f95359d7104ff108296d946aeb11fcc8..06c2b3e1d6c112058183cdff6296bfb1e5ce9c3b 100644 (file)
@@ -31,6 +31,7 @@
 #include "config.h"
 #include "WebViewImpl.h"
 
+#include "ActivePlatformGestureAnimation.h"
 #include "AutofillPopupMenuClient.h"
 #include "AXObjectCache.h"
 #include "BackForwardListChromium.h"
 #include "SpeechRecognitionClient.h"
 #include "TextIterator.h"
 #include "Timer.h"
+#include "TouchFlingPlatformGestureCurve.h"
 #include "TraceEvent.h"
 #include "TypingCommand.h"
 #include "UserGestureIndicator.h"
 #include "platform/WebString.h"
 #include "platform/WebVector.h"
 #include "WebViewClient.h"
+#include "WheelEvent.h"
 #include <wtf/ByteArray.h>
 #include <wtf/CurrentTime.h>
 #include <wtf/MainThread.h>
@@ -364,6 +367,7 @@ WebViewImpl::WebViewImpl(WebViewClient* client)
 #if ENABLE(MEDIA_STREAM)
     , m_userMediaClientImpl(this)
 #endif
+    , m_flingModifier(0)
 {
     // WebKit/win/WebView.cpp does the same thing, except they call the
     // KJS specific wrapper around this method. We need to have threading
@@ -603,11 +607,57 @@ bool WebViewImpl::mouseWheel(const WebMouseWheelEvent& event)
     return mainFrameImpl()->frame()->eventHandler()->handleWheelEvent(platformEvent);
 }
 
+void WebViewImpl::scrollBy(const WebCore::IntPoint& delta)
+{
+    WebMouseWheelEvent syntheticWheel;
+    const float tickDivisor = WebCore::WheelEvent::tickMultiplier;
+
+    syntheticWheel.deltaX = delta.x();
+    syntheticWheel.deltaY = delta.y();
+    syntheticWheel.wheelTicksX = delta.x() / tickDivisor;
+    syntheticWheel.wheelTicksY = delta.y() / tickDivisor;
+    syntheticWheel.hasPreciseScrollingDeltas = true;
+    syntheticWheel.x = m_lastWheelPosition.x;
+    syntheticWheel.y = m_lastWheelPosition.y;
+    syntheticWheel.globalX = m_lastWheelGlobalPosition.x;
+    syntheticWheel.globalY = m_lastWheelGlobalPosition.y;
+    syntheticWheel.modifiers = m_flingModifier;
+
+    mouseWheel(syntheticWheel);
+}
+
 #if ENABLE(GESTURE_EVENTS)
 bool WebViewImpl::gestureEvent(const WebGestureEvent& event)
 {
-    PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event);
-    return mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent);
+    switch (event.type) {
+    case WebInputEvent::GestureFlingStart: {
+        m_lastWheelPosition = WebPoint(event.x, event.y);
+        m_lastWheelGlobalPosition = WebPoint(event.globalX, event.globalY);
+        m_flingModifier = event.modifiers;
+        // FIXME: Make the curve parametrizable from the browser.
+        m_gestureAnimation = ActivePlatformGestureAnimation::create(TouchFlingPlatformGestureCurve::create(FloatPoint(event.deltaX, event.deltaY)), this);
+        scheduleAnimation();
+        return true;
+    }
+    case WebInputEvent::GestureFlingCancel:
+        m_gestureAnimation.clear();
+        return true;
+    case WebInputEvent::GestureScrollBegin:
+    case WebInputEvent::GestureScrollEnd:
+    case WebInputEvent::GestureScrollUpdate:
+    case WebInputEvent::GestureTap:
+    case WebInputEvent::GestureTapDown:
+    case WebInputEvent::GestureDoubleTap:
+    case WebInputEvent::GesturePinchBegin:
+    case WebInputEvent::GesturePinchEnd:
+    case WebInputEvent::GesturePinchUpdate: {
+        PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event);
+        return mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent);
+    }
+    default:
+        ASSERT_NOT_REACHED();
+    }
+    return false;
 }
 
 void WebViewImpl::startPageScaleAnimation(const IntPoint& scroll, bool useAnchor, float newScale, double durationSec)
@@ -1289,6 +1339,15 @@ void WebViewImpl::updateAnimations(double frameBeginTime)
     FrameView* view = webframe->frameView();
     if (!view)
         return;
+
+    // Create synthetic wheel events as necessary for fling.
+    if (m_gestureAnimation) {
+        if (m_gestureAnimation->animate(frameBeginTime))
+            scheduleAnimation();
+        else
+            m_gestureAnimation.clear();
+    }
+
     view->serviceScriptedAnimations(convertSecondsToDOMTimeStamp(frameBeginTime));
 #endif
 }
@@ -2838,6 +2897,8 @@ void WebViewImpl::didCommitLoad(bool* isNewNavigation, bool isNavigationWithinPa
     m_observedNewNavigation = false;
     if (!isNavigationWithinPage)
         m_pageScaleFactorIsSet = false;
+
+    m_gestureAnimation.clear();
 }
 
 void WebViewImpl::layoutUpdated(WebFrameImpl* webframe)
index 9d93969f8cf1fa604a3e95137dfe20881c199347..22938ad6bd6c4975f74fe37e415487feeca1215b 100644 (file)
 #include "IntRect.h"
 #include "NotificationPresenterImpl.h"
 #include "PageOverlayList.h"
+#include "PlatformGestureCurveTarget.h"
 #include "UserMediaClientImpl.h"
 #include <wtf/OwnPtr.h>
 #include <wtf/RefCounted.h>
 
 namespace WebCore {
+class ActivePlatformGestureAnimation;
 class ChromiumDataObject;
 class DocumentLoader;
 class Frame;
@@ -65,6 +67,7 @@ class HistoryItem;
 class HitTestResult;
 class KeyboardEvent;
 class Page;
+class PlatformGestureCurveTarget;
 class PlatformKeyboardEvent;
 class PopupContainer;
 class PopupMenuClient;
@@ -96,7 +99,7 @@ class WebMouseWheelEvent;
 class WebSettingsImpl;
 class WebTouchEvent;
 
-class WebViewImpl : public WebView, public WebLayerTreeViewClient, public RefCounted<WebViewImpl> {
+class WebViewImpl : public WebView, public WebLayerTreeViewClient, public RefCounted<WebViewImpl>, public WebCore::PlatformGestureCurveTarget {
 public:
     enum AutoZoomType {
         DoubleTap,
@@ -333,6 +336,9 @@ public:
     void numberOfWheelEventHandlersChanged(unsigned);
     void numberOfTouchEventHandlersChanged(unsigned);
 
+    // PlatformGestureCurveTarget implementation for wheel fling.
+    virtual void scrollBy(const WebCore::IntPoint&);
+
     // Handles context menu events orignated via the the keyboard. These
     // include the VK_APPS virtual key and the Shift+F10 combine. Code is
     // based on the Webkit function bool WebView::handleContextMenuEvent(WPARAM
@@ -718,6 +724,10 @@ private:
 #if ENABLE(MEDIA_STREAM)
     UserMediaClientImpl m_userMediaClientImpl;
 #endif
+    OwnPtr<WebCore::ActivePlatformGestureAnimation> m_gestureAnimation;
+    WebPoint m_lastWheelPosition;
+    WebPoint m_lastWheelGlobalPosition;
+    int m_flingModifier;
 };
 
 } // namespace WebKit
index bc27dbb44f36139c16177f415f03c3954849e602..e70546c30fe8d8876e63a8137c81b002f795f152 100644 (file)
@@ -1,3 +1,19 @@
+2012-03-19  Robert Kroeger  <rjkroege@chromium.org>
+
+        [chromium] synthesize wheel events for fling on main thread
+        https://bugs.webkit.org/show_bug.cgi?id=81458
+
+        Added the ability to dispatch GestureFlingStart and GestureFlingCancel from EventSender.
+
+        Reviewed by James Robinson.
+
+        * DumpRenderTree/chromium/EventSender.cpp:
+        (EventSender::EventSender):
+        (EventSender::gestureFlingCancel):
+        (EventSender::gestureFlingStart):
+        * DumpRenderTree/chromium/EventSender.h:
+        (EventSender):
+
 2012-03-19  Alexander Færøy  <alexander.faeroy@nokia.com>
 
         [Qt] Add command line option to set the user agent in the MiniBrowser
index 0fe311fcfed1fb281854b9dcfabfbd403034560f..2d92b4e6ce806caea2d41acc093386ab57d4ae40 100644 (file)
@@ -279,6 +279,8 @@ EventSender::EventSender(TestShell* shell)
     bindMethod("touchMove", &EventSender::touchMove);
     bindMethod("touchStart", &EventSender::touchStart);
     bindMethod("updateTouchPoint", &EventSender::updateTouchPoint);
+    bindMethod("gestureFlingCancel", &EventSender::gestureFlingCancel);
+    bindMethod("gestureFlingStart", &EventSender::gestureFlingStart);
     bindMethod("gestureScrollBegin", &EventSender::gestureScrollBegin);
     bindMethod("gestureScrollEnd", &EventSender::gestureScrollEnd);
     bindMethod("gestureScrollFirstPoint", &EventSender::gestureScrollFirstPoint);
@@ -1142,6 +1144,42 @@ void EventSender::gestureEvent(WebInputEvent::Type type, const CppArgumentList&
     webview()->handleInputEvent(event);
 }
 
+void EventSender::gestureFlingCancel(const CppArgumentList& arguments, CppVariant* result)
+{
+    result->setNull();
+    if (!arguments.size())
+        return;
+
+    WebGestureEvent event;
+    event.type = WebInputEvent::GestureFlingCancel;
+    event.timeStampSeconds = getCurrentEventTimeSec();
+    webview()->handleInputEvent(event);
+}
+
+void EventSender::gestureFlingStart(const CppArgumentList& arguments, CppVariant* result)
+{
+    result->setNull();
+    if (arguments.size() < 4)
+        return;
+
+    for (int i = 0; i < 4; i++)
+        if (!arguments[i].isNumber())
+            return;
+
+    WebGestureEvent event;
+    event.type = WebInputEvent::GestureFlingStart;
+
+    event.x = static_cast<float>(arguments[0].toDouble());
+    event.y = static_cast<float>(arguments[1].toDouble());
+    event.globalX = event.x;
+    event.globalY = event.y;
+
+    event.deltaX = static_cast<float>(arguments[2].toDouble());
+    event.deltaY = static_cast<float>(arguments[3].toDouble());
+    event.timeStampSeconds = getCurrentEventTimeSec();
+    webview()->handleInputEvent(event);
+}
+
 //
 // Unimplemented stubs
 //
index 4520acc5f2e81a7ad380f4cafc59c164026a396a..5d82d7898a2f96a5461868188e808876354fa744 100644 (file)
@@ -97,6 +97,8 @@ public:
     void touchStart(const CppArgumentList&, CppVariant*);
     void updateTouchPoint(const CppArgumentList&, CppVariant*);
 
+    void gestureFlingCancel(const CppArgumentList&, CppVariant*);
+    void gestureFlingStart(const CppArgumentList&, CppVariant*);
     void gestureScrollBegin(const CppArgumentList&, CppVariant*);
     void gestureScrollEnd(const CppArgumentList&, CppVariant*);
     void gestureScrollFirstPoint(const CppArgumentList&, CppVariant*);