Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: Source/core/html/shadow/MediaControls.cpp

Issue 988763002: Start separating the text track container from the media controls (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/html/shadow/MediaControls.h ('k') | Source/core/html/track/TextTrackContainer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. 3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 15 matching lines...) Expand all
26 26
27 #include "config.h" 27 #include "config.h"
28 #include "core/html/shadow/MediaControls.h" 28 #include "core/html/shadow/MediaControls.h"
29 29
30 #include "bindings/core/v8/ExceptionStatePlaceholder.h" 30 #include "bindings/core/v8/ExceptionStatePlaceholder.h"
31 #include "core/dom/ClientRect.h" 31 #include "core/dom/ClientRect.h"
32 #include "core/events/MouseEvent.h" 32 #include "core/events/MouseEvent.h"
33 #include "core/frame/Settings.h" 33 #include "core/frame/Settings.h"
34 #include "core/html/HTMLMediaElement.h" 34 #include "core/html/HTMLMediaElement.h"
35 #include "core/html/MediaController.h" 35 #include "core/html/MediaController.h"
36 #include "core/html/track/TextTrackContainer.h"
36 #include "core/layout/LayoutTheme.h" 37 #include "core/layout/LayoutTheme.h"
37 38
38 namespace blink { 39 namespace blink {
39 40
40 // If you change this value, then also update the corresponding value in 41 // If you change this value, then also update the corresponding value in
41 // LayoutTests/media/media-controls.js. 42 // LayoutTests/media/media-controls.js.
42 static const double timeWithoutMouseMovementBeforeHidingMediaControls = 3; 43 static const double timeWithoutMouseMovementBeforeHidingMediaControls = 3;
43 44
44 static bool fullscreenIsSupported(const Document& document) 45 static bool fullscreenIsSupported(const Document& document)
45 { 46 {
46 return !document.settings() || document.settings()->fullscreenSupported(); 47 return !document.settings() || document.settings()->fullscreenSupported();
47 } 48 }
48 49
49 MediaControls::MediaControls(HTMLMediaElement& mediaElement) 50 MediaControls::MediaControls(HTMLMediaElement& mediaElement)
50 : HTMLDivElement(mediaElement.document()) 51 : HTMLDivElement(mediaElement.document())
51 , m_mediaElement(&mediaElement) 52 , m_mediaElement(&mediaElement)
52 , m_panel(nullptr) 53 , m_panel(nullptr)
53 , m_textDisplayContainer(nullptr) 54 , m_textTrackContainer(nullptr)
54 , m_overlayPlayButton(nullptr) 55 , m_overlayPlayButton(nullptr)
55 , m_overlayEnclosure(nullptr) 56 , m_overlayEnclosure(nullptr)
56 , m_playButton(nullptr) 57 , m_playButton(nullptr)
57 , m_currentTimeDisplay(nullptr) 58 , m_currentTimeDisplay(nullptr)
58 , m_timeline(nullptr) 59 , m_timeline(nullptr)
59 , m_muteButton(nullptr) 60 , m_muteButton(nullptr)
60 , m_volumeSlider(nullptr) 61 , m_volumeSlider(nullptr)
61 , m_toggleClosedCaptionsButton(nullptr) 62 , m_toggleClosedCaptionsButton(nullptr)
62 , m_fullScreenButton(nullptr) 63 , m_fullScreenButton(nullptr)
63 , m_castButton(nullptr) 64 , m_castButton(nullptr)
(...skipping 12 matching lines...) Expand all
76 RefPtrWillBeRawPtr<MediaControls> controls = adoptRefWillBeNoop(new MediaCon trols(mediaElement)); 77 RefPtrWillBeRawPtr<MediaControls> controls = adoptRefWillBeNoop(new MediaCon trols(mediaElement));
77 controls->setShadowPseudoId(AtomicString("-webkit-media-controls", AtomicStr ing::ConstructFromLiteral)); 78 controls->setShadowPseudoId(AtomicString("-webkit-media-controls", AtomicStr ing::ConstructFromLiteral));
78 controls->initializeControls(); 79 controls->initializeControls();
79 return controls.release(); 80 return controls.release();
80 } 81 }
81 82
82 // The media controls DOM structure looks like: 83 // The media controls DOM structure looks like:
83 // 84 //
84 // MediaControls (-webkit-media-controls) 85 // MediaControls (-webkit-media-controls)
85 // +-MediaControlOverlayEnclosureElement (-webkit-media-controls-o verlay-enclosure) 86 // +-MediaControlOverlayEnclosureElement (-webkit-media-controls-o verlay-enclosure)
86 // | +-MediaControlTextTrackContainerElement (-webkit-media-text-track -container) 87 // | +-TextTrackContainer (-webkit-media-text-track -container)
87 // | | {when text tracks are enabled} 88 // | | {when text tracks are enabled}
88 // | +-MediaControlOverlayPlayButtonElement (-webkit-media-controls-o verlay-play-button) 89 // | +-MediaControlOverlayPlayButtonElement (-webkit-media-controls-o verlay-play-button)
89 // | | {if mediaControlsOverlayPlayButtonEnabled} 90 // | | {if mediaControlsOverlayPlayButtonEnabled}
90 // | \-MediaControlCastButtonElement (-internal-media-controls -overlay-cast-button) 91 // | \-MediaControlCastButtonElement (-internal-media-controls -overlay-cast-button)
91 // \-MediaControlPanelEnclosureElement (-webkit-media-controls-e nclosure) 92 // \-MediaControlPanelEnclosureElement (-webkit-media-controls-e nclosure)
92 // \-MediaControlPanelElement (-webkit-media-controls-p anel) 93 // \-MediaControlPanelElement (-webkit-media-controls-p anel)
93 // +-MediaControlPlayButtonElement (-webkit-media-controls-p lay-button) 94 // +-MediaControlPlayButtonElement (-webkit-media-controls-p lay-button)
94 // +-MediaControlTimelineElement (-webkit-media-controls-t imeline) 95 // +-MediaControlTimelineElement (-webkit-media-controls-t imeline)
95 // +-MediaControlCurrentTimeDisplayElement (-webkit-media-controls-c urrent-time-display) 96 // +-MediaControlCurrentTimeDisplayElement (-webkit-media-controls-c urrent-time-display)
96 // +-MediaControlTimeRemainingDisplayElement (-webkit-media-controls-t ime-remaining-display) 97 // +-MediaControlTimeRemainingDisplayElement (-webkit-media-controls-t ime-remaining-display)
97 // +-MediaControlMuteButtonElement (-webkit-media-controls-m ute-button) 98 // +-MediaControlMuteButtonElement (-webkit-media-controls-m ute-button)
98 // +-MediaControlVolumeSliderElement (-webkit-media-controls-v olume-slider) 99 // +-MediaControlVolumeSliderElement (-webkit-media-controls-v olume-slider)
99 // +-MediaControlToggleClosedCaptionsButtonElement (-webkit-media-controls-t oggle-closed-captions-button) 100 // +-MediaControlToggleClosedCaptionsButtonElement (-webkit-media-controls-t oggle-closed-captions-button)
100 // +-MediaControlCastButtonElement (-internal-media-controls -cast-button) 101 // +-MediaControlCastButtonElement (-internal-media-controls -cast-button)
101 // \-MediaControlFullscreenButtonElement (-webkit-media-controls-f ullscreen-button) 102 // \-MediaControlFullscreenButtonElement (-webkit-media-controls-f ullscreen-button)
102 // 103 //
103 // Most of the structure is built by MediaControls::initializeControls() - the 104 // Most of the structure is built by MediaControls::initializeControls() - the
104 // exception being MediaControlTextTrackContainerElement which is added 105 // exception being TextTrackContainer which is added on-demand by
105 // on-demand by MediaControls::createTextTrackDisplay(). 106 // MediaControls::textTrackContainer().
106 void MediaControls::initializeControls() 107 void MediaControls::initializeControls()
107 { 108 {
108 RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = M ediaControlOverlayEnclosureElement::create(*this); 109 RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = M ediaControlOverlayEnclosureElement::create(*this);
109 110
110 if (document().settings() && document().settings()->mediaControlsOverlayPlay ButtonEnabled()) { 111 if (document().settings() && document().settings()->mediaControlsOverlayPlay ButtonEnabled()) {
111 RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButt on = MediaControlOverlayPlayButtonElement::create(*this); 112 RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButt on = MediaControlOverlayPlayButtonElement::create(*this);
112 m_overlayPlayButton = overlayPlayButton.get(); 113 m_overlayPlayButton = overlayPlayButton.get();
113 overlayEnclosure->appendChild(overlayPlayButton.release()); 114 overlayEnclosure->appendChild(overlayPlayButton.release());
114 } 115 }
115 116
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 bool MediaControls::containsRelatedTarget(Event* event) 510 bool MediaControls::containsRelatedTarget(Event* event)
510 { 511 {
511 if (!event->isMouseEvent()) 512 if (!event->isMouseEvent())
512 return false; 513 return false;
513 EventTarget* relatedTarget = toMouseEvent(event)->relatedTarget(); 514 EventTarget* relatedTarget = toMouseEvent(event)->relatedTarget();
514 if (!relatedTarget) 515 if (!relatedTarget)
515 return false; 516 return false;
516 return contains(relatedTarget->toNode()); 517 return contains(relatedTarget->toNode());
517 } 518 }
518 519
519 void MediaControls::createTextTrackDisplay() 520 TextTrackContainer* MediaControls::textTrackContainer()
520 { 521 {
521 if (m_textDisplayContainer) 522 if (!m_textTrackContainer) {
522 return; 523 RefPtrWillBeRawPtr<TextTrackContainer> textTrackContainer = TextTrackCon tainer::create(mediaElement().document());
524 m_textTrackContainer = textTrackContainer.get();
523 525
524 RefPtrWillBeRawPtr<MediaControlTextTrackContainerElement> textDisplayContain er = MediaControlTextTrackContainerElement::create(*this); 526 // Insert it before (behind) all other control elements.
525 m_textDisplayContainer = textDisplayContainer.get(); 527 m_overlayEnclosure->insertBefore(textTrackContainer.release(), m_overlay Enclosure->firstChild());
526 528 }
527 // Insert it before (behind) all other control elements. 529 return m_textTrackContainer.get();
528 m_overlayEnclosure->insertBefore(textDisplayContainer.release(), m_overlayEn closure->firstChild());
529 }
530
531 void MediaControls::updateTextTrackDisplay()
532 {
533 if (!m_textDisplayContainer)
534 createTextTrackDisplay();
535
536 m_textDisplayContainer->updateDisplay();
537 } 530 }
538 531
539 DEFINE_TRACE(MediaControls) 532 DEFINE_TRACE(MediaControls)
540 { 533 {
541 visitor->trace(m_mediaElement); 534 visitor->trace(m_mediaElement);
542 visitor->trace(m_panel); 535 visitor->trace(m_panel);
543 visitor->trace(m_textDisplayContainer); 536 visitor->trace(m_textTrackContainer);
544 visitor->trace(m_overlayPlayButton); 537 visitor->trace(m_overlayPlayButton);
545 visitor->trace(m_overlayEnclosure); 538 visitor->trace(m_overlayEnclosure);
546 visitor->trace(m_playButton); 539 visitor->trace(m_playButton);
547 visitor->trace(m_currentTimeDisplay); 540 visitor->trace(m_currentTimeDisplay);
548 visitor->trace(m_timeline); 541 visitor->trace(m_timeline);
549 visitor->trace(m_muteButton); 542 visitor->trace(m_muteButton);
550 visitor->trace(m_volumeSlider); 543 visitor->trace(m_volumeSlider);
551 visitor->trace(m_toggleClosedCaptionsButton); 544 visitor->trace(m_toggleClosedCaptionsButton);
552 visitor->trace(m_fullScreenButton); 545 visitor->trace(m_fullScreenButton);
553 visitor->trace(m_durationDisplay); 546 visitor->trace(m_durationDisplay);
554 visitor->trace(m_enclosure); 547 visitor->trace(m_enclosure);
555 visitor->trace(m_castButton); 548 visitor->trace(m_castButton);
556 visitor->trace(m_overlayCastButton); 549 visitor->trace(m_overlayCastButton);
557 HTMLDivElement::trace(visitor); 550 HTMLDivElement::trace(visitor);
558 } 551 }
559 552
560 } 553 }
OLDNEW
« no previous file with comments | « Source/core/html/shadow/MediaControls.h ('k') | Source/core/html/track/TextTrackContainer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698