Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 110 , m_enclosure(nullptr) | 110 , m_enclosure(nullptr) |
| 111 , m_panel(nullptr) | 111 , m_panel(nullptr) |
| 112 , m_playButton(nullptr) | 112 , m_playButton(nullptr) |
| 113 , m_timeline(nullptr) | 113 , m_timeline(nullptr) |
| 114 , m_currentTimeDisplay(nullptr) | 114 , m_currentTimeDisplay(nullptr) |
| 115 , m_durationDisplay(nullptr) | 115 , m_durationDisplay(nullptr) |
| 116 , m_muteButton(nullptr) | 116 , m_muteButton(nullptr) |
| 117 , m_volumeSlider(nullptr) | 117 , m_volumeSlider(nullptr) |
| 118 , m_toggleClosedCaptionsButton(nullptr) | 118 , m_toggleClosedCaptionsButton(nullptr) |
| 119 , m_textTrackList(nullptr) | 119 , m_textTrackList(nullptr) |
| 120 , m_overflowList(nullptr) | |
| 121 , m_muteOverflowButton(nullptr) | |
| 122 , m_castOverflowButton(nullptr) | |
| 123 , m_ClosedCaptionsOverflowButton(nullptr) | |
| 124 , m_fullscreenOverflowButton(nullptr) | |
| 120 , m_castButton(nullptr) | 125 , m_castButton(nullptr) |
| 121 , m_fullScreenButton(nullptr) | 126 , m_fullScreenButton(nullptr) |
| 122 , m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired ) | 127 , m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired ) |
| 123 , m_hideTimerBehaviorFlags(IgnoreNone) | 128 , m_hideTimerBehaviorFlags(IgnoreNone) |
| 124 , m_isMouseOverControls(false) | 129 , m_isMouseOverControls(false) |
| 125 , m_isPausedForScrubbing(false) | 130 , m_isPausedForScrubbing(false) |
| 126 , m_panelWidthChangedTimer(this, &MediaControls::panelWidthChangedTimerFired ) | 131 , m_panelWidthChangedTimer(this, &MediaControls::panelWidthChangedTimerFired ) |
| 127 , m_panelWidth(0) | 132 , m_panelWidth(0) |
| 128 , m_allowHiddenVolumeControls(RuntimeEnabledFeatures::newMediaPlaybackUiEnab led()) | 133 , m_allowHiddenVolumeControls(RuntimeEnabledFeatures::newMediaPlaybackUiEnab led()) |
| 129 { | 134 { |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 235 | 240 |
| 236 m_panel = panel; | 241 m_panel = panel; |
| 237 enclosure->appendChild(panel); | 242 enclosure->appendChild(panel); |
| 238 | 243 |
| 239 m_enclosure = enclosure; | 244 m_enclosure = enclosure; |
| 240 appendChild(enclosure); | 245 appendChild(enclosure); |
| 241 | 246 |
| 242 MediaControlTextTrackListElement* textTrackList = MediaControlTextTrackListE lement::create(*this); | 247 MediaControlTextTrackListElement* textTrackList = MediaControlTextTrackListE lement::create(*this); |
| 243 m_textTrackList = textTrackList; | 248 m_textTrackList = textTrackList; |
| 244 appendChild(textTrackList); | 249 appendChild(textTrackList); |
| 250 | |
| 251 MediaControlOverflowMenu* overflowMenu = MediaControlOverflowMenu::create(*t his); | |
| 252 m_overflowMenu = overflowMenu; | |
| 253 panel->appendChild(overflowMenu); | |
| 254 | |
| 255 MediaControlOverflowMenuListElement* overflowList = MediaControlOverflowMenu ListElement::create(*this); | |
| 256 m_overflowList = overflowList; | |
| 257 appendChild(overflowList); | |
| 258 | |
| 259 m_muteOverflowButton = MediaControlMuteButtonElement::create(*this); | |
| 260 m_castOverflowButton = MediaControlCastButtonElement::create(*this, false); | |
| 261 m_ClosedCaptionsOverflowButton = MediaControlToggleClosedCaptionsButtonEleme nt::create(*this); | |
| 262 m_fullscreenOverflowButton = MediaControlFullscreenButtonElement::create(*th is); | |
| 263 | |
| 264 m_muteOverflowButton->setShadowPseudoId(AtomicString("-internal-media-contro ls-overflow-menu-list-item-element")); | |
| 265 m_castOverflowButton->setShadowPseudoId(AtomicString("-internal-media-contro ls-overflow-menu-list-item-element")); | |
| 266 m_ClosedCaptionsOverflowButton->setShadowPseudoId(AtomicString("-internal-me dia-controls-overflow-menu-list-item-element")); | |
| 267 m_fullscreenOverflowButton->setShadowPseudoId(AtomicString("-internal-media- controls-overflow-menu-list-item-element")); | |
|
whywhat
2016/08/19 23:56:55
do we have these elements in the media element's d
kdsilva
2016/08/24 05:33:27
liberato@, Anton mentioned you might have recommen
liberato (no reviews please)
2016/08/24 16:44:22
i've had bad luck doing anything too complicated i
| |
| 245 } | 268 } |
| 246 | 269 |
| 247 void MediaControls::reset() | 270 void MediaControls::reset() |
| 248 { | 271 { |
| 249 EventDispatchForbiddenScope::AllowUserAgentEvents allowEventsInShadow; | 272 EventDispatchForbiddenScope::AllowUserAgentEvents allowEventsInShadow; |
| 250 const bool useNewUi = RuntimeEnabledFeatures::newMediaPlaybackUiEnabled(); | 273 const bool useNewUi = RuntimeEnabledFeatures::newMediaPlaybackUiEnabled(); |
| 251 BatchedControlUpdate batch(this); | 274 BatchedControlUpdate batch(this); |
| 252 | 275 |
| 253 m_allowHiddenVolumeControls = useNewUi; | 276 m_allowHiddenVolumeControls = useNewUi; |
| 254 | 277 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 426 } | 449 } |
| 427 | 450 |
| 428 // Allow the theme to format the time. | 451 // Allow the theme to format the time. |
| 429 m_currentTimeDisplay->setInnerText(LayoutTheme::theme().formatMediaControlsC urrentTime(now, duration), IGNORE_EXCEPTION); | 452 m_currentTimeDisplay->setInnerText(LayoutTheme::theme().formatMediaControlsC urrentTime(now, duration), IGNORE_EXCEPTION); |
| 430 m_currentTimeDisplay->setCurrentValue(now); | 453 m_currentTimeDisplay->setCurrentValue(now); |
| 431 } | 454 } |
| 432 | 455 |
| 433 void MediaControls::updateVolume() | 456 void MediaControls::updateVolume() |
| 434 { | 457 { |
| 435 m_muteButton->updateDisplayType(); | 458 m_muteButton->updateDisplayType(); |
| 459 m_muteOverflowButton->updateDisplayType(); | |
| 460 | |
| 436 // Invalidate the mute button because it paints differently according to vol ume. | 461 // Invalidate the mute button because it paints differently according to vol ume. |
| 437 invalidate(m_muteButton); | 462 invalidate(m_muteButton); |
| 438 | 463 |
| 439 if (mediaElement().muted()) | 464 if (mediaElement().muted()) |
| 440 m_volumeSlider->setVolume(0); | 465 m_volumeSlider->setVolume(0); |
| 441 else | 466 else |
| 442 m_volumeSlider->setVolume(mediaElement().volume()); | 467 m_volumeSlider->setVolume(mediaElement().volume()); |
| 443 | 468 |
| 444 // Update the visibility of our audio elements. | 469 // Update the visibility of our audio elements. |
| 445 // We never want the volume slider if there's no audio. | 470 // We never want the volume slider if there's no audio. |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 459 m_muteButton->setIsWanted(mediaElement().hasAudio()); | 484 m_muteButton->setIsWanted(mediaElement().hasAudio()); |
| 460 } | 485 } |
| 461 | 486 |
| 462 // Invalidate the volume slider because it paints differently according to v olume. | 487 // Invalidate the volume slider because it paints differently according to v olume. |
| 463 invalidate(m_volumeSlider); | 488 invalidate(m_volumeSlider); |
| 464 } | 489 } |
| 465 | 490 |
| 466 void MediaControls::changedClosedCaptionsVisibility() | 491 void MediaControls::changedClosedCaptionsVisibility() |
| 467 { | 492 { |
| 468 m_toggleClosedCaptionsButton->updateDisplayType(); | 493 m_toggleClosedCaptionsButton->updateDisplayType(); |
| 494 m_ClosedCaptionsOverflowButton->updateDisplayType(); | |
| 469 } | 495 } |
| 470 | 496 |
| 471 void MediaControls::refreshClosedCaptionsButtonVisibility() | 497 void MediaControls::refreshClosedCaptionsButtonVisibility() |
| 472 { | 498 { |
| 473 m_toggleClosedCaptionsButton->setIsWanted(mediaElement().hasClosedCaptions() ); | 499 m_toggleClosedCaptionsButton->setIsWanted(mediaElement().hasClosedCaptions() ); |
| 474 BatchedControlUpdate batch(this); | 500 BatchedControlUpdate batch(this); |
| 475 } | 501 } |
| 476 | 502 |
| 477 void MediaControls::toggleTextTrackList() | 503 void MediaControls::toggleTextTrackList() |
| 478 { | 504 { |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 682 // Hide all controls that don't fit, and show the ones that do. | 708 // Hide all controls that don't fit, and show the ones that do. |
| 683 // This might be better suited for a layout, but since JS media controls | 709 // This might be better suited for a layout, but since JS media controls |
| 684 // won't benefit from that anwyay, we just do it here like JS will. | 710 // won't benefit from that anwyay, we just do it here like JS will. |
| 685 | 711 |
| 686 if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) | 712 if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) |
| 687 return; | 713 return; |
| 688 | 714 |
| 689 // Controls that we'll hide / show, in order of decreasing priority. | 715 // Controls that we'll hide / show, in order of decreasing priority. |
| 690 MediaControlElement* elements[] = { | 716 MediaControlElement* elements[] = { |
| 691 // Exclude m_playButton; we handle it specially. | 717 // Exclude m_playButton; we handle it specially. |
| 718 m_fullScreenButton.get(), | |
| 692 m_toggleClosedCaptionsButton.get(), | 719 m_toggleClosedCaptionsButton.get(), |
|
whywhat
2016/08/19 23:56:55
I thought this was fixed by another cl? Do you nee
kdsilva
2016/08/24 05:33:26
Done.
| |
| 693 m_fullScreenButton.get(), | |
| 694 m_timeline.get(), | 720 m_timeline.get(), |
| 695 m_currentTimeDisplay.get(), | 721 m_currentTimeDisplay.get(), |
| 696 m_volumeSlider.get(), | 722 m_volumeSlider.get(), |
| 697 m_castButton.get(), | 723 m_castButton.get(), |
| 698 m_muteButton.get(), | 724 m_muteButton.get(), |
| 699 m_durationDisplay.get(), | 725 m_durationDisplay.get(), |
| 700 }; | 726 }; |
| 701 | 727 |
| 702 int usedWidth = 0; | 728 int usedWidth = 0; |
| 703 | 729 |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 723 // This prevents the wrong controls from being shown briefly | 749 // This prevents the wrong controls from being shown briefly |
| 724 // immediately after the first layout and paint, but before we have | 750 // immediately after the first layout and paint, but before we have |
| 725 // a chance to revise them. | 751 // a chance to revise them. |
| 726 for (MediaControlElement* element : elements) { | 752 for (MediaControlElement* element : elements) { |
| 727 if (element) | 753 if (element) |
| 728 element->setDoesFit(false); | 754 element->setDoesFit(false); |
| 729 } | 755 } |
| 730 return; | 756 return; |
| 731 } | 757 } |
| 732 | 758 |
| 759 // Controls that don't fit within the media player that could be included | |
| 760 // in an overflow menu. | |
| 761 std::set<MediaControlElementType> overflowControls; | |
| 762 | |
| 733 // For each control that fits, enable it in order of decreasing priority. | 763 // For each control that fits, enable it in order of decreasing priority. |
| 734 bool droppedCastButton = false; | 764 bool droppedCastButton = false; |
| 735 for (MediaControlElement* element : elements) { | 765 for (MediaControlElement* element : elements) { |
| 736 if (!element) | 766 if (!element) |
| 737 continue; | 767 continue; |
| 738 | 768 |
| 739 if (element->isWanted()) { | 769 if (element->isWanted()) { |
| 740 if (usedWidth + minimumWidth <= m_panelWidth) { | 770 if (usedWidth + minimumWidth <= m_panelWidth) { |
| 741 element->setDoesFit(true); | 771 element->setDoesFit(true); |
| 742 usedWidth += minimumWidth; | 772 usedWidth += minimumWidth; |
| 743 } else { | 773 } else { |
| 744 element->setDoesFit(false); | 774 element->setDoesFit(false); |
| 745 if (element == m_castButton.get()) | 775 if (element == m_castButton.get()) |
| 746 droppedCastButton = true; | 776 droppedCastButton = true; |
| 777 overflowControls.insert(element->displayType()); | |
| 747 } | 778 } |
| 748 } | 779 } |
| 749 } | 780 } |
| 750 | 781 |
| 782 // We display an overflow menu only when we have at least two items | |
| 783 // within it. | |
| 784 if (overflowControls.size() >= 2 && !mediaElement().isFullscreen()) { | |
|
whywhat
2016/08/19 23:56:55
2 is a magic constant (which is not 0 or 1). pleas
kdsilva
2016/08/24 05:33:26
Done.
| |
| 785 m_overflowList->setOverflowMenuControls(overflowControls); | |
| 786 m_overflowMenu->setIsWanted(true); | |
| 787 } else { | |
| 788 m_overflowMenu->setIsWanted(false); | |
| 789 m_overflowList->setVisible(false); | |
| 790 } | |
| 791 | |
| 751 // Special case for cast: if we want a cast button but dropped it, then | 792 // Special case for cast: if we want a cast button but dropped it, then |
| 752 // show the overlay cast button instead. | 793 // show the overlay cast button instead. |
| 753 if (m_castButton->isWanted()) { | 794 if (m_castButton->isWanted()) { |
| 754 if (droppedCastButton) | 795 if (droppedCastButton) |
| 755 m_overlayCastButton->tryShowOverlay(); | 796 m_overlayCastButton->tryShowOverlay(); |
| 756 else | 797 else |
| 757 m_overlayCastButton->setIsWanted(false); | 798 m_overlayCastButton->setIsWanted(false); |
| 758 } | 799 } |
| 759 } | 800 } |
| 760 | 801 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 777 void MediaControls::networkStateChanged() | 818 void MediaControls::networkStateChanged() |
| 778 { | 819 { |
| 779 invalidate(m_playButton); | 820 invalidate(m_playButton); |
| 780 invalidate(m_overlayPlayButton); | 821 invalidate(m_overlayPlayButton); |
| 781 invalidate(m_muteButton); | 822 invalidate(m_muteButton); |
| 782 invalidate(m_fullScreenButton); | 823 invalidate(m_fullScreenButton); |
| 783 invalidate(m_timeline); | 824 invalidate(m_timeline); |
| 784 invalidate(m_volumeSlider); | 825 invalidate(m_volumeSlider); |
| 785 } | 826 } |
| 786 | 827 |
| 828 bool MediaControls::overflowMenuVisible() | |
| 829 { | |
| 830 return m_overflowList->isWanted(); | |
| 831 } | |
| 832 | |
| 833 void MediaControls::toggleOverflowMenu() | |
| 834 { | |
| 835 m_overflowList->setVisible(!m_overflowList->isWanted()); | |
| 836 } | |
| 837 | |
| 838 std::vector<MediaControlInputElement*> MediaControls::getOverflowMenuButtons() | |
| 839 { | |
| 840 std::vector<MediaControlInputElement*> controlsListOverflow = { m_muteOverfl owButton, m_ClosedCaptionsOverflowButton, m_castOverflowButton, m_fullscreenOver flowButton }; | |
|
whywhat
2016/08/19 23:56:55
creating a new vector and passing it around seems
kdsilva
2016/08/24 05:33:27
Done. I made controlsListOverflow a private member
| |
| 841 return controlsListOverflow; | |
| 842 } | |
| 843 | |
| 787 DEFINE_TRACE(MediaControls) | 844 DEFINE_TRACE(MediaControls) |
| 788 { | 845 { |
| 789 visitor->trace(m_mediaElement); | 846 visitor->trace(m_mediaElement); |
| 790 visitor->trace(m_panel); | 847 visitor->trace(m_panel); |
| 791 visitor->trace(m_overlayPlayButton); | 848 visitor->trace(m_overlayPlayButton); |
| 792 visitor->trace(m_overlayEnclosure); | 849 visitor->trace(m_overlayEnclosure); |
| 793 visitor->trace(m_playButton); | 850 visitor->trace(m_playButton); |
| 794 visitor->trace(m_currentTimeDisplay); | 851 visitor->trace(m_currentTimeDisplay); |
| 795 visitor->trace(m_timeline); | 852 visitor->trace(m_timeline); |
| 796 visitor->trace(m_muteButton); | 853 visitor->trace(m_muteButton); |
| 797 visitor->trace(m_volumeSlider); | 854 visitor->trace(m_volumeSlider); |
| 798 visitor->trace(m_toggleClosedCaptionsButton); | 855 visitor->trace(m_toggleClosedCaptionsButton); |
| 799 visitor->trace(m_fullScreenButton); | 856 visitor->trace(m_fullScreenButton); |
| 800 visitor->trace(m_durationDisplay); | 857 visitor->trace(m_durationDisplay); |
| 801 visitor->trace(m_enclosure); | 858 visitor->trace(m_enclosure); |
| 802 visitor->trace(m_textTrackList); | 859 visitor->trace(m_textTrackList); |
| 860 visitor->trace(m_overflowMenu); | |
| 861 visitor->trace(m_overflowList); | |
| 862 visitor->trace(m_muteOverflowButton); | |
| 863 visitor->trace(m_castOverflowButton); | |
| 864 visitor->trace(m_ClosedCaptionsOverflowButton); | |
| 865 visitor->trace(m_fullscreenOverflowButton); | |
| 803 visitor->trace(m_castButton); | 866 visitor->trace(m_castButton); |
| 804 visitor->trace(m_overlayCastButton); | 867 visitor->trace(m_overlayCastButton); |
| 805 HTMLDivElement::trace(visitor); | 868 HTMLDivElement::trace(visitor); |
| 806 } | 869 } |
| 807 | 870 |
| 808 } // namespace blink | 871 } // namespace blink |
| OLD | NEW |