Index: Source/core/html/shadow/MediaControls.cpp |
diff --git a/Source/core/html/shadow/MediaControls.cpp b/Source/core/html/shadow/MediaControls.cpp |
index 43d22a4cf8f2bc617013e90ffb0185038d8b74aa..d805b62582d38a9194ff147dd8139a77cb75074c 100644 |
--- a/Source/core/html/shadow/MediaControls.cpp |
+++ b/Source/core/html/shadow/MediaControls.cpp |
@@ -89,9 +89,9 @@ PassRefPtrWillBeRawPtr<MediaControls> MediaControls::create(HTMLMediaElement& me |
// \-MediaControlPanelEnclosureElement (-webkit-media-controls-enclosure) |
// \-MediaControlPanelElement (-webkit-media-controls-panel) |
// +-MediaControlPlayButtonElement (-webkit-media-controls-play-button) |
-// +-MediaControlTimelineElement (-webkit-media-controls-timeline) |
// +-MediaControlCurrentTimeDisplayElement (-webkit-media-controls-current-time-display) |
// +-MediaControlTimeRemainingDisplayElement (-webkit-media-controls-time-remaining-display) |
+// +-MediaControlTimelineElement (-webkit-media-controls-timeline) |
// +-MediaControlMuteButtonElement (-webkit-media-controls-mute-button) |
// +-MediaControlVolumeSliderElement (-webkit-media-controls-volume-slider) |
// +-MediaControlToggleClosedCaptionsButtonElement (-webkit-media-controls-toggle-closed-captions-button) |
@@ -125,24 +125,41 @@ void MediaControls::initializeControls() |
RefPtrWillBeRawPtr<MediaControlTimelineElement> timeline = MediaControlTimelineElement::create(*this); |
m_timeline = timeline.get(); |
- panel->appendChild(timeline.release()); |
+ // In old UX, timeline is before the time / duration text. |
+ if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) |
+ panel->appendChild(timeline.release()); |
+ // else we will attach it later. |
RefPtrWillBeRawPtr<MediaControlCurrentTimeDisplayElement> currentTimeDisplay = MediaControlCurrentTimeDisplayElement::create(*this); |
m_currentTimeDisplay = currentTimeDisplay.get(); |
- m_currentTimeDisplay->hide(); |
+ if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) |
+ m_currentTimeDisplay->hide(); |
+ |
panel->appendChild(currentTimeDisplay.release()); |
RefPtrWillBeRawPtr<MediaControlTimeRemainingDisplayElement> durationDisplay = MediaControlTimeRemainingDisplayElement::create(*this); |
m_durationDisplay = durationDisplay.get(); |
panel->appendChild(durationDisplay.release()); |
+ // In new UX, timeline is after the time / duration text. |
+ if (RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) |
+ panel->appendChild(timeline.release()); |
+ |
RefPtrWillBeRawPtr<MediaControlMuteButtonElement> muteButton = MediaControlMuteButtonElement::create(*this); |
m_muteButton = muteButton.get(); |
panel->appendChild(muteButton.release()); |
+#if OS(ANDROID) |
DaleCurtis
2015/06/11 00:54:29
Seems like this should be more a function of viewp
liberato (no reviews please)
2015/06/11 01:06:52
it's part of the spec -- hide this on android, sin
|
+ if (RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) |
+ m_muteButton->hide(); |
+#endif |
RefPtrWillBeRawPtr<MediaControlVolumeSliderElement> slider = MediaControlVolumeSliderElement::create(*this); |
m_volumeSlider = slider.get(); |
panel->appendChild(slider.release()); |
+#if OS(ANDROID) |
+ if (RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) |
+ m_volumeSlider->hide(); |
+#endif |
RefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> toggleClosedCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(*this); |
m_toggleClosedCaptionsButton = toggleClosedCaptionsButton.get(); |
@@ -169,6 +186,17 @@ void MediaControls::reset() |
m_durationDisplay->setInnerText(LayoutTheme::theme().formatMediaControlsTime(duration), ASSERT_NO_EXCEPTION); |
m_durationDisplay->setCurrentValue(duration); |
+ if (RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) { |
+ // Show everything that we might hide. |
+ // If we don't have a duration, then hide it. |
+ if (std::isfinite(duration)) |
+ m_durationDisplay->show(); |
+ else |
+ m_durationDisplay->hide(); |
+ m_currentTimeDisplay->show(); |
+ m_timeline->show(); |
+ } |
+ |
updatePlayState(); |
updateCurrentTimeDisplay(); |
@@ -176,10 +204,19 @@ void MediaControls::reset() |
m_timeline->setDuration(duration); |
m_timeline->setPosition(mediaElement().currentTime()); |
- if (!mediaElement().hasAudio()) |
+ if (!mediaElement().hasAudio()) { |
m_volumeSlider->hide(); |
- else |
+ } else { |
+#if OS(ANDROID) |
+ // New UI always hides the volume slider on Android. |
+ if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) |
+ m_volumeSlider->show(); |
+ else |
+ m_volumeSlider->hide(); |
+#else |
m_volumeSlider->show(); |
+#endif |
+ } |
updateVolume(); |
refreshClosedCaptionsButtonVisibility(); |
@@ -190,6 +227,7 @@ void MediaControls::reset() |
m_fullScreenButton->hide(); |
refreshCastButtonVisibility(); |
+ hideControlsForSpace(); |
makeOpaque(); |
} |
@@ -257,8 +295,10 @@ bool MediaControls::shouldHideMediaControls(unsigned behaviorFlags) const |
void MediaControls::playbackStarted() |
{ |
- m_currentTimeDisplay->show(); |
- m_durationDisplay->hide(); |
+ if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) { |
+ m_currentTimeDisplay->show(); |
+ m_durationDisplay->hide(); |
+ } |
updatePlayState(); |
m_timeline->setPosition(mediaElement().currentTime()); |
@@ -319,7 +359,7 @@ void MediaControls::updateCurrentTimeDisplay() |
double duration = mediaElement().duration(); |
// After seek, hide duration display and show current time. |
- if (now > 0) { |
+ if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled() && now > 0) { |
m_currentTimeDisplay->show(); |
m_durationDisplay->hide(); |
} |
@@ -399,6 +439,8 @@ void MediaControls::refreshCastButtonVisibility() |
m_castButton->hide(); |
m_overlayCastButton->hide(); |
} |
+ |
+ hideControlsForSpace(); |
} |
void MediaControls::showOverlayCastButton() |
@@ -519,6 +561,48 @@ bool MediaControls::containsRelatedTarget(Event* event) |
return contains(relatedTarget->toNode()); |
} |
+void MediaControls::hideControlsForSpace() |
+{ |
+ // Hide all controls that don't fit. |
+ // The order, in order of decreasing droppiness: |
+ // Volume, time, seek bar, cast. |
+ |
+ // In the old UI, don't do this. |
+ if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) |
+ return; |
+ |
+ int panelWidth = m_panel->clientWidth(); |
+ if (panelWidth == 0) |
+ return; |
+ |
+ // we should just memorize the requirements of each. |
+ // cases: Vol Time Slider Cast |
+ // Time Slider Cast |
+ // Vol Time Slider |
+ // Time Slider |
+ |
+ // The cast button is the only variable. If it's shown, then subtract it |
+ // from the available space. Note that because we don't re-show the other |
+ // controls, this is stable. |
+ if (m_castButton->isShown()) |
+ panelWidth -= 48; |
+ |
+ // TODO(liberato): get confirmation from spec on these values. |
+ if (panelWidth < 350) |
+ m_volumeSlider->hide(); |
+ |
+ if (panelWidth < 300) { |
+ m_currentTimeDisplay->hide(); |
+ m_durationDisplay->hide(); |
+ } |
+ |
+ if (panelWidth < 200) |
+ m_timeline->hide(); |
+ |
+ if (panelWidth < 150) |
+ m_castButton->hide(); |
+} |
+ |
DEFINE_TRACE(MediaControls) |
{ |
visitor->trace(m_mediaElement); |