diff options
| author | George Mount <mount@google.com> | 2012-04-30 13:47:27 -0700 |
|---|---|---|
| committer | George Mount <mount@google.com> | 2012-05-01 08:25:47 -0700 |
| commit | f2e2233332c5b4a4b584c0a10b8bac10b6122acf (patch) | |
| tree | adbbe5d4aaf4376e82aebe49228343937d5d20ce /Source/WebCore/html/shadow | |
| parent | 940c47782e72ed37ba9f1193af1265a56a3df7e1 (diff) | |
| download | external_webkit-f2e2233332c5b4a4b584c0a10b8bac10b6122acf.zip external_webkit-f2e2233332c5b4a4b584c0a10b8bac10b6122acf.tar.gz external_webkit-f2e2233332c5b4a4b584c0a10b8bac10b6122acf.tar.bz2 | |
Use different mechanism for enabling slider.
Bug 6413206
The HTML5 video scrubbing requires the old mechanism
for getting touch events.
Nearly a full revert of change I1d1ae457c50fe5b9627df7edb4f11d8245b5bdbf
Change-Id: Ia3d07c1fddf5f5ed0f51a518c85f04bed415502e
Diffstat (limited to 'Source/WebCore/html/shadow')
| -rw-r--r-- | Source/WebCore/html/shadow/SliderThumbElement.cpp | 111 | ||||
| -rw-r--r-- | Source/WebCore/html/shadow/SliderThumbElement.h | 7 |
2 files changed, 57 insertions, 61 deletions
diff --git a/Source/WebCore/html/shadow/SliderThumbElement.cpp b/Source/WebCore/html/shadow/SliderThumbElement.cpp index 1c2af79..210fb7b 100644 --- a/Source/WebCore/html/shadow/SliderThumbElement.cpp +++ b/Source/WebCore/html/shadow/SliderThumbElement.cpp @@ -87,40 +87,6 @@ void RenderSliderThumb::layout() RenderBlock::layout(); } -#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) -class SliderTouchEventListener : public EventListener { -public: - static PassRefPtr<SliderTouchEventListener> create(SliderThumbElement* slider) - { - return adoptRef(new SliderTouchEventListener(slider)); - } - virtual bool operator==(const EventListener& other) - { - return this == &other; - } - virtual void handleEvent(ScriptExecutionContext*, Event* event) - { - if (!event || !event->isTouchEvent()) - return; - TouchEvent* touchEvent = static_cast<TouchEvent*>(event); - if (touchEvent->touches() && touchEvent->touches()->item(0)) { - IntPoint curPoint; - curPoint.setX(touchEvent->touches()->item(0)->pageX()); - curPoint.setY(touchEvent->touches()->item(0)->pageY()); - m_slider->setPositionFromPoint(curPoint); - touchEvent->setDefaultHandled(); - touchEvent->setDefaultPrevented(true); - } - } -private: - SliderTouchEventListener(SliderThumbElement* slider) - : EventListener(NativeEventListenerType) - , m_slider(slider) - {} - SliderThumbElement* m_slider; -}; -#endif - void SliderThumbElement::setPositionFromValue() { // Since today the code to calculate position is in the RenderSlider layout @@ -204,6 +170,10 @@ void SliderThumbElement::stopDragging() if (Frame* frame = document()->frame()) frame->eventHandler()->setCapturingMouseEventsNode(0); +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + if (Frame* frame = document()->frame()) + frame->page()->mainFrame()->eventHandler()->setCapturingTouchEventsNode(0); +#endif m_inDragMode = false; if (renderer()) renderer()->setNeedsLayout(true); @@ -211,23 +181,70 @@ void SliderThumbElement::stopDragging() void SliderThumbElement::defaultEventHandler(Event* event) { - if (!event->isMouseEvent()) { + if (!event->isMouseEvent() +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + && !event->isTouchEvent() +#endif + ) { HTMLDivElement::defaultEventHandler(event); return; } + +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + bool isLeftButton = false; + + if (event->isMouseEvent()) { + MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); + isLeftButton = mouseEvent->button() == LeftButton; + } +#else MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); bool isLeftButton = mouseEvent->button() == LeftButton; +#endif const AtomicString& eventType = event->type(); - if (eventType == eventNames().mousedownEvent && isLeftButton) { + if (eventType == eventNames().mousedownEvent && isLeftButton +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + || eventType == eventNames().touchstartEvent +#endif + ) { startDragging(); return; - } else if (eventType == eventNames().mouseupEvent && isLeftButton) { + } else if (eventType == eventNames().mouseupEvent && isLeftButton +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + || eventType == eventNames().touchendEvent + || eventType == eventNames().touchcancelEvent +#endif + ) { stopDragging(); return; - } else if (eventType == eventNames().mousemoveEvent) { + } else if (eventType == eventNames().mousemoveEvent +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + || eventType == eventNames().touchmoveEvent +#endif + ) { if (m_inDragMode) +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + { + if (event->isMouseEvent()) { + MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); +#endif setPositionFromPoint(mouseEvent->absoluteLocation()); +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + } else if (event->isTouchEvent()) { + TouchEvent* touchEvent = static_cast<TouchEvent*>(event); + if (touchEvent->touches() && touchEvent->touches()->item(0)) { + IntPoint curPoint; + curPoint.setX(touchEvent->touches()->item(0)->pageX()); + curPoint.setY(touchEvent->touches()->item(0)->pageY()); + setPositionFromPoint(curPoint); + // Tell the webview that webkit will handle the following move events + event->setDefaultPrevented(true); + } + } + + } +#endif return; } @@ -238,13 +255,7 @@ void SliderThumbElement::defaultEventHandler(Event* event) void SliderThumbElement::attach() { HTMLDivElement::attach(); - // Add a touch event handler to ensure we get touch events. - if (!m_touchListener) - m_touchListener = SliderTouchEventListener::create(this); - addEventListener(eventNames().touchstartEvent, - m_touchListener, false); - addEventListener(eventNames().touchmoveEvent, - m_touchListener, false); + document()->addListenerTypeIfNeeded(eventNames().touchstartEvent); } #endif @@ -252,16 +263,8 @@ void SliderThumbElement::detach() { if (m_inDragMode) { if (Frame* frame = document()->frame()) - frame->eventHandler()->setCapturingMouseEventsNode(0); - } -#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) - if (m_touchListener) { - removeEventListener(eventNames().touchstartEvent, - m_touchListener.get(), false); - removeEventListener(eventNames().touchmoveEvent, - m_touchListener.get(), false); + frame->eventHandler()->setCapturingMouseEventsNode(0); } -#endif HTMLDivElement::detach(); } diff --git a/Source/WebCore/html/shadow/SliderThumbElement.h b/Source/WebCore/html/shadow/SliderThumbElement.h index 47e12f1..cdeb471 100644 --- a/Source/WebCore/html/shadow/SliderThumbElement.h +++ b/Source/WebCore/html/shadow/SliderThumbElement.h @@ -44,9 +44,6 @@ class HTMLElement; class HTMLInputElement; class Event; class FloatPoint; -#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) -class SliderTouchEventListener; -#endif class SliderThumbElement : public HTMLDivElement { public: @@ -73,10 +70,6 @@ private: FloatPoint m_offsetToThumb; bool m_inDragMode; -#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) - RefPtr<EventListener> m_touchListener; - friend class SliderTouchEventListener; -#endif }; inline SliderThumbElement::SliderThumbElement(Document* document) |
