From fbfc6409248016e52d6d96c5413f9925bad17bd6 Mon Sep 17 00:00:00 2001 From: "eojin.ham" Date: Thu, 4 Apr 2013 13:57:40 +0900 Subject: [PATCH] Change view status of video controls by click event. [Title] Change view status of video controls by click event. [Problem] Video controls are not hidden until touching outside of video screen. [Cause] Mouse-out event don't occur until touching outside of video screen. [Solution] Change view status of video controls by click event. Add timer callback to hide controls on normal screen also. Change-Id: Ie2768023d46b093b364ca66e5d4191df17ec6ef1 --- Source/WebCore/html/shadow/MediaControlElements.h | 3 ++ .../html/shadow/MediaControlRootElement.cpp | 47 ++++++++++++++++++++++ .../WebCore/html/shadow/MediaControlRootElement.h | 11 +++++ 3 files changed, 61 insertions(+) diff --git a/Source/WebCore/html/shadow/MediaControlElements.h b/Source/WebCore/html/shadow/MediaControlElements.h index effdcee..e396414 100644 --- a/Source/WebCore/html/shadow/MediaControlElements.h +++ b/Source/WebCore/html/shadow/MediaControlElements.h @@ -115,6 +115,9 @@ public: void resetPosition(); void makeOpaque(); void makeTransparent(); +#if ENABLE(TIZEN_GSTREAMER_VIDEO) + bool isOpaque() { return m_opaque; } +#endif virtual bool willRespondToMouseMoveEvents() OVERRIDE { return true; } virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; } diff --git a/Source/WebCore/html/shadow/MediaControlRootElement.cpp b/Source/WebCore/html/shadow/MediaControlRootElement.cpp index 2aa1632..7ebc452 100644 --- a/Source/WebCore/html/shadow/MediaControlRootElement.cpp +++ b/Source/WebCore/html/shadow/MediaControlRootElement.cpp @@ -74,7 +74,11 @@ MediaControlRootElement::MediaControlRootElement(Document* document) #if ENABLE(VIDEO_TRACK) , m_textDisplayContainer(0) #endif +#if ENABLE(TIZEN_GSTREAMER_VIDEO) + , m_hideControlsTimer(this, &MediaControlRootElement::hideControlsTimerFired) +#else , m_hideFullscreenControlsTimer(this, &MediaControlRootElement::hideFullscreenControlsTimerFired) +#endif , m_isMouseOverControls(false) , m_isFullscreen(false) { @@ -389,8 +393,12 @@ void MediaControlRootElement::playbackStarted() m_timeline->setPosition(m_mediaController->currentTime()); updateTimeDisplay(); +#if ENABLE(TIZEN_GSTREAMER_VIDEO) + m_hideControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingControls); +#else if (m_isFullscreen) startHideFullscreenControlsTimer(); +#endif } void MediaControlRootElement::playbackProgressed() @@ -398,8 +406,10 @@ void MediaControlRootElement::playbackProgressed() m_timeline->setPosition(m_mediaController->currentTime()); updateTimeDisplay(); +#if !ENABLE(TIZEN_GSTREAMER_VIDEO) if (!m_isMouseOverControls && m_mediaController->hasVideo()) makeTransparent(); +#endif } void MediaControlRootElement::playbackStopped() @@ -409,7 +419,11 @@ void MediaControlRootElement::playbackStopped() updateTimeDisplay(); makeOpaque(); +#if ENABLE(TIZEN_GSTREAMER_VIDEO) + m_hideControlsTimer.stop(); +#else stopHideFullscreenControlsTimer(); +#endif } void MediaControlRootElement::updateTimeDisplay() @@ -517,7 +531,9 @@ void MediaControlRootElement::enteredFullscreen() #endif } +#if !ENABLE(TIZEN_GSTREAMER_VIDEO) startHideFullscreenControlsTimer(); +#endif } void MediaControlRootElement::exitedFullscreen() @@ -544,7 +560,9 @@ void MediaControlRootElement::exitedFullscreen() m_panel->removeInlineStyleProperty(CSSPropertyZoom); #endif +#if !ENABLE(TIZEN_GSTREAMER_VIDEO) stopHideFullscreenControlsTimer(); +#endif } void MediaControlRootElement::showVolumeSlider() @@ -575,6 +593,18 @@ void MediaControlRootElement::defaultEventHandler(Event* event) { MediaControls::defaultEventHandler(event); +#if ENABLE(TIZEN_GSTREAMER_VIDEO) + if (event->type() == eventNames().clickEvent) { + if (!containsRelatedTarget(event)) { + if (m_panel->isOpaque()) + makeTransparent(); + else { + makeOpaque(); + m_hideControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingControls); + } + } + } +#else if (event->type() == eventNames().mouseoverEvent) { if (!containsRelatedTarget(event)) { m_isMouseOverControls = true; @@ -598,8 +628,24 @@ void MediaControlRootElement::defaultEventHandler(Event* event) startHideFullscreenControlsTimer(); } } +#endif } +#if ENABLE(TIZEN_GSTREAMER_VIDEO) +void MediaControlRootElement::hideControlsTimerFired(Timer*) +{ + if (m_mediaController->paused()) + return; + + if (!m_mediaController->hasVideo()) + return; + + if (Page* page = document()->page()) + page->chrome()->setCursorHiddenUntilMouseMoves(true); + + makeTransparent(); +} +#else void MediaControlRootElement::startHideFullscreenControlsTimer() { if (!m_isFullscreen) @@ -629,6 +675,7 @@ void MediaControlRootElement::stopHideFullscreenControlsTimer() { m_hideFullscreenControlsTimer.stop(); } +#endif #if ENABLE(VIDEO_TRACK) void MediaControlRootElement::createTextTrackDisplay() diff --git a/Source/WebCore/html/shadow/MediaControlRootElement.h b/Source/WebCore/html/shadow/MediaControlRootElement.h index 5ce6ac7..0f03d9c 100644 --- a/Source/WebCore/html/shadow/MediaControlRootElement.h +++ b/Source/WebCore/html/shadow/MediaControlRootElement.h @@ -120,9 +120,14 @@ private: MediaControlRootElement(Document*); virtual void defaultEventHandler(Event*); + +#if ENABLE(TIZEN_GSTREAMER_VIDEO) + void hideControlsTimerFired(Timer*); +#else void hideFullscreenControlsTimerFired(Timer*); void startHideFullscreenControlsTimer(); void stopHideFullscreenControlsTimer(); +#endif virtual const AtomicString& shadowPseudoId() const; @@ -154,7 +159,13 @@ private: MediaControlTextTrackContainerElement* m_textDisplayContainer; MediaControlTextTrackDisplayElement* m_textTrackDisplay; #endif + +#if ENABLE(TIZEN_GSTREAMER_VIDEO) + Timer m_hideControlsTimer; +#else Timer m_hideFullscreenControlsTimer; +#endif + bool m_isMouseOverControls; bool m_isFullscreen; }; -- 2.7.4