diff options
| author | Steve Block <steveblock@google.com> | 2011-05-25 19:08:45 +0100 |
|---|---|---|
| committer | Steve Block <steveblock@google.com> | 2011-06-08 13:51:31 +0100 |
| commit | 2bde8e466a4451c7319e3a072d118917957d6554 (patch) | |
| tree | 28f4a1b869a513e565c7760d0e6a06e7cf1fe95a /Source/WebCore/html/shadow | |
| parent | 6939c99b71d9372d14a0c74a772108052e8c48c8 (diff) | |
| download | external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.zip external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.gz external_webkit-2bde8e466a4451c7319e3a072d118917957d6554.tar.bz2 | |
Merge WebKit at r82507: Initial merge by git
Change-Id: I60ce9d780725b58b45e54165733a8ffee23b683e
Diffstat (limited to 'Source/WebCore/html/shadow')
| -rw-r--r-- | Source/WebCore/html/shadow/MediaControls.cpp | 332 | ||||
| -rw-r--r-- | Source/WebCore/html/shadow/MediaControls.h | 40 | ||||
| -rw-r--r-- | Source/WebCore/html/shadow/SliderThumbElement.cpp | 20 | ||||
| -rw-r--r-- | Source/WebCore/html/shadow/SliderThumbElement.h | 3 |
4 files changed, 189 insertions, 206 deletions
diff --git a/Source/WebCore/html/shadow/MediaControls.cpp b/Source/WebCore/html/shadow/MediaControls.cpp index 61a3684..20f1abb 100644 --- a/Source/WebCore/html/shadow/MediaControls.cpp +++ b/Source/WebCore/html/shadow/MediaControls.cpp @@ -52,12 +52,10 @@ namespace WebCore { using namespace HTMLNames; -static const double cTimeUpdateRepeatDelay = 0.2; static const double cOpacityAnimationRepeatDelay = 0.05; MediaControls::MediaControls(HTMLMediaElement* mediaElement) : m_mediaElement(mediaElement) - , m_timeUpdateTimer(this, &MediaControls::timeUpdateTimerFired) , m_opacityAnimationTimer(this, &MediaControls::opacityAnimationTimerFired) , m_opacityAnimationStartTime(0) , m_opacityAnimationDuration(0) @@ -70,6 +68,137 @@ MediaControls::MediaControls(HTMLMediaElement* mediaElement) { } +// FIXME: This will turn into the standard element factory method once shadow DOM conversion is complete. +// (see https://bugs.webkit.org/show_bug.cgi?id=53020) +PassRefPtr<MediaControlShadowRootElement> MediaControls::create(HTMLMediaElement* mediaElement) +{ + ASSERT(!m_panel); + ASSERT(!m_muteButton); + ASSERT(!m_playButton); + ASSERT(!m_returnToRealtimeButton); + ASSERT(!m_statusDisplay); + ASSERT(!m_timelineContainer); + ASSERT(!m_currentTimeDisplay); + ASSERT(!m_timeline); + ASSERT(!m_timeRemainingDisplay); + ASSERT(!m_seekBackButton); + ASSERT(!m_seekForwardButton); + ASSERT(!m_toggleClosedCaptionsButton); + ASSERT(!m_fullscreenButton); + ASSERT(!m_muteButton); + ASSERT(!m_volumeSliderContainer); + ASSERT(!m_volumeSlider); + ASSERT(!m_volumeSliderMuteButton); + ASSERT(!m_fullScreenMinVolumeButton); + ASSERT(!m_fullScreenMaxVolumeButton); + ASSERT(!m_fullScreenVolumeSlider); + + RefPtr<MediaControlShadowRootElement> controls = MediaControlShadowRootElement::create(mediaElement); + + m_panel = MediaControlPanelElement::create(mediaElement); + + m_rewindButton = MediaControlRewindButtonElement::create(mediaElement); + m_rewindButton->attachToParent(m_panel.get()); + + m_playButton = MediaControlPlayButtonElement::create(mediaElement); + m_playButton->attachToParent(m_panel.get()); + + m_returnToRealtimeButton = MediaControlReturnToRealtimeButtonElement::create(mediaElement); + m_returnToRealtimeButton->attachToParent(m_panel.get()); + + m_statusDisplay = MediaControlStatusDisplayElement::create(mediaElement); + m_statusDisplay->attachToParent(m_panel.get()); + + m_timelineContainer = MediaControlTimelineContainerElement::create(mediaElement); + + m_currentTimeDisplay = MediaControlCurrentTimeDisplayElement::create(mediaElement); + m_currentTimeDisplay->attachToParent(m_timelineContainer.get()); + + m_timeline = MediaControlTimelineElement::create(mediaElement); + m_timeline->attachToParent(m_timelineContainer.get()); + + m_timeRemainingDisplay = MediaControlTimeRemainingDisplayElement::create(mediaElement); + m_timeRemainingDisplay->attachToParent(m_timelineContainer.get()); + + m_timelineContainer->attachToParent(m_panel.get()); + + m_seekBackButton = MediaControlSeekBackButtonElement::create(mediaElement); + m_seekBackButton->attachToParent(m_panel.get()); + + m_seekForwardButton = MediaControlSeekForwardButtonElement::create(mediaElement); + m_seekForwardButton->attachToParent(m_panel.get()); + + m_toggleClosedCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(mediaElement); + m_toggleClosedCaptionsButton->attachToParent(m_panel.get()); + + m_fullscreenButton = MediaControlFullscreenButtonElement::create(mediaElement); + m_fullscreenButton->attachToParent(m_panel.get()); + + m_muteButton = MediaControlPanelMuteButtonElement::create(mediaElement); + m_muteButton->attachToParent(m_panel.get()); + + m_volumeSliderContainer = MediaControlVolumeSliderContainerElement::create(mediaElement); + + m_volumeSlider = MediaControlVolumeSliderElement::create(mediaElement); + m_volumeSlider->attachToParent(m_volumeSliderContainer.get()); + + m_volumeSliderMuteButton = MediaControlVolumeSliderMuteButtonElement::create(mediaElement); + m_volumeSliderMuteButton->attachToParent(m_volumeSliderContainer.get()); + + m_volumeSliderContainer->attachToParent(m_panel.get()); + + // FIXME: These controls, and others, should be created dynamically when needed, instead of + // always created. <http://webkit.org/b/57163> + m_fullScreenMinVolumeButton = MediaControlFullscreenVolumeMinButtonElement::create(mediaElement); + m_fullScreenMinVolumeButton->attachToParent(m_panel.get()); + + m_fullScreenVolumeSlider = MediaControlFullscreenVolumeSliderElement::create(mediaElement); + m_fullScreenVolumeSlider->attachToParent(m_panel.get()); + + m_fullScreenMaxVolumeButton = MediaControlFullscreenVolumeMaxButtonElement::create(mediaElement); + m_fullScreenMaxVolumeButton->attachToParent(m_panel.get()); + + m_panel->attachToParent(controls.get()); + return controls.release(); +} + +void MediaControls::reset() +{ + update(); +} + +void MediaControls::playbackProgressed() +{ + if (m_timeline) + m_timeline->update(false); + updateTimeDisplay(); +} + +void MediaControls::playbackStarted() +{ + playbackProgressed(); +} + +void MediaControls::playbackStopped() +{ + playbackProgressed(); +} + +void MediaControls::changedMute() +{ + update(); +} + +void MediaControls::changedVolume() +{ + update(); +} + +void MediaControls::changedClosedCaptionsVisibility() +{ + update(); +} + void MediaControls::updateStyle() { if (!m_controlsShadowRoot) @@ -109,6 +238,12 @@ void MediaControls::updateStyle() m_volumeSliderMuteButton->updateStyle(); if (m_volumeSlider) m_volumeSlider->updateStyle(); + if (m_fullScreenMinVolumeButton) + m_fullScreenMinVolumeButton->updateStyle(); + if (m_fullScreenVolumeSlider) + m_fullScreenVolumeSlider->updateStyle(); + if (m_fullScreenMaxVolumeButton) + m_fullScreenMaxVolumeButton->updateStyle(); } void MediaControls::destroy() @@ -151,46 +286,19 @@ void MediaControls::update() m_volumeSliderMuteButton = 0; m_controlsShadowRoot = 0; m_toggleClosedCaptionsButton = 0; + m_fullScreenMinVolumeButton = 0; + m_fullScreenVolumeSlider = 0; + m_fullScreenMaxVolumeButton = 0; } m_opacityAnimationTo = 1.0f; m_opacityAnimationTimer.stop(); - m_timeUpdateTimer.stop(); return; } if (!m_controlsShadowRoot) { - createControlsShadowRoot(); - createPanel(); - if (m_panel) { - createRewindButton(); - createPlayButton(); - createReturnToRealtimeButton(); - createStatusDisplay(); - createTimelineContainer(); - if (m_timelineContainer) { - createCurrentTimeDisplay(); - createTimeline(); - createTimeRemainingDisplay(); - } - createSeekBackButton(); - createSeekForwardButton(); - createToggleClosedCaptionsButton(); - createFullscreenButton(); - createMuteButton(); - createVolumeSliderContainer(); - if (m_volumeSliderContainer) { - createVolumeSlider(); - createVolumeSliderMuteButton(); - } - m_panel->attach(); - } - } - - if (media->canPlay()) { - if (m_timeUpdateTimer.isActive()) - m_timeUpdateTimer.stop(); - } else if (media->renderer()->style()->visibility() == VISIBLE && m_timeline && m_timeline->renderer() && m_timeline->renderer()->style()->display() != NONE) { - m_timeUpdateTimer.startRepeating(cTimeUpdateRepeatDelay); + m_controlsShadowRoot = create(m_mediaElement); + m_mediaElement->renderer()->addChild(m_controlsShadowRoot->renderer()); + m_panel->attach(); } if (m_panel) { @@ -232,148 +340,16 @@ void MediaControls::update() m_volumeSlider->update(); if (m_volumeSliderMuteButton) m_volumeSliderMuteButton->update(); - + if (m_fullScreenMinVolumeButton) + m_fullScreenMinVolumeButton->update(); + if (m_fullScreenVolumeSlider) + m_fullScreenVolumeSlider->update(); + if (m_fullScreenMaxVolumeButton) + m_fullScreenMaxVolumeButton->update(); updateTimeDisplay(); updateControlVisibility(); } -void MediaControls::createControlsShadowRoot() -{ - ASSERT(!m_controlsShadowRoot); - m_controlsShadowRoot = MediaControlShadowRootElement::create(m_mediaElement); - m_mediaElement->renderer()->addChild(m_controlsShadowRoot->renderer()); -} - -void MediaControls::createPanel() -{ - ASSERT(!m_panel); - m_panel = MediaControlPanelElement::create(m_mediaElement); - m_panel->attachToParent(m_controlsShadowRoot.get()); -} - -void MediaControls::createMuteButton() -{ - ASSERT(!m_muteButton); - m_muteButton = MediaControlPanelMuteButtonElement::create(m_mediaElement); - m_muteButton->attachToParent(m_panel.get()); -} - -void MediaControls::createPlayButton() -{ - ASSERT(!m_playButton); - m_playButton = MediaControlPlayButtonElement::create(m_mediaElement); - m_playButton->attachToParent(m_panel.get()); -} - -void MediaControls::createSeekBackButton() -{ - ASSERT(!m_seekBackButton); - m_seekBackButton = MediaControlSeekBackButtonElement::create(m_mediaElement); - m_seekBackButton->attachToParent(m_panel.get()); -} - -void MediaControls::createSeekForwardButton() -{ - ASSERT(!m_seekForwardButton); - m_seekForwardButton = MediaControlSeekForwardButtonElement::create(m_mediaElement); - m_seekForwardButton->attachToParent(m_panel.get()); -} - -void MediaControls::createRewindButton() -{ - ASSERT(!m_rewindButton); - m_rewindButton = MediaControlRewindButtonElement::create(m_mediaElement); - m_rewindButton->attachToParent(m_panel.get()); -} - -void MediaControls::createReturnToRealtimeButton() -{ - ASSERT(!m_returnToRealtimeButton); - m_returnToRealtimeButton = MediaControlReturnToRealtimeButtonElement::create(m_mediaElement); - m_returnToRealtimeButton->attachToParent(m_panel.get()); -} - -void MediaControls::createToggleClosedCaptionsButton() -{ - ASSERT(!m_toggleClosedCaptionsButton); - m_toggleClosedCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(m_mediaElement); - m_toggleClosedCaptionsButton->attachToParent(m_panel.get()); -} - -void MediaControls::createStatusDisplay() -{ - ASSERT(!m_statusDisplay); - m_statusDisplay = MediaControlStatusDisplayElement::create(m_mediaElement); - m_statusDisplay->attachToParent(m_panel.get()); -} - -void MediaControls::createTimelineContainer() -{ - ASSERT(!m_timelineContainer); - m_timelineContainer = MediaControlTimelineContainerElement::create(m_mediaElement); - m_timelineContainer->attachToParent(m_panel.get()); -} - -void MediaControls::createTimeline() -{ - ASSERT(!m_timeline); - m_timeline = MediaControlTimelineElement::create(m_mediaElement); - m_timeline->setAttribute(precisionAttr, "float"); - m_timeline->attachToParent(m_timelineContainer.get()); -} - -void MediaControls::createVolumeSliderContainer() -{ - ASSERT(!m_volumeSliderContainer); - m_volumeSliderContainer = MediaControlVolumeSliderContainerElement::create(m_mediaElement); - m_volumeSliderContainer->attachToParent(m_panel.get()); -} - -void MediaControls::createVolumeSlider() -{ - ASSERT(!m_volumeSlider); - m_volumeSlider = MediaControlVolumeSliderElement::create(m_mediaElement); - m_volumeSlider->setAttribute(precisionAttr, "float"); - m_volumeSlider->setAttribute(maxAttr, "1"); - m_volumeSlider->setAttribute(valueAttr, String::number(m_mediaElement->volume())); - m_volumeSlider->attachToParent(m_volumeSliderContainer.get()); -} - -void MediaControls::createVolumeSliderMuteButton() -{ - ASSERT(!m_volumeSliderMuteButton); - m_volumeSliderMuteButton = MediaControlVolumeSliderMuteButtonElement::create(m_mediaElement); - m_volumeSliderMuteButton->attachToParent(m_volumeSliderContainer.get()); -} - -void MediaControls::createCurrentTimeDisplay() -{ - ASSERT(!m_currentTimeDisplay); - m_currentTimeDisplay = MediaControlCurrentTimeDisplayElement::create(m_mediaElement); - m_currentTimeDisplay->attachToParent(m_timelineContainer.get()); -} - -void MediaControls::createTimeRemainingDisplay() -{ - ASSERT(!m_timeRemainingDisplay); - m_timeRemainingDisplay = MediaControlTimeRemainingDisplayElement::create(m_mediaElement); - m_timeRemainingDisplay->attachToParent(m_timelineContainer.get()); -} - -void MediaControls::createFullscreenButton() -{ - ASSERT(!m_fullscreenButton); - m_fullscreenButton = MediaControlFullscreenButtonElement::create(m_mediaElement); - m_fullscreenButton->attachToParent(m_panel.get()); -} - -void MediaControls::timeUpdateTimerFired(Timer<MediaControls>*) -{ - if (m_timeline) - m_timeline->update(false); - updateTimeDisplay(); -} - void MediaControls::updateTimeDisplay() { ASSERT(m_mediaElement->renderer()); @@ -480,13 +456,6 @@ void MediaControls::updateVolumeSliderContainer(bool visible) return; RefPtr<RenderStyle> s = m_volumeSliderContainer->styleForElement(); - int height = s->height().isPercent() ? 0 : s->height().value(); - int width = s->width().isPercent() ? 0 : s->width().value(); - IntPoint offset = m_mediaElement->document()->page()->theme()->volumeSliderOffsetFromMuteButton(m_muteButton->renderBox(), IntSize(width, height)); - int x = offset.x() + m_muteButton->renderBox()->offsetLeft(); - int y = offset.y() + m_muteButton->renderBox()->offsetTop(); - - m_volumeSliderContainer->setPosition(x, y); m_volumeSliderContainer->setVisible(true); m_volumeSliderContainer->update(); m_volumeSlider->update(); @@ -588,6 +557,7 @@ void MediaControls::forwardEvent(Event* event) #endif } +<<<<<<< HEAD // We want the timeline slider to be at least 100 pixels wide. static const int minWidthToDisplayTimeDisplays = 16 + 16 + 45 + 100 + 45 + 16 + 1; @@ -612,6 +582,8 @@ void MediaControls::updateLastTouch() } #endif +======= +>>>>>>> webkit.org at r82507 } #endif diff --git a/Source/WebCore/html/shadow/MediaControls.h b/Source/WebCore/html/shadow/MediaControls.h index a4fbbd6..726573e 100644 --- a/Source/WebCore/html/shadow/MediaControls.h +++ b/Source/WebCore/html/shadow/MediaControls.h @@ -53,6 +53,9 @@ class MediaControlStatusDisplayElement; class MediaControlTimelineContainerElement; class MediaControlVolumeSliderContainerElement; class MediaControlElement; +class MediaControlFullscreenVolumeMinButtonElement; +class MediaControlFullscreenVolumeSliderElement; +class MediaControlFullscreenVolumeMaxButtonElement; class MediaPlayer; class RenderBox; @@ -62,12 +65,21 @@ class MediaControls { public: MediaControls(HTMLMediaElement*); + void reset(); + + void playbackProgressed(); + void playbackStarted(); + void playbackStopped(); + + void changedMute(); + void changedVolume(); + void changedClosedCaptionsVisibility(); + void destroy(); void update(); void updateStyle(); void forwardEvent(Event*); void updateTimeDisplay(); - void updateTimeDisplayVisibility(); // FIXME: This is temporary to allow RenderMedia::layout tweak the position of controls. // Once shadow DOM refactoring is complete, the tweaking will be in MediaControlsShadowRoot and this accessor will no longer be necessary. @@ -78,27 +90,7 @@ public: #endif private: - void createControlsShadowRoot(); - void destroyControlsShadowRoot(); - void createPanel(); - void createMuteButton(); - void createPlayButton(); - void createSeekBackButton(); - void createSeekForwardButton(); - void createRewindButton(); - void createReturnToRealtimeButton(); - void createToggleClosedCaptionsButton(); - void createStatusDisplay(); - void createTimelineContainer(); - void createTimeline(); - void createVolumeSliderContainer(); - void createVolumeSlider(); - void createVolumeSliderMuteButton(); - void createCurrentTimeDisplay(); - void createTimeRemainingDisplay(); - void createFullscreenButton(); - - void timeUpdateTimerFired(Timer<MediaControls>*); + PassRefPtr<MediaControlShadowRootElement> create(HTMLMediaElement*); void updateControlVisibility(); void changeOpacity(HTMLElement*, float opacity); @@ -125,9 +117,11 @@ private: RefPtr<MediaControlTimeDisplayElement> m_currentTimeDisplay; RefPtr<MediaControlTimeDisplayElement> m_timeRemainingDisplay; RefPtr<MediaControlStatusDisplayElement> m_statusDisplay; + RefPtr<MediaControlFullscreenVolumeMinButtonElement> m_fullScreenMinVolumeButton; + RefPtr<MediaControlFullscreenVolumeSliderElement> m_fullScreenVolumeSlider; + RefPtr<MediaControlFullscreenVolumeMaxButtonElement> m_fullScreenMaxVolumeButton; HTMLMediaElement* m_mediaElement; - Timer<MediaControls> m_timeUpdateTimer; Timer<MediaControls> m_opacityAnimationTimer; double m_opacityAnimationStartTime; diff --git a/Source/WebCore/html/shadow/SliderThumbElement.cpp b/Source/WebCore/html/shadow/SliderThumbElement.cpp index 2c049cb..d1aa15e 100644 --- a/Source/WebCore/html/shadow/SliderThumbElement.cpp +++ b/Source/WebCore/html/shadow/SliderThumbElement.cpp @@ -56,6 +56,8 @@ namespace WebCore { class RenderSliderThumb : public RenderBlock { public: RenderSliderThumb(Node*); + +private: virtual void layout(); }; @@ -85,6 +87,16 @@ void RenderSliderThumb::layout() RenderBlock::layout(); } +void SliderThumbElement::setPositionFromValue() +{ + // Since today the code to calculate position is in the RenderSlider layout + // path, we don't actually update the value here. Instead, we poke at the + // renderer directly to trigger layout. + // FIXME: Move the logic of positioning the thumb here. + if (renderer()) + renderer()->setNeedsLayout(true); +} + RenderObject* SliderThumbElement::createRenderer(RenderArena* arena, RenderStyle*) { return new (arena) RenderSliderThumb(this); @@ -92,11 +104,11 @@ RenderObject* SliderThumbElement::createRenderer(RenderArena* arena, RenderStyle void SliderThumbElement::dragFrom(const IntPoint& point) { - setPosition(point); + setPositionFromPoint(point); startDragging(); } -void SliderThumbElement::setPosition(const IntPoint& point) +void SliderThumbElement::setPositionFromPoint(const IntPoint& point) { HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowHost()); ASSERT(input); @@ -212,6 +224,7 @@ void SliderThumbElement::defaultEventHandler(Event* event) #endif ) { if (m_inDragMode) +<<<<<<< HEAD #if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) { if (event->isMouseEvent()) { @@ -233,6 +246,9 @@ void SliderThumbElement::defaultEventHandler(Event* event) } #endif +======= + setPositionFromPoint(mouseEvent->absoluteLocation()); +>>>>>>> webkit.org at r82507 return; } diff --git a/Source/WebCore/html/shadow/SliderThumbElement.h b/Source/WebCore/html/shadow/SliderThumbElement.h index 7c4c179..9414ac4 100644 --- a/Source/WebCore/html/shadow/SliderThumbElement.h +++ b/Source/WebCore/html/shadow/SliderThumbElement.h @@ -49,6 +49,7 @@ public: static PassRefPtr<SliderThumbElement> create(Document*); bool inDragMode() const { return m_inDragMode; } + void setPositionFromValue(); void dragFrom(const IntPoint&); virtual void defaultEventHandler(Event*); @@ -60,7 +61,7 @@ private: virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); void startDragging(); void stopDragging(); - void setPosition(const IntPoint&); + void setPositionFromPoint(const IntPoint&); FloatPoint m_offsetToThumb; bool m_inDragMode; |
