Changeset 127035 in webkit
- Timestamp:
- Aug 29, 2012 1:03:11 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r127033 r127035 1 2012-08-29 Anna Cavender <annacc@chromium.org> 2 3 Create a toggle button for closed captions. 4 https://bugs.webkit.org/show_bug.cgi?id=94395 5 6 Reviewed by Eric Carlson. 7 8 This patch will create a button that toggles any captions or subtitles on or off. 9 10 * media/video-controls-captions-expected.txt: Added. 11 * media/video-controls-captions.html: Added. 12 1 13 2012-08-29 Zhenyao Mo <zmo@google.com> 2 14 -
trunk/Source/WebCore/ChangeLog
r127032 r127035 1 2012-08-29 Anna Cavender <annacc@chromium.org> 2 3 Create a toggle button for closed captions. 4 https://bugs.webkit.org/show_bug.cgi?id=94395 5 6 Reviewed by Eric Carlson. 7 8 This patch will create a button that toggles any captions or subtitles on or off. 9 10 Test: media/video-controls-captions.html 11 12 * css/mediaControlsChromium.css: 13 (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button): 14 New style for new button. 15 16 * html/HTMLMediaElement.cpp: 17 (WebCore::HTMLMediaElement::HTMLMediaElement): 18 Initialize new variable for keeping track of user (button) disabled captions. 19 20 (WebCore::HTMLMediaElement::loadTimerFired): 21 Rename configureNewTextTracks() to configureTextTracks(). 22 23 (WebCore::HTMLMediaElement::prepareForLoad): 24 Do not set closedCaptionsVisible to false, we should instead honor the 25 checks for default out-of-band tracks. 26 27 (WebCore::HTMLMediaElement::textTrackModeChanged): 28 Rename configureNewTextTracks() to configureTextTracks(). 29 30 (WebCore::HTMLMediaElement::userIsInterestedInThisTrackKind): 31 Add checks for when user has requested to see or not see captions. 32 33 (WebCore::HTMLMediaElement::configureTextTracks): 34 Rename configureNewTextTracks() to configureTextTracks(). 35 36 (WebCore::HTMLMediaElement::hasClosedCaptions): 37 Return true if we have any caption or subtitle text tracks. 38 39 (WebCore::HTMLMediaElement::setClosedCaptionsVisible): 40 Update the text track display and the closed captions button when the 41 closed captions button is toggled. 42 43 (WebCore::HTMLMediaElement::configureTextTrackDisplay): 44 If the visibility of any text tracks has changed, update the display and 45 the controls. 46 47 (WebCore::HTMLMediaElement::updateClosedCaptionsControls): 48 New function that updates both the text track display and the closed 49 captions button. 50 51 * html/HTMLMediaElement.h: 52 (HTMLMediaElement): 53 New function updateClosedCaptionsControls() 54 55 Adding the button: 56 * html/shadow/MediaControlRootElementChromium.cpp: 57 (WebCore::MediaControlRootElementChromium::MediaControlRootElementChromium): 58 (WebCore::MediaControlRootElementChromium::initializeControls): 59 (WebCore::MediaControlRootElementChromium::setMediaController): 60 (WebCore::MediaControlRootElementChromium::reset): 61 (WebCore::MediaControlRootElementChromium::reportedError): 62 (WebCore::MediaControlRootElementChromium::changedClosedCaptionsVisibility): 63 (WebCore::MediaControlRootElementChromium::createTextTrackDisplay): 64 * html/shadow/MediaControlRootElementChromium.h: 65 (WebCore): 66 (MediaControlRootElementChromium): 67 68 Ensure that Linux and Windows render themes will support closed captions: 69 * rendering/RenderThemeChromiumSkia.cpp: 70 (WebCore): 71 (WebCore::supportsClosedCaptioning): 72 * rendering/RenderThemeChromiumSkia.h: 73 (RenderThemeChromiumSkia): 74 1 75 2012-08-29 Jessie Berlin <jberlin@apple.com> 2 76 -
trunk/Source/WebCore/css/mediaControlsChromium.css
r123259 r127035 179 179 } 180 180 181 audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button { 182 -webkit-appearance: media-toggle-closed-captions-button; 183 display: -webkit-box; 184 border: none; 185 box-sizing: border-box; 186 width: 25px; 187 height: 25px; 188 line-height: 25px; 189 margin-left: -5px; 190 margin-right: 9px; 191 padding: 0; 192 } 193 181 194 audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button { 182 195 -webkit-appearance: media-enter-fullscreen-button; -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r126842 r127035 260 260 , m_textTracks(0) 261 261 , m_ignoreTrackDisplayUpdate(0) 262 , m_disableCaptions(false) 262 263 #endif 263 264 #if ENABLE(WEB_AUDIO) … … 595 596 #if ENABLE(VIDEO_TRACK) 596 597 if (RuntimeEnabledFeatures::webkitVideoTrackEnabled() && (m_pendingLoadFlags & TextTrackResource)) 597 configure NewTextTracks();598 configureTextTracks(); 598 599 #endif 599 600 … … 742 743 m_playedTimeRanges = TimeRanges::create(); 743 744 m_lastSeekTime = 0; 744 m_closedCaptionsVisible = false;745 745 746 746 // The spec doesn't say to block the load event until we actually run the asynchronous section … … 1299 1299 continue; 1300 1300 1301 // Mark this track as "configured" so configure NewTextTracks won't change the mode again.1301 // Mark this track as "configured" so configureTextTracks won't change the mode again. 1302 1302 trackElement->setHasBeenConfigured(true); 1303 1303 if (track->mode() != TextTrack::disabledKeyword()) { … … 2791 2791 { 2792 2792 // If ... the user has indicated an interest in having a track with this text track kind, text track language, ... 2793 if (m_disableCaptions) 2794 return false; 2795 2793 2796 Settings* settings = document()->settings(); 2794 2797 if (!settings) … … 2796 2799 2797 2800 if (kind == TextTrack::subtitlesKeyword()) 2798 return settings->shouldDisplaySubtitles() ;2801 return settings->shouldDisplaySubtitles() || m_closedCaptionsVisible; 2799 2802 if (kind == TextTrack::captionsKeyword()) 2800 return settings->shouldDisplayCaptions() ;2803 return settings->shouldDisplayCaptions() || m_closedCaptionsVisible; 2801 2804 if (kind == TextTrack::descriptionsKeyword()) 2802 return settings->shouldDisplayTextDescriptions() ;2805 return settings->shouldDisplayTextDescriptions() || m_closedCaptionsVisible; 2803 2806 2804 2807 return false; … … 2896 2899 } 2897 2900 2898 void HTMLMediaElement::configure NewTextTracks()2901 void HTMLMediaElement::configureTextTracks() 2899 2902 { 2900 2903 TrackGroup captionAndSubtitleTracks(TrackGroup::CaptionsAndSubtitles); … … 3924 3927 bool HTMLMediaElement::hasClosedCaptions() const 3925 3928 { 3926 return m_player && m_player->hasClosedCaptions(); 3929 if (m_player && m_player->hasClosedCaptions()) 3930 return true; 3931 3932 #if ENABLE(VIDEO_TRACK) 3933 if (RuntimeEnabledFeatures::webkitVideoTrackEnabled() && m_textTracks) 3934 for (unsigned i = 0; i < m_textTracks->length(); ++i) { 3935 if (m_textTracks->item(i)->kind() == TextTrack::captionsKeyword() 3936 || m_textTracks->item(i)->kind() == TextTrack::subtitlesKeyword()) 3937 return true; 3938 } 3939 #endif 3940 return false; 3927 3941 } 3928 3942 … … 3936 3950 LOG(Media, "HTMLMediaElement::setClosedCaptionsVisible(%s)", boolString(closedCaptionVisible)); 3937 3951 3938 if (!m_player || !hasClosedCaptions())3952 if (!m_player || !hasClosedCaptions()) 3939 3953 return; 3940 3954 3941 3955 m_closedCaptionsVisible = closedCaptionVisible; 3942 3956 m_player->setClosedCaptionsVisible(closedCaptionVisible); 3957 3958 #if ENABLE(VIDEO_TRACK) 3959 if (RuntimeEnabledFeatures::webkitVideoTrackEnabled()) { 3960 m_disableCaptions = !m_closedCaptionsVisible; 3961 3962 // Mark all track elements as not "configured" so that configureTextTracks() 3963 // will reconsider which tracks to display in light of new user preferences 3964 // (e.g. default tracks should not be displayed if the user has turned off 3965 // captions and non-default tracks should be displayed based on language 3966 // preferences if the user has turned captions on). 3967 for (Node* node = firstChild(); node; node = node->nextSibling()) { 3968 if (!node->hasTagName(trackTag)) 3969 continue; 3970 HTMLTrackElement* trackElement = static_cast<HTMLTrackElement*>(node); 3971 if (trackElement->kind() == TextTrack::captionsKeyword() 3972 || trackElement->kind() == TextTrack::subtitlesKeyword()) 3973 trackElement->setHasBeenConfigured(false); 3974 } 3975 3976 configureTextTracks(); 3977 } 3978 #else 3943 3979 if (hasMediaControls()) 3944 3980 mediaControls()->changedClosedCaptionsVisibility(); 3981 #endif 3945 3982 } 3946 3983 … … 4106 4143 return; 4107 4144 m_haveVisibleTextTrack = haveVisibleTextTrack; 4145 m_closedCaptionsVisible = m_haveVisibleTextTrack; 4108 4146 4109 4147 if (!m_haveVisibleTextTrack && !hasMediaControls()) … … 4111 4149 if (!hasMediaControls() && !createMediaControls()) 4112 4150 return; 4113 mediaControls()->updateTextTrackDisplay(); 4151 4152 updateClosedCaptionsControls(); 4153 } 4154 4155 void HTMLMediaElement::updateClosedCaptionsControls() 4156 { 4157 if (hasMediaControls()) { 4158 mediaControls()->changedClosedCaptionsVisibility(); 4159 4160 if (RuntimeEnabledFeatures::webkitVideoTrackEnabled()) 4161 mediaControls()->updateTextTrackDisplay(); 4162 } 4114 4163 } 4115 4164 #endif -
trunk/Source/WebCore/html/HTMLMediaElement.h
r126842 r127035 237 237 238 238 void configureTextTrackGroupForLanguage(const TrackGroup&) const; 239 void configure NewTextTracks();239 void configureTextTracks(); 240 240 void configureTextTrackGroup(const TrackGroup&) const; 241 241 … … 243 243 bool textTracksAreReady() const; 244 244 void configureTextTrackDisplay(); 245 void updateClosedCaptionsControls(); 245 246 246 247 // TextTrackClient … … 655 656 CueList m_currentlyActiveCues; 656 657 int m_ignoreTrackDisplayUpdate; 658 bool m_disableCaptions; 657 659 #endif 658 660 -
trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp
r123969 r127035 85 85 , m_panelMuteButton(0) 86 86 , m_volumeSlider(0) 87 , m_toggleClosedCaptionsButton(0) 87 88 , m_fullscreenButton(0) 88 89 , m_panel(0) … … 164 165 if (ec) 165 166 return false; 167 168 if (document->page()->theme()->supportsClosedCaptioning()) { 169 RefPtr<MediaControlToggleClosedCaptionsButtonElement> toggleClosedCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(document); 170 m_toggleClosedCaptionsButton = toggleClosedCaptionsButton.get(); 171 panel->appendChild(toggleClosedCaptionsButton.release(), ec, true); 172 if (ec) 173 return false; 174 } 166 175 167 176 RefPtr<MediaControlFullscreenButtonElement> fullscreenButton = MediaControlFullscreenButtonElement::create(document, this); … … 202 211 if (m_volumeSlider) 203 212 m_volumeSlider->setMediaController(controller); 213 if (m_toggleClosedCaptionsButton) 214 m_toggleClosedCaptionsButton->setMediaController(controller); 204 215 if (m_fullscreenButton) 205 216 m_fullscreenButton->setMediaController(controller); … … 266 277 } 267 278 279 if (m_toggleClosedCaptionsButton) { 280 if (m_mediaController->hasClosedCaptions()) 281 m_toggleClosedCaptionsButton->show(); 282 else 283 m_toggleClosedCaptionsButton->hide(); 284 } 285 268 286 if (m_mediaController->supportsFullscreen() && m_mediaController->hasVideo()) 269 287 m_fullscreenButton->show(); … … 333 351 m_panelMuteButton->hide(); 334 352 m_volumeSlider->hide(); 353 if (m_toggleClosedCaptionsButton) 354 m_toggleClosedCaptionsButton->hide(); 335 355 m_fullscreenButton->hide(); 336 356 } … … 418 438 void MediaControlRootElementChromium::changedClosedCaptionsVisibility() 419 439 { 440 if (m_toggleClosedCaptionsButton) 441 m_toggleClosedCaptionsButton->updateDisplayType(); 420 442 } 421 443 … … 466 488 m_textDisplayContainer = textDisplayContainer.get(); 467 489 490 if (m_mediaController) 491 m_textDisplayContainer->setMediaController(m_mediaController); 492 468 493 // Insert it before the first controller element so it always displays behind the controls. 469 494 insertBefore(textDisplayContainer.release(), m_enclosure, ASSERT_NO_EXCEPTION, true); -
trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.h
r123969 r127035 45 45 class MediaControlTimelineElement; 46 46 class MediaControlVolumeSliderElement; 47 class MediaControlToggleClosedCaptionsButtonElement; 47 48 class MediaControlFullscreenButtonElement; 48 49 class MediaControlTimeDisplayElement; … … 147 148 MediaControlPanelMuteButtonElement* m_panelMuteButton; 148 149 MediaControlVolumeSliderElement* m_volumeSlider; 150 MediaControlToggleClosedCaptionsButtonElement* m_toggleClosedCaptionsButton; 149 151 MediaControlFullscreenButtonElement* m_fullscreenButton; 150 152 MediaControlPanelElement* m_panel; -
trunk/Source/WebCore/rendering/RenderThemeChromiumSkia.cpp
r126968 r127035 132 132 } 133 133 134 #if ENABLE(VIDEO_TRACK) 135 bool RenderThemeChromiumSkia::supportsClosedCaptioning() const 136 { 137 return true; 138 } 139 #endif 140 134 141 Color RenderThemeChromiumSkia::platformActiveSelectionBackgroundColor() const 135 142 { -
trunk/Source/WebCore/rendering/RenderThemeChromiumSkia.h
r125048 r127035 55 55 virtual bool supportsDataListUI(const AtomicString& type) const OVERRIDE; 56 56 57 #if ENABLE(VIDEO_TRACK) 58 virtual bool supportsClosedCaptioning() const OVERRIDE; 59 #endif 57 60 // The platform selection color. 58 61 virtual Color platformActiveSelectionBackgroundColor() const;
Note: See TracChangeset
for help on using the changeset viewer.