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);
m_firstTouchPagePos.x(), m_firstTouchPagePos.y(),
event.ctrlKey(), event.altKey(), event.shiftKey(),
event.metaKey());
-
+#if PLATFORM(ANDROID)
+ cancelEv->setCreateTime(static_cast<DOMTimeStamp>(event.eventTime()));
+#endif
ExceptionCode ec = 0;
m_touchEventTarget->dispatchEvent(cancelEv.get(), ec);
defaultPrevented |= cancelEv->defaultPrevented();
m_firstTouchPagePos.x(), m_firstTouchPagePos.y(),
event.ctrlKey(), event.altKey(), event.shiftKey(),
event.metaKey());
+#if PLATFORM(ANDROID)
+ endEv->setCreateTime(static_cast<DOMTimeStamp>(event.eventTime()));
+#endif
ExceptionCode ec = 0;
m_touchEventTarget->dispatchEvent(endEv.get(), ec);
#if PLATFORM(ANDROID)
m_firstTouchPagePos.x(), m_firstTouchPagePos.y(),
event.ctrlKey(), event.altKey(), event.shiftKey(),
event.metaKey());
+ longpressEv->setCreateTime(static_cast<DOMTimeStamp>(event.eventTime()));
ExceptionCode ec = 0;
m_touchEventTarget->dispatchEvent(longpressEv.get(), ec);
m_firstTouchPagePos.x(), m_firstTouchPagePos.y(),
event.ctrlKey(), event.altKey(), event.shiftKey(),
event.metaKey());
+ doubleTapEv->setCreateTime(static_cast<DOMTimeStamp>(event.eventTime()));
ExceptionCode ec = 0;
m_touchEventTarget->dispatchEvent(doubleTapEv.get(), ec);
m_firstTouchPagePos.x(), m_firstTouchPagePos.y(),
event.ctrlKey(), event.altKey(), event.shiftKey(),
event.metaKey());
+#if PLATFORM(ANDROID)
+ startEv->setCreateTime(static_cast<DOMTimeStamp>(event.eventTime()));
+#endif
ExceptionCode ec = 0;
m_touchEventTarget->dispatchEvent(startEv.get(), ec);
defaultPrevented |= startEv->defaultPrevented();
m_firstTouchPagePos.x(), m_firstTouchPagePos.y(),
event.ctrlKey(), event.altKey(), event.shiftKey(),
event.metaKey());
+#if PLATFORM(ANDROID)
+ moveEv->setCreateTime(static_cast<DOMTimeStamp>(event.eventTime()));
+#endif
ExceptionCode ec = 0;
m_touchEventTarget->dispatchEvent(moveEv.get(), ec);
defaultPrevented |= moveEv->defaultPrevented();
#if PLATFORM(QT)
PlatformTouchEvent(QTouchEvent*);
#elif PLATFORM(ANDROID)
- PlatformTouchEvent(const IntPoint& windowPos, TouchEventType, PlatformTouchPoint::State);
+ // TODO (benm): eventTime is new and needs to be upstream
+ PlatformTouchEvent(const IntPoint& windowPos, TouchEventType, PlatformTouchPoint::State, long eventTime);
#endif
TouchEventType type() const { return m_type; }
bool shiftKey() const { return m_shiftKey; }
bool metaKey() const { return m_metaKey; }
+ long eventTime() const { return m_eventTime; }
+
private:
TouchEventType m_type;
Vector<PlatformTouchPoint> m_touchPoints;
bool m_altKey;
bool m_shiftKey;
bool m_metaKey;
+ long m_eventTime;
};
}
namespace WebCore {
-PlatformTouchEvent::PlatformTouchEvent(const IntPoint& windowPos, TouchEventType type, PlatformTouchPoint::State state)
+// TODO (benm): eventTime is new and needs to be upstream
+PlatformTouchEvent::PlatformTouchEvent(const IntPoint& windowPos, TouchEventType type, PlatformTouchPoint::State state, long eventTime)
: m_type(type)
, m_ctrlKey(false)
, m_altKey(false)
, m_shiftKey(false)
, m_metaKey(false)
+ , m_eventTime(eventTime)
{
m_touchPoints.append(PlatformTouchPoint(windowPos, state));
}
return;
ANPEvent evt;
- SkANP::InitEvent(&evt, kTouch_ANPEventType);
+ SkANP::InitEvent(&evt, kTouch_ANPEventType, event->timeStamp());
bool ignoreRet = false;
const AtomicString& type = event->type();
ANPEvent evt;
if (isUp || isDown) {
- SkANP::InitEvent(&evt, kMouse_ANPEventType);
+ SkANP::InitEvent(&evt, kMouse_ANPEventType, event->timeStamp());
evt.data.mouse.action = isUp ? kUp_ANPMouseAction : kDown_ANPMouseAction;
// Convert to coordinates that are relative to the plugin.
bool ignoreEvent = false;
ANPEvent evt;
- SkANP::InitEvent(&evt, kKey_ANPEventType);
+ SkANP::InitEvent(&evt, kKey_ANPEventType, event->timeStamp());
switch (pke->type()) {
case PlatformKeyboardEvent::KeyDown:
}
}
-int WebViewCore::handleTouchEvent(int action, int x, int y)
+int WebViewCore::handleTouchEvent(int action, int x, int y, long time)
{
int preventDefault = 0;
m_lastTouchPoint = pt;
- WebCore::PlatformTouchEvent te(pt, type, touchState);
+ WebCore::PlatformTouchEvent te(pt, type, touchState, time);
preventDefault = m_mainFrame->eventHandler()->handleTouchEvent(te);
#endif
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,
(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 },
/**
* 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
// must include config.h first for webkit to fiddle with new/delete
#include "config.h"
#include "SkANP.h"
+#include <wtf/CurrentTime.h>
SkRect* SkANP::SetRect(SkRect* dst, const ANPRectF& src) {
dst->set(SkFloatToScalar(src.left),
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;
}
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
/* 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 {