From: Grace Kloba Date: Wed, 3 Feb 2010 03:08:37 +0000 (-0800) Subject: Pass touch event time from Java to WebKit X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=5b9b4d4e;p=android-x86%2Fexternal-webkit.git Pass touch event time from Java to WebKit --- diff --git a/WebCore/dom/Event.h b/WebCore/dom/Event.h index 7ec85a7fa..4774ccb70 100644 --- a/WebCore/dom/Event.h +++ b/WebCore/dom/Event.h @@ -153,6 +153,10 @@ namespace WebCore { bool createdByDOM() const { return m_createdByDOM; } void setCreatedByDOM(bool createdByDOM) { m_createdByDOM = createdByDOM; } +#if PLATFORM(ANDROID) + void setCreateTime(DOMTimeStamp time) { m_createTime = time; } +#endif + protected: Event(); Event(const AtomicString& type, bool canBubble, bool cancelable); diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp index 8b6b602dd..d0ca86b94 100644 --- a/WebCore/page/EventHandler.cpp +++ b/WebCore/page/EventHandler.cpp @@ -2659,6 +2659,7 @@ int EventHandler::handleTouchEvent(const PlatformTouchEvent& e) default: return false; } + te->setCreateTime(static_cast(e.eventTime())); ExceptionCode ec = 0; m_touch->target()->dispatchEvent(te.get(), ec); if (type == TouchEventEnd || type == TouchEventCancel) diff --git a/WebCore/platform/PlatformTouchEvent.h b/WebCore/platform/PlatformTouchEvent.h index 6c8629cc0..320dbbd2d 100644 --- a/WebCore/platform/PlatformTouchEvent.h +++ b/WebCore/platform/PlatformTouchEvent.h @@ -41,10 +41,11 @@ namespace WebCore { { } - PlatformTouchEvent(const IntPoint& pos, const IntPoint& globalPos, TouchEventType eventType) + PlatformTouchEvent(const IntPoint& pos, const IntPoint& globalPos, TouchEventType eventType, long eventTime) : m_position(pos) , m_globalPosition(globalPos) , m_eventType(eventType) + , m_eventTime(eventTime) { } @@ -54,11 +55,13 @@ namespace WebCore { int globalX() const { return m_globalPosition.x(); } int globalY() const { return m_globalPosition.y(); } TouchEventType eventType() const { return m_eventType; } + long eventTime() const { return m_eventTime; } private: IntPoint m_position; IntPoint m_globalPosition; TouchEventType m_eventType; + long m_eventTime; }; } // namespace WebCore diff --git a/WebCore/plugins/android/PluginViewAndroid.cpp b/WebCore/plugins/android/PluginViewAndroid.cpp index ed7a694e4..0317ed6db 100644 --- a/WebCore/plugins/android/PluginViewAndroid.cpp +++ b/WebCore/plugins/android/PluginViewAndroid.cpp @@ -183,7 +183,7 @@ void PluginView::handleTouchEvent(TouchEvent* event) return; ANPEvent evt; - SkANP::InitEvent(&evt, kTouch_ANPEventType); + SkANP::InitEvent(&evt, kTouch_ANPEventType, event->timeStamp()); bool ignoreRet = false; const AtomicString& type = event->type(); diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp index 8f5cc4506..66646b90b 100644 --- a/WebKit/android/jni/WebViewCore.cpp +++ b/WebKit/android/jni/WebViewCore.cpp @@ -2149,7 +2149,7 @@ void WebViewCore::click(WebCore::Frame* frame, WebCore::Node* node) { } } -int WebViewCore::handleTouchEvent(int action, int x, int y) +int WebViewCore::handleTouchEvent(int action, int x, int y, long time) { int preventDefault = 0; @@ -2186,7 +2186,7 @@ int WebViewCore::handleTouchEvent(int action, int x, int y) break; } WebCore::IntPoint pt(x - m_scrollOffsetX, y - m_scrollOffsetY); - WebCore::PlatformTouchEvent te(pt, pt, type); + WebCore::PlatformTouchEvent te(pt, pt, type, time); preventDefault = m_mainFrame->eventHandler()->handleTouchEvent(te); #endif @@ -2948,14 +2948,14 @@ static jstring FindAddress(JNIEnv *env, jobject obj, jstring addr, return ret; } -static jint HandleTouchEvent(JNIEnv *env, jobject obj, jint action, jint x, jint y) +static jint HandleTouchEvent(JNIEnv *env, jobject obj, jint action, jint x, jint y, jlong time) { #ifdef ANDROID_INSTRUMENT TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter); #endif WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj); LOG_ASSERT(viewImpl, "viewImpl not set in %s", __FUNCTION__); - return viewImpl->handleTouchEvent(action, x, y); + return viewImpl->handleTouchEvent(action, x, y, time); } static void TouchUp(JNIEnv *env, jobject obj, jint touchGeneration, @@ -3360,7 +3360,7 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = { (void*) SaveDocumentState }, { "nativeFindAddress", "(Ljava/lang/String;Z)Ljava/lang/String;", (void*) FindAddress }, - { "nativeHandleTouchEvent", "(III)I", + { "nativeHandleTouchEvent", "(IIIJ)I", (void*) HandleTouchEvent }, { "nativeTouchUp", "(IIIII)V", (void*) TouchUp }, diff --git a/WebKit/android/jni/WebViewCore.h b/WebKit/android/jni/WebViewCore.h index f1893fffd..ee87d8405 100644 --- a/WebKit/android/jni/WebViewCore.h +++ b/WebKit/android/jni/WebViewCore.h @@ -283,7 +283,7 @@ namespace android { /** * Handle touch event */ - int handleTouchEvent(int action, int x, int y); + int handleTouchEvent(int action, int x, int y, long time); /** * Handle motionUp event from the UI thread (called touchUp in the diff --git a/WebKit/android/plugins/SkANP.cpp b/WebKit/android/plugins/SkANP.cpp index 9bbb09eca..bb3fe4512 100644 --- a/WebKit/android/plugins/SkANP.cpp +++ b/WebKit/android/plugins/SkANP.cpp @@ -26,6 +26,7 @@ // must include config.h first for webkit to fiddle with new/delete #include "config.h" #include "SkANP.h" +#include SkRect* SkANP::SetRect(SkRect* dst, const ANPRectF& src) { dst->set(SkFloatToScalar(src.left), @@ -102,4 +103,11 @@ bool SkANP::SetBitmap(ANPBitmap* dst, const SkBitmap& src) { void SkANP::InitEvent(ANPEvent* event, ANPEventType et) { event->inSize = sizeof(ANPEvent); event->eventType = et; + event->timeStamp = currentTime() * 1000.0; +} + +void SkANP::InitEvent(ANPEvent* event, ANPEventType et, long time) { + event->inSize = sizeof(ANPEvent); + event->eventType = et; + event->timeStamp = time; } diff --git a/WebKit/android/plugins/SkANP.h b/WebKit/android/plugins/SkANP.h index 5c2a93650..8590e10b5 100644 --- a/WebKit/android/plugins/SkANP.h +++ b/WebKit/android/plugins/SkANP.h @@ -74,6 +74,7 @@ public: static bool SetBitmap(ANPBitmap* dst, const SkBitmap& src); static void InitEvent(ANPEvent* event, ANPEventType et); + static void InitEvent(ANPEvent* event, ANPEventType et, long time); }; #endif diff --git a/WebKit/android/plugins/android_npapi.h b/WebKit/android/plugins/android_npapi.h index 41735283c..1f2072d3f 100644 --- a/WebKit/android/plugins/android_npapi.h +++ b/WebKit/android/plugins/android_npapi.h @@ -893,6 +893,7 @@ typedef uint32_t ANPLifecycleAction; /* This is what is passed to NPP_HandleEvent() */ struct ANPEvent { uint32_t inSize; // size of this struct in bytes + uint32_t timeStamp; ANPEventType eventType; // use based on the value in eventType union {