diff options
Diffstat (limited to 'WebCore/rendering')
-rw-r--r-- | WebCore/rendering/MediaControlElements.cpp | 6 | ||||
-rw-r--r-- | WebCore/rendering/RenderMedia.cpp | 13 | ||||
-rw-r--r-- | WebCore/rendering/RenderMedia.h | 3 | ||||
-rw-r--r-- | WebCore/rendering/RenderSlider.cpp | 41 |
4 files changed, 57 insertions, 6 deletions
diff --git a/WebCore/rendering/MediaControlElements.cpp b/WebCore/rendering/MediaControlElements.cpp index 1af1b80..25b5a12 100644 --- a/WebCore/rendering/MediaControlElements.cpp +++ b/WebCore/rendering/MediaControlElements.cpp @@ -719,8 +719,12 @@ void MediaControlTimelineElement::defaultEventHandler(Event* event) } RenderSlider* slider = toRenderSlider(renderer()); - if (slider && slider->inDragMode()) + if (slider && slider->inDragMode()) { toRenderMedia(mediaElement()->renderer())->updateTimeDisplay(); +#if PLATFORM(ANDROID) + toRenderMedia(mediaElement()->renderer())->updateLastTouch(); +#endif + } if (event->type() == eventNames().mouseupEvent) mediaElement()->endScrubbing(); diff --git a/WebCore/rendering/RenderMedia.cpp b/WebCore/rendering/RenderMedia.cpp index f19ca96..6fe0337 100644 --- a/WebCore/rendering/RenderMedia.cpp +++ b/WebCore/rendering/RenderMedia.cpp @@ -550,11 +550,22 @@ void RenderMedia::updateVolumeSliderContainer(bool visible) } } +#if PLATFORM(ANDROID) +void RenderMedia::updateLastTouch() +{ + m_lastTouch = WTF::currentTime(); +} +#endif + void RenderMedia::forwardEvent(Event* event) { #if PLATFORM(ANDROID) if (event->isMouseEvent()) - m_lastTouch = WTF::currentTime(); + updateLastTouch(); +#if ENABLE(TOUCH_EVENTS) + if (event->isTouchEvent()) + updateLastTouch(); +#endif #endif if (event->isMouseEvent() && m_controlsShadowRoot) { diff --git a/WebCore/rendering/RenderMedia.h b/WebCore/rendering/RenderMedia.h index 65fdc7d..a3b5c5c 100644 --- a/WebCore/rendering/RenderMedia.h +++ b/WebCore/rendering/RenderMedia.h @@ -71,6 +71,9 @@ public: void updateTimeDisplay(); void forwardEvent(Event*); +#if PLATFORM(ANDROID) + void updateLastTouch(); +#endif protected: virtual void layout(); diff --git a/WebCore/rendering/RenderSlider.cpp b/WebCore/rendering/RenderSlider.cpp index d680bc7..f00b586 100644 --- a/WebCore/rendering/RenderSlider.cpp +++ b/WebCore/rendering/RenderSlider.cpp @@ -43,6 +43,10 @@ #include "Settings.h" #endif +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) +#include "TouchEvent.h" +#endif + using std::min; namespace WebCore { @@ -85,7 +89,11 @@ inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(HTMLElement* sh void SliderThumbElement::defaultEventHandler(Event* event) { - if (!event->isMouseEvent()) { + if (!event->isMouseEvent() +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + && !event->isTouchEvent() +#endif + ) { ShadowBlockElement::defaultEventHandler(event); return; } @@ -94,7 +102,11 @@ void SliderThumbElement::defaultEventHandler(Event* event) bool isLeftButton = mouseEvent->button() == LeftButton; 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 + ) { if (document()->frame() && renderer()) { RenderSlider* slider = toRenderSlider(renderer()->parent()); if (slider) { @@ -115,7 +127,11 @@ void SliderThumbElement::defaultEventHandler(Event* event) return; } } - } else if (eventType == eventNames().mouseupEvent && isLeftButton) { + } else if (eventType == eventNames().mouseupEvent && isLeftButton +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + || eventType == eventNames().touchendEvent +#endif + ) { if (m_inDragMode) { if (Frame* frame = document()->frame()) frame->eventHandler()->setCapturingMouseEventsNode(0); @@ -123,11 +139,28 @@ void SliderThumbElement::defaultEventHandler(Event* event) event->setDefaultHandled(); return; } - } else if (eventType == eventNames().mousemoveEvent) { + } else if (eventType == eventNames().mousemoveEvent +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + || eventType == eventNames().touchmoveEvent +#endif + ) { if (m_inDragMode && renderer() && renderer()->parent()) { RenderSlider* slider = toRenderSlider(renderer()->parent()); if (slider) { FloatPoint curPoint = slider->absoluteToLocal(mouseEvent->absoluteLocation(), false, true); +#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) + // Update the position when it is a touch event + if (event->isTouchEvent()) { + TouchEvent* touchEvent = static_cast<TouchEvent*>(event); + if (touchEvent && touchEvent->touches() && touchEvent->touches()->item(0)) { + curPoint.setX(touchEvent->touches()->item(0)->pageX()); + curPoint.setY(touchEvent->touches()->item(0)->pageY()); + curPoint = slider->absoluteToLocal(curPoint, false, true); + } + } + // Tell the webview that webkit will handle the following move events + event->setDefaultPrevented(true); +#endif IntPoint eventOffset(curPoint.x() + m_offsetToThumb.x(), curPoint.y() + m_offsetToThumb.y()); slider->setValueForPosition(slider->positionForOffset(eventOffset)); event->setDefaultHandled(); |