Changeset 101810 in webkit
- Timestamp:
- Dec 2, 2011 9:35:54 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r101805 r101810 1 2011-11-02 Jer Noble <jer.noble@apple.com> 2 3 MediaControls should use MediaController if present. 4 https://bugs.webkit.org/show_bug.cgi?id=71410 5 6 Reviewed by Eric Carlson. 7 8 No new tests; covered by existing tests. 9 10 Add support for individual media controls to control the MediaController of their associated 11 HTMLMediaElement, if present. 12 13 The video spec requires that UA provided media controls be implemented in terms of their 14 HTMLMediaElement's MediaController, if present. So for each of the media controls, modify 15 their constructor to take a Document* instead of an HTMLMediaElement, and add an setter 16 taking a MediaControllerInterface. 17 18 Now that MediaControls have an abstract interface instead of an HTMLMediaElement, use toParentMediaElement 19 to find the controllingVideoElement. 20 * accessibility/AccessibilityMediaControls.cpp: 21 (WebCore::AccessibilityMediaControlsContainer::controllingVideoElement): 22 23 Pass the MediaController or the HTMLMediaElement when setting up the elements controls. 24 * html/HTMLMediaElement.cpp: 25 (WebCore::HTMLMediaElement::createMediaControls): 26 (WebCore::HTMLMediaElement::setMediaController): 27 28 The following functions have only constructor changes: 29 * html/shadow/MediaControlElements.cpp: 30 (WebCore::MediaControlElement::MediaControlElement): 31 (WebCore::MediaControlPanelElement::MediaControlPanelElement): 32 (WebCore::MediaControlPanelElement::create): 33 (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement): 34 (WebCore::MediaControlTimelineContainerElement::create): 35 (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement): 36 (WebCore::MediaControlVolumeSliderContainerElement::create): 37 (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement): 38 (WebCore::MediaControlStatusDisplayElement::create): 39 (WebCore::MediaControlInputElement::MediaControlInputElement): 40 (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement): 41 (WebCore::MediaControlMuteButtonElement::defaultEventHandler): 42 (WebCore::MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement): 43 (WebCore::MediaControlPanelMuteButtonElement::create): 44 (WebCore::MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement): 45 (WebCore::MediaControlVolumeSliderMuteButtonElement::create): 46 (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement): 47 (WebCore::MediaControlPlayButtonElement::create): 48 (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement): 49 (WebCore::MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement): 50 (WebCore::MediaControlSeekForwardButtonElement::create): 51 (WebCore::MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement): 52 (WebCore::MediaControlSeekBackButtonElement::create): 53 (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): 54 (WebCore::MediaControlRewindButtonElement::create): 55 (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): 56 (WebCore::MediaControlReturnToRealtimeButtonElement::create): 57 (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement): 58 (WebCore::MediaControlToggleClosedCaptionsButtonElement::create): 59 (WebCore::MediaControlTimelineElement::MediaControlTimelineElement): 60 (WebCore::MediaControlTimelineElement::create): 61 (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement): 62 (WebCore::MediaControlVolumeSliderElement::create): 63 (WebCore::MediaControlVolumeSliderElement::defaultEventHandler): 64 (WebCore::MediaControlFullscreenVolumeSliderElement::MediaControlFullscreenVolumeSliderElement): 65 (WebCore::MediaControlFullscreenVolumeSliderElement::create): 66 (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement): 67 (WebCore::MediaControlFullscreenButtonElement::create): 68 (WebCore::MediaControlFullscreenVolumeMinButtonElement::MediaControlFullscreenVolumeMinButtonElement): 69 (WebCore::MediaControlFullscreenVolumeMinButtonElement::create): 70 (WebCore::MediaControlFullscreenVolumeMaxButtonElement::MediaControlFullscreenVolumeMaxButtonElement): 71 (WebCore::MediaControlFullscreenVolumeMaxButtonElement::create): 72 (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement): 73 (WebCore::MediaControlTimeRemainingDisplayElement::create): 74 (WebCore::MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement): 75 (WebCore::MediaControlCurrentTimeDisplayElement::create): 76 (WebCore::MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement): 77 * html/shadow/MediaControlRootElement.cpp: 78 (WebCore::MediaControlRootElement::MediaControlRootElement): 79 (WebCore::MediaControls::create): 80 (WebCore::MediaControlRootElement::create): 81 * html/shadow/MediaControlRootElement.h: 82 * html/shadow/MediaControls.cpp: 83 (WebCore::MediaControls::MediaControls): 84 * html/shadow/MediaControls.h: 85 86 The following functions now call MediaControllerInterface instead of HTMLMediaElement directly: 87 * html/shadow/MediaControlElements.h: 88 (WebCore::MediaControlStatusDisplayElement::update): 89 (WebCore::MediaControlMuteButtonElement::updateDisplayType): 90 (WebCore::MediaControlPlayButtonElement::defaultEventHandler): 91 (WebCore::MediaControlPlayButtonElement::updateDisplayType): 92 (WebCore::MediaControlSeekButtonElement::startTimer): 93 (WebCore::MediaControlSeekButtonElement::stopTimer): 94 (WebCore::MediaControlSeekButtonElement::nextRate): 95 (WebCore::MediaControlSeekButtonElement::seekTimerFired): 96 (WebCore::MediaControlRewindButtonElement::defaultEventHandler): 97 (WebCore::MediaControlReturnToRealtimeButtonElement::defaultEventHandler): 98 (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler): 99 (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType): 100 (WebCore::MediaControlTimelineElement::defaultEventHandler): 101 (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler): 102 (WebCore::MediaControlFullscreenVolumeMinButtonElement::defaultEventHandler): 103 (WebCore::MediaControlFullscreenVolumeMaxButtonElement::defaultEventHandler): 104 * html/shadow/MediaControlRootElement.cpp: 105 (WebCore::MediaControlRootElement::reset): 106 (WebCore::MediaControlRootElement::playbackStarted): 107 (WebCore::MediaControlRootElement::playbackProgressed): 108 (WebCore::MediaControlRootElement::playbackStopped): 109 (WebCore::MediaControlRootElement::updateTimeDisplay): 110 (WebCore::MediaControlRootElement::loadedMetadata): 111 (WebCore::MediaControlRootElement::changedVolume): 112 (WebCore::MediaControlRootElement::enteredFullscreen): 113 (WebCore::MediaControlRootElement::showVolumeSlider): 114 (WebCore::MediaControlRootElement::defaultEventHandler): 115 (WebCore::MediaControlRootElement::startHideFullscreenControlsTimer): 116 (WebCore::MediaControlRootElement::hideFullscreenControlsTimerFired): 117 * html/shadow/MediaControlRootElementChromium.cpp: 118 (WebCore::MediaControlRootElementChromium::MediaControlRootElementChromium): 119 (WebCore::MediaControls::create): 120 (WebCore::MediaControlRootElementChromium::create): 121 (WebCore::MediaControlRootElementChromium::reset): 122 (WebCore::MediaControlRootElementChromium::playbackStarted): 123 (WebCore::MediaControlRootElementChromium::playbackProgressed): 124 (WebCore::MediaControlRootElementChromium::playbackStopped): 125 (WebCore::MediaControlRootElementChromium::updateTimeDisplay): 126 (WebCore::MediaControlRootElementChromium::defaultEventHandler): 127 (WebCore::MediaControlRootElementChromium::changedVolume): 128 (WebCore::MediaControlRootElementChromium::showVolumeSlider): 129 * html/shadow/MediaControlRootElementChromium.h: 130 131 The following functions set the current MediaControllerInterface. 132 * html/shadow/MediaControlRootElement.cpp: 133 (WebCore::MediaControlRootElement::setMediaController): 134 * html/shadow/MediaControlElements.h: 135 (WebCore::MediaControlElement::setMediaController): 136 (WebCore::MediaControlElement::mediaController): 137 (WebCore::MediaControlInputElement::setMediaController): 138 (WebCore::MediaControlInputElement::mediaController): 139 * html/shadow/MediaControlRootElementChromium.cpp: 140 (WebCore::MediaControlRootElementChromium::setMediaController): 141 1 142 2011-12-02 Stephen Chenney <schenney@chromium.org> 2 143 -
trunk/Source/WebCore/accessibility/AccessibilityMediaControls.cpp
r100408 r101810 36 36 #include "AXObjectCache.h" 37 37 #include "HTMLInputElement.h" 38 #include "HTMLMediaElement.h" 38 39 #include "HTMLNames.h" 39 40 #include "LocalizedStrings.h" … … 223 224 MediaControlTimeDisplayElement* element = static_cast<MediaControlTimeDisplayElement*>(m_renderer->node()); 224 225 225 return element->mediaElement()->isVideo();226 return toParentMediaElement(element)->isVideo(); 226 227 } 227 228 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r101519 r101810 3251 3251 3252 3252 ExceptionCode ec; 3253 RefPtr<MediaControls> controls = MediaControls::create( this);3253 RefPtr<MediaControls> controls = MediaControls::create(document()); 3254 3254 if (!controls) 3255 3255 return false; 3256 3257 controls->setMediaController(m_mediaController ? m_mediaController.get() : static_cast<MediaControllerInterface*>(this)); 3256 3258 3257 3259 ensureShadowRoot()->appendChild(controls, ec); … … 3391 3393 m_mediaController = controller; 3392 3394 3395 if (hasMediaControls()) 3396 mediaControls()->setMediaController(m_mediaController ? m_mediaController.get() : static_cast<MediaControllerInterface*>(this)); 3397 3393 3398 if (m_mediaController) 3394 3399 m_mediaController->addMediaElement(this); -
trunk/Source/WebCore/html/shadow/MediaControlElements.cpp
r101707 r101810 38 38 #include "FloatConversion.h" 39 39 #include "Frame.h" 40 #include "HTMLMediaElement.h" 40 41 #include "HTMLNames.h" 41 42 #include "LocalizedStrings.h" … … 54 55 55 56 using namespace HTMLNames; 57 using namespace std; 56 58 57 59 // FIXME: These constants may need to be tweaked to better match the seeking in the QuickTime plug-in. … … 81 83 // ---------------------------- 82 84 83 MediaControlElement::MediaControlElement( HTMLMediaElement* mediaElement)84 : HTMLDivElement(divTag, mediaElement->document())85 , m_media Element(mediaElement)85 MediaControlElement::MediaControlElement(Document* document) 86 : HTMLDivElement(divTag, document) 87 , m_mediaController(0) 86 88 { 87 89 } … … 99 101 // ---------------------------- 100 102 101 inline MediaControlPanelElement::MediaControlPanelElement( HTMLMediaElement* mediaElement)102 : MediaControlElement( mediaElement)103 inline MediaControlPanelElement::MediaControlPanelElement(Document* document) 104 : MediaControlElement(document) 103 105 , m_canBeDragged(false) 104 106 , m_isBeingDragged(false) … … 107 109 } 108 110 109 PassRefPtr<MediaControlPanelElement> MediaControlPanelElement::create( HTMLMediaElement* mediaElement)110 { 111 return adoptRef(new MediaControlPanelElement( mediaElement));111 PassRefPtr<MediaControlPanelElement> MediaControlPanelElement::create(Document* document) 112 { 113 return adoptRef(new MediaControlPanelElement(document)); 112 114 } 113 115 … … 253 255 // ---------------------------- 254 256 255 inline MediaControlTimelineContainerElement::MediaControlTimelineContainerElement( HTMLMediaElement* mediaElement)256 : MediaControlElement( mediaElement)257 { 258 } 259 260 PassRefPtr<MediaControlTimelineContainerElement> MediaControlTimelineContainerElement::create( HTMLMediaElement* mediaElement)261 { 262 RefPtr<MediaControlTimelineContainerElement> element = adoptRef(new MediaControlTimelineContainerElement( mediaElement));257 inline MediaControlTimelineContainerElement::MediaControlTimelineContainerElement(Document* document) 258 : MediaControlElement(document) 259 { 260 } 261 262 PassRefPtr<MediaControlTimelineContainerElement> MediaControlTimelineContainerElement::create(Document* document) 263 { 264 RefPtr<MediaControlTimelineContainerElement> element = adoptRef(new MediaControlTimelineContainerElement(document)); 263 265 element->hide(); 264 266 return element.release(); … … 306 308 } 307 309 308 inline MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement( HTMLMediaElement* mediaElement)309 : MediaControlElement( mediaElement)310 { 311 } 312 313 PassRefPtr<MediaControlVolumeSliderContainerElement> MediaControlVolumeSliderContainerElement::create( HTMLMediaElement* mediaElement)314 { 315 RefPtr<MediaControlVolumeSliderContainerElement> element = adoptRef(new MediaControlVolumeSliderContainerElement( mediaElement));310 inline MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement(Document* document) 311 : MediaControlElement(document) 312 { 313 } 314 315 PassRefPtr<MediaControlVolumeSliderContainerElement> MediaControlVolumeSliderContainerElement::create(Document* document) 316 { 317 RefPtr<MediaControlVolumeSliderContainerElement> element = adoptRef(new MediaControlVolumeSliderContainerElement(document)); 316 318 element->hide(); 317 319 return element.release(); … … 353 355 // ---------------------------- 354 356 355 inline MediaControlStatusDisplayElement::MediaControlStatusDisplayElement( HTMLMediaElement* mediaElement)356 : MediaControlElement( mediaElement)357 inline MediaControlStatusDisplayElement::MediaControlStatusDisplayElement(Document* document) 358 : MediaControlElement(document) 357 359 , m_stateBeingDisplayed(Nothing) 358 360 { 359 361 } 360 362 361 PassRefPtr<MediaControlStatusDisplayElement> MediaControlStatusDisplayElement::create( HTMLMediaElement* mediaElement)362 { 363 RefPtr<MediaControlStatusDisplayElement> element = adoptRef(new MediaControlStatusDisplayElement( mediaElement));363 PassRefPtr<MediaControlStatusDisplayElement> MediaControlStatusDisplayElement::create(Document* document) 364 { 365 RefPtr<MediaControlStatusDisplayElement> element = adoptRef(new MediaControlStatusDisplayElement(document)); 364 366 element->hide(); 365 367 return element.release(); … … 371 373 StateBeingDisplayed newStateToDisplay = Nothing; 372 374 373 if (media Element()->readyState() <= HTMLMediaElement::HAVE_METADATA && !mediaElement()->currentSrc().isEmpty())375 if (mediaController()->readyState() <= MediaControllerInterface::HAVE_METADATA && mediaController()->hasCurrentSrc()) 374 376 newStateToDisplay = Loading; 375 else if (media Element()->movieLoadType() == MediaPlayer::LiveStream)377 else if (mediaController()->isLiveStream()) 376 378 newStateToDisplay = LiveBroadcast; 377 379 … … 414 416 // ---------------------------- 415 417 416 MediaControlInputElement::MediaControlInputElement( HTMLMediaElement* mediaElement, MediaControlElementType displayType)417 : HTMLInputElement(inputTag, mediaElement->document(), 0, false)418 , m_media Element(mediaElement)418 MediaControlInputElement::MediaControlInputElement(Document* document, MediaControlElementType displayType) 419 : HTMLInputElement(inputTag, document, 0, false) 420 , m_mediaController(0) 419 421 , m_displayType(displayType) 420 422 { … … 444 446 // ---------------------------- 445 447 446 inline MediaControlMuteButtonElement::MediaControlMuteButtonElement( HTMLMediaElement* mediaElement, MediaControlElementType displayType)447 : MediaControlInputElement( mediaElement, displayType)448 inline MediaControlMuteButtonElement::MediaControlMuteButtonElement(Document* document, MediaControlElementType displayType) 449 : MediaControlInputElement(document, displayType) 448 450 { 449 451 } … … 452 454 { 453 455 if (event->type() == eventNames().clickEvent) { 454 media Element()->setMuted(!mediaElement()->muted());456 mediaController()->setMuted(!mediaController()->muted()); 455 457 event->setDefaultHandled(); 456 458 } … … 466 468 void MediaControlMuteButtonElement::updateDisplayType() 467 469 { 468 setDisplayType(media Element()->muted() ? MediaUnMuteButton : MediaMuteButton);469 } 470 471 // ---------------------------- 472 473 inline MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement( HTMLMediaElement* mediaElement, MediaControls* controls)474 : MediaControlMuteButtonElement( mediaElement, MediaMuteButton)470 setDisplayType(mediaController()->muted() ? MediaUnMuteButton : MediaMuteButton); 471 } 472 473 // ---------------------------- 474 475 inline MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement(Document* document, MediaControls* controls) 476 : MediaControlMuteButtonElement(document, MediaMuteButton) 475 477 , m_controls(controls) 476 478 { 477 479 } 478 480 479 PassRefPtr<MediaControlPanelMuteButtonElement> MediaControlPanelMuteButtonElement::create( HTMLMediaElement* mediaElement, MediaControls* controls)481 PassRefPtr<MediaControlPanelMuteButtonElement> MediaControlPanelMuteButtonElement::create(Document* document, MediaControls* controls) 480 482 { 481 483 ASSERT(controls); 482 484 483 RefPtr<MediaControlPanelMuteButtonElement> button = adoptRef(new MediaControlPanelMuteButtonElement( mediaElement, controls));485 RefPtr<MediaControlPanelMuteButtonElement> button = adoptRef(new MediaControlPanelMuteButtonElement(document, controls)); 484 486 button->setType("button"); 485 487 return button.release(); … … 502 504 // ---------------------------- 503 505 504 inline MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement( HTMLMediaElement* mediaElement)505 : MediaControlMuteButtonElement( mediaElement, MediaMuteButton)506 { 507 } 508 509 PassRefPtr<MediaControlVolumeSliderMuteButtonElement> MediaControlVolumeSliderMuteButtonElement::create( HTMLMediaElement* mediaElement)510 { 511 RefPtr<MediaControlVolumeSliderMuteButtonElement> button = adoptRef(new MediaControlVolumeSliderMuteButtonElement( mediaElement));506 inline MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement(Document* document) 507 : MediaControlMuteButtonElement(document, MediaMuteButton) 508 { 509 } 510 511 PassRefPtr<MediaControlVolumeSliderMuteButtonElement> MediaControlVolumeSliderMuteButtonElement::create(Document* document) 512 { 513 RefPtr<MediaControlVolumeSliderMuteButtonElement> button = adoptRef(new MediaControlVolumeSliderMuteButtonElement(document)); 512 514 button->setType("button"); 513 515 return button.release(); … … 522 524 // ---------------------------- 523 525 524 inline MediaControlPlayButtonElement::MediaControlPlayButtonElement( HTMLMediaElement* mediaElement)525 : MediaControlInputElement( mediaElement, MediaPlayButton)526 { 527 } 528 529 PassRefPtr<MediaControlPlayButtonElement> MediaControlPlayButtonElement::create( HTMLMediaElement* mediaElement)530 { 531 RefPtr<MediaControlPlayButtonElement> button = adoptRef(new MediaControlPlayButtonElement( mediaElement));526 inline MediaControlPlayButtonElement::MediaControlPlayButtonElement(Document* document) 527 : MediaControlInputElement(document, MediaPlayButton) 528 { 529 } 530 531 PassRefPtr<MediaControlPlayButtonElement> MediaControlPlayButtonElement::create(Document* document) 532 { 533 RefPtr<MediaControlPlayButtonElement> button = adoptRef(new MediaControlPlayButtonElement(document)); 532 534 button->setType("button"); 533 535 return button.release(); … … 537 539 { 538 540 if (event->type() == eventNames().clickEvent) { 539 mediaElement()->togglePlayState(); 541 if (mediaController()->canPlay()) 542 mediaController()->play(); 543 else 544 mediaController()->pause(); 540 545 updateDisplayType(); 541 546 event->setDefaultHandled(); … … 546 551 void MediaControlPlayButtonElement::updateDisplayType() 547 552 { 548 setDisplayType(media Element()->canPlay() ? MediaPlayButton : MediaPauseButton);553 setDisplayType(mediaController()->canPlay() ? MediaPlayButton : MediaPauseButton); 549 554 } 550 555 … … 557 562 // ---------------------------- 558 563 559 inline MediaControlSeekButtonElement::MediaControlSeekButtonElement( HTMLMediaElement* mediaElement, MediaControlElementType displayType)560 : MediaControlInputElement( mediaElement, displayType)564 inline MediaControlSeekButtonElement::MediaControlSeekButtonElement(Document* document, MediaControlElementType displayType) 565 : MediaControlInputElement(document, displayType) 561 566 , m_actionOnStop(Nothing) 562 567 , m_seekType(Skip) … … 588 593 void MediaControlSeekButtonElement::startTimer() 589 594 { 590 m_seekType = media Element()->supportsScanning() ? Scan : Skip;595 m_seekType = mediaController()->supportsScanning() ? Scan : Skip; 591 596 592 597 if (m_seekType == Skip) { 593 598 // Seeking by skipping requires the video to be paused during seeking. 594 m_actionOnStop = media Element()->isPlaying() ? Play : Nothing;595 media Element()->pause();599 m_actionOnStop = mediaController()->paused() ? Nothing : Play; 600 mediaController()->pause(); 596 601 } else { 597 602 // Seeking by scanning requires the video to be playing during seeking. 598 m_actionOnStop = media Element()->paused() ? Pause : Nothing;599 media Element()->play();600 media Element()->setPlaybackRate(nextRate());603 m_actionOnStop = mediaController()->paused() ? Pause : Nothing; 604 mediaController()->play(); 605 mediaController()->setPlaybackRate(nextRate()); 601 606 } 602 607 … … 607 612 { 608 613 if (m_seekType == Scan) 609 media Element()->setPlaybackRate(mediaElement()->defaultPlaybackRate());614 mediaController()->setPlaybackRate(mediaController()->defaultPlaybackRate()); 610 615 611 616 if (m_actionOnStop == Play) 612 media Element()->play();617 mediaController()->play(); 613 618 else if (m_actionOnStop == Pause) 614 media Element()->pause();619 mediaController()->pause(); 615 620 616 621 if (m_seekTimer.isActive()) … … 620 625 float MediaControlSeekButtonElement::nextRate() const 621 626 { 622 float rate = std::min(cScanMaximumRate, fabsf(media Element()->playbackRate() * 2));627 float rate = std::min(cScanMaximumRate, fabsf(mediaController()->playbackRate() * 2)); 623 628 if (!isForwardButton()) 624 629 rate *= -1; … … 631 636 ExceptionCode ec; 632 637 float skipTime = isForwardButton() ? cSkipTime : -cSkipTime; 633 media Element()->setCurrentTime(mediaElement()->currentTime() + skipTime, ec);638 mediaController()->setCurrentTime(mediaController()->currentTime() + skipTime, ec); 634 639 } else 635 media Element()->setPlaybackRate(nextRate());636 } 637 638 // ---------------------------- 639 640 inline MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement( HTMLMediaElement* mediaElement)641 : MediaControlSeekButtonElement( mediaElement, MediaSeekForwardButton)642 { 643 } 644 645 PassRefPtr<MediaControlSeekForwardButtonElement> MediaControlSeekForwardButtonElement::create( HTMLMediaElement* mediaElement)646 { 647 RefPtr<MediaControlSeekForwardButtonElement> button = adoptRef(new MediaControlSeekForwardButtonElement( mediaElement));640 mediaController()->setPlaybackRate(nextRate()); 641 } 642 643 // ---------------------------- 644 645 inline MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement(Document* document) 646 : MediaControlSeekButtonElement(document, MediaSeekForwardButton) 647 { 648 } 649 650 PassRefPtr<MediaControlSeekForwardButtonElement> MediaControlSeekForwardButtonElement::create(Document* document) 651 { 652 RefPtr<MediaControlSeekForwardButtonElement> button = adoptRef(new MediaControlSeekForwardButtonElement(document)); 648 653 button->setType("button"); 649 654 return button.release(); … … 658 663 // ---------------------------- 659 664 660 inline MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement( HTMLMediaElement* mediaElement)661 : MediaControlSeekButtonElement( mediaElement, MediaSeekBackButton)662 { 663 } 664 665 PassRefPtr<MediaControlSeekBackButtonElement> MediaControlSeekBackButtonElement::create( HTMLMediaElement* mediaElement)666 { 667 RefPtr<MediaControlSeekBackButtonElement> button = adoptRef(new MediaControlSeekBackButtonElement( mediaElement));665 inline MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement(Document* document) 666 : MediaControlSeekButtonElement(document, MediaSeekBackButton) 667 { 668 } 669 670 PassRefPtr<MediaControlSeekBackButtonElement> MediaControlSeekBackButtonElement::create(Document* document) 671 { 672 RefPtr<MediaControlSeekBackButtonElement> button = adoptRef(new MediaControlSeekBackButtonElement(document)); 668 673 button->setType("button"); 669 674 return button.release(); … … 678 683 // ---------------------------- 679 684 680 inline MediaControlRewindButtonElement::MediaControlRewindButtonElement( HTMLMediaElement* element)681 : MediaControlInputElement( element, MediaRewindButton)682 { 683 } 684 685 PassRefPtr<MediaControlRewindButtonElement> MediaControlRewindButtonElement::create( HTMLMediaElement* mediaElement)686 { 687 RefPtr<MediaControlRewindButtonElement> button = adoptRef(new MediaControlRewindButtonElement( mediaElement));685 inline MediaControlRewindButtonElement::MediaControlRewindButtonElement(Document* document) 686 : MediaControlInputElement(document, MediaRewindButton) 687 { 688 } 689 690 PassRefPtr<MediaControlRewindButtonElement> MediaControlRewindButtonElement::create(Document* document) 691 { 692 RefPtr<MediaControlRewindButtonElement> button = adoptRef(new MediaControlRewindButtonElement(document)); 688 693 button->setType("button"); 689 694 return button.release(); … … 693 698 { 694 699 if (event->type() == eventNames().clickEvent) { 695 mediaElement()->rewind(30); 700 ExceptionCode ignoredCode; 701 mediaController()->setCurrentTime(max(0.0f, mediaController()->currentTime() - 30), ignoredCode); 696 702 event->setDefaultHandled(); 697 703 } … … 707 713 // ---------------------------- 708 714 709 inline MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement( HTMLMediaElement* mediaElement)710 : MediaControlInputElement( mediaElement, MediaReturnToRealtimeButton)711 { 712 } 713 714 PassRefPtr<MediaControlReturnToRealtimeButtonElement> MediaControlReturnToRealtimeButtonElement::create( HTMLMediaElement* mediaElement)715 { 716 RefPtr<MediaControlReturnToRealtimeButtonElement> button = adoptRef(new MediaControlReturnToRealtimeButtonElement( mediaElement));715 inline MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement(Document* document) 716 : MediaControlInputElement(document, MediaReturnToRealtimeButton) 717 { 718 } 719 720 PassRefPtr<MediaControlReturnToRealtimeButtonElement> MediaControlReturnToRealtimeButtonElement::create(Document* document) 721 { 722 RefPtr<MediaControlReturnToRealtimeButtonElement> button = adoptRef(new MediaControlReturnToRealtimeButtonElement(document)); 717 723 button->setType("button"); 718 724 button->hide(); … … 723 729 { 724 730 if (event->type() == eventNames().clickEvent) { 725 media Element()->returnToRealtime();731 mediaController()->returnToRealtime(); 726 732 event->setDefaultHandled(); 727 733 } … … 737 743 // ---------------------------- 738 744 739 inline MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement( HTMLMediaElement* mediaElement)740 : MediaControlInputElement( mediaElement, MediaShowClosedCaptionsButton)741 { 742 } 743 744 PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> MediaControlToggleClosedCaptionsButtonElement::create( HTMLMediaElement* mediaElement)745 { 746 RefPtr<MediaControlToggleClosedCaptionsButtonElement> button = adoptRef(new MediaControlToggleClosedCaptionsButtonElement( mediaElement));745 inline MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement(Document* document) 746 : MediaControlInputElement(document, MediaShowClosedCaptionsButton) 747 { 748 } 749 750 PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> MediaControlToggleClosedCaptionsButtonElement::create(Document* document) 751 { 752 RefPtr<MediaControlToggleClosedCaptionsButtonElement> button = adoptRef(new MediaControlToggleClosedCaptionsButtonElement(document)); 747 753 button->setType("button"); 748 754 button->hide(); … … 753 759 { 754 760 if (event->type() == eventNames().clickEvent) { 755 media Element()->setClosedCaptionsVisible(!mediaElement()->closedCaptionsVisible());756 setChecked(media Element()->closedCaptionsVisible());761 mediaController()->setClosedCaptionsVisible(!mediaController()->closedCaptionsVisible()); 762 setChecked(mediaController()->closedCaptionsVisible()); 757 763 updateDisplayType(); 758 764 event->setDefaultHandled(); … … 764 770 void MediaControlToggleClosedCaptionsButtonElement::updateDisplayType() 765 771 { 766 setDisplayType(media Element()->closedCaptionsVisible() ? MediaHideClosedCaptionsButton : MediaShowClosedCaptionsButton);772 setDisplayType(mediaController()->closedCaptionsVisible() ? MediaHideClosedCaptionsButton : MediaShowClosedCaptionsButton); 767 773 } 768 774 … … 775 781 // ---------------------------- 776 782 777 MediaControlTimelineElement::MediaControlTimelineElement( HTMLMediaElement* mediaElement, MediaControls* controls)778 : MediaControlInputElement( mediaElement, MediaSlider)783 MediaControlTimelineElement::MediaControlTimelineElement(Document* document, MediaControls* controls) 784 : MediaControlInputElement(document, MediaSlider) 779 785 , m_controls(controls) 780 786 { 781 787 } 782 788 783 PassRefPtr<MediaControlTimelineElement> MediaControlTimelineElement::create( HTMLMediaElement* mediaElement, MediaControls* controls)789 PassRefPtr<MediaControlTimelineElement> MediaControlTimelineElement::create(Document* document, MediaControls* controls) 784 790 { 785 791 ASSERT(controls); 786 792 787 RefPtr<MediaControlTimelineElement> timeline = adoptRef(new MediaControlTimelineElement( mediaElement, controls));793 RefPtr<MediaControlTimelineElement> timeline = adoptRef(new MediaControlTimelineElement(document, controls)); 788 794 timeline->setType("range"); 789 795 timeline->setAttribute(precisionAttr, "float"); … … 801 807 802 808 if (event->type() == eventNames().mousedownEvent) 803 media Element()->beginScrubbing();809 mediaController()->beginScrubbing(); 804 810 805 811 if (event->type() == eventNames().mouseupEvent) 806 media Element()->endScrubbing();812 mediaController()->endScrubbing(); 807 813 808 814 MediaControlInputElement::defaultEventHandler(event); … … 812 818 813 819 float time = narrowPrecisionToFloat(value().toDouble()); 814 if (time != media Element()->currentTime()) {820 if (time != mediaController()->currentTime()) { 815 821 // FIXME: This is fired 3 times on every click. We should not be doing that <http:/webkit.org/b/58160>. 816 822 ExceptionCode ec; 817 media Element()->setCurrentTime(time, ec);823 mediaController()->setCurrentTime(time, ec); 818 824 } 819 825 … … 842 848 // ---------------------------- 843 849 844 inline MediaControlVolumeSliderElement::MediaControlVolumeSliderElement( HTMLMediaElement* mediaElement)845 : MediaControlInputElement( mediaElement, MediaVolumeSlider)846 { 847 } 848 849 PassRefPtr<MediaControlVolumeSliderElement> MediaControlVolumeSliderElement::create( HTMLMediaElement* mediaElement)850 { 851 RefPtr<MediaControlVolumeSliderElement> slider = adoptRef(new MediaControlVolumeSliderElement( mediaElement));850 inline MediaControlVolumeSliderElement::MediaControlVolumeSliderElement(Document* document) 851 : MediaControlInputElement(document, MediaVolumeSlider) 852 { 853 } 854 855 PassRefPtr<MediaControlVolumeSliderElement> MediaControlVolumeSliderElement::create(Document* document) 856 { 857 RefPtr<MediaControlVolumeSliderElement> slider = adoptRef(new MediaControlVolumeSliderElement(document)); 852 858 slider->setType("range"); 853 859 slider->setAttribute(precisionAttr, "float"); 854 860 slider->setAttribute(maxAttr, "1"); 855 slider->setAttribute(valueAttr, String::number(mediaElement->volume()));856 861 return slider.release(); 857 862 } … … 872 877 873 878 float volume = narrowPrecisionToFloat(value().toDouble()); 874 if (volume != media Element()->volume()) {879 if (volume != mediaController()->volume()) { 875 880 ExceptionCode ec = 0; 876 media Element()->setVolume(volume, ec);881 mediaController()->setVolume(volume, ec); 877 882 ASSERT(!ec); 878 883 } … … 893 898 // ---------------------------- 894 899 895 inline MediaControlFullscreenVolumeSliderElement::MediaControlFullscreenVolumeSliderElement( HTMLMediaElement* mediaElement)896 : MediaControlVolumeSliderElement( mediaElement)897 { 898 } 899 900 PassRefPtr<MediaControlFullscreenVolumeSliderElement> MediaControlFullscreenVolumeSliderElement::create( HTMLMediaElement* mediaElement)901 { 902 RefPtr<MediaControlFullscreenVolumeSliderElement> slider = adoptRef(new MediaControlFullscreenVolumeSliderElement( mediaElement));900 inline MediaControlFullscreenVolumeSliderElement::MediaControlFullscreenVolumeSliderElement(Document* document) 901 : MediaControlVolumeSliderElement(document) 902 { 903 } 904 905 PassRefPtr<MediaControlFullscreenVolumeSliderElement> MediaControlFullscreenVolumeSliderElement::create(Document* document) 906 { 907 RefPtr<MediaControlFullscreenVolumeSliderElement> slider = adoptRef(new MediaControlFullscreenVolumeSliderElement(document)); 903 908 slider->setType("range"); 904 909 slider->setAttribute(precisionAttr, "float"); 905 910 slider->setAttribute(maxAttr, "1"); 906 slider->setAttribute(valueAttr, String::number(mediaElement->volume()));907 911 return slider.release(); 908 912 } … … 916 920 // ---------------------------- 917 921 918 inline MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement( HTMLMediaElement* mediaElement, MediaControls* controls)919 : MediaControlInputElement( mediaElement, MediaFullscreenButton)922 inline MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement(Document* document, MediaControls* controls) 923 : MediaControlInputElement(document, MediaFullscreenButton) 920 924 , m_controls(controls) 921 925 { 922 926 } 923 927 924 PassRefPtr<MediaControlFullscreenButtonElement> MediaControlFullscreenButtonElement::create( HTMLMediaElement* mediaElement, MediaControls* controls)928 PassRefPtr<MediaControlFullscreenButtonElement> MediaControlFullscreenButtonElement::create(Document* document, MediaControls* controls) 925 929 { 926 930 ASSERT(controls); 927 931 928 RefPtr<MediaControlFullscreenButtonElement> button = adoptRef(new MediaControlFullscreenButtonElement( mediaElement, controls));932 RefPtr<MediaControlFullscreenButtonElement> button = adoptRef(new MediaControlFullscreenButtonElement(document, controls)); 929 933 button->setType("button"); 930 934 button->hide(); … … 942 946 // screen behavior. 943 947 if (document()->settings() && document()->settings()->fullScreenEnabled()) { 944 if (document()->webkitIsFullScreen() && document()->webkitCurrentFullScreenElement() == mediaElement())948 if (document()->webkitIsFullScreen() && document()->webkitCurrentFullScreenElement() == toParentMediaElement(this)) 945 949 document()->webkitCancelFullScreen(); 946 950 else 947 document()->requestFullScreenForElement( mediaElement(), 0, Document::ExemptIFrameAllowFulScreenRequirement);951 document()->requestFullScreenForElement(toParentMediaElement(this), 0, Document::ExemptIFrameAllowFulScreenRequirement); 948 952 } else 949 953 #endif 950 media Element()->enterFullscreen();954 mediaController()->enterFullscreen(); 951 955 event->setDefaultHandled(); 952 956 } … … 962 966 // ---------------------------- 963 967 964 inline MediaControlFullscreenVolumeMinButtonElement::MediaControlFullscreenVolumeMinButtonElement( HTMLMediaElement* mediaElement)965 : MediaControlInputElement( mediaElement, MediaUnMuteButton)966 { 967 } 968 969 PassRefPtr<MediaControlFullscreenVolumeMinButtonElement> MediaControlFullscreenVolumeMinButtonElement::create( HTMLMediaElement* mediaElement)970 { 971 RefPtr<MediaControlFullscreenVolumeMinButtonElement> button = adoptRef(new MediaControlFullscreenVolumeMinButtonElement( mediaElement));968 inline MediaControlFullscreenVolumeMinButtonElement::MediaControlFullscreenVolumeMinButtonElement(Document* document) 969 : MediaControlInputElement(document, MediaUnMuteButton) 970 { 971 } 972 973 PassRefPtr<MediaControlFullscreenVolumeMinButtonElement> MediaControlFullscreenVolumeMinButtonElement::create(Document* document) 974 { 975 RefPtr<MediaControlFullscreenVolumeMinButtonElement> button = adoptRef(new MediaControlFullscreenVolumeMinButtonElement(document)); 972 976 button->setType("button"); 973 977 return button.release(); … … 978 982 if (event->type() == eventNames().clickEvent) { 979 983 ExceptionCode code = 0; 980 media Element()->setVolume(0, code);984 mediaController()->setVolume(0, code); 981 985 event->setDefaultHandled(); 982 986 } … … 992 996 // ---------------------------- 993 997 994 inline MediaControlFullscreenVolumeMaxButtonElement::MediaControlFullscreenVolumeMaxButtonElement( HTMLMediaElement* mediaElement)995 : MediaControlInputElement( mediaElement, MediaMuteButton)996 { 997 } 998 999 PassRefPtr<MediaControlFullscreenVolumeMaxButtonElement> MediaControlFullscreenVolumeMaxButtonElement::create( HTMLMediaElement* mediaElement)1000 { 1001 RefPtr<MediaControlFullscreenVolumeMaxButtonElement> button = adoptRef(new MediaControlFullscreenVolumeMaxButtonElement( mediaElement));998 inline MediaControlFullscreenVolumeMaxButtonElement::MediaControlFullscreenVolumeMaxButtonElement(Document* document) 999 : MediaControlInputElement(document, MediaMuteButton) 1000 { 1001 } 1002 1003 PassRefPtr<MediaControlFullscreenVolumeMaxButtonElement> MediaControlFullscreenVolumeMaxButtonElement::create(Document* document) 1004 { 1005 RefPtr<MediaControlFullscreenVolumeMaxButtonElement> button = adoptRef(new MediaControlFullscreenVolumeMaxButtonElement(document)); 1002 1006 button->setType("button"); 1003 1007 return button.release(); … … 1008 1012 if (event->type() == eventNames().clickEvent) { 1009 1013 ExceptionCode code = 0; 1010 media Element()->setVolume(1, code);1014 mediaController()->setVolume(1, code); 1011 1015 event->setDefaultHandled(); 1012 1016 } … … 1050 1054 } 1051 1055 1052 inline MediaControlTimeDisplayElement::MediaControlTimeDisplayElement( HTMLMediaElement* mediaElement)1053 : MediaControlElement( mediaElement)1056 inline MediaControlTimeDisplayElement::MediaControlTimeDisplayElement(Document* document) 1057 : MediaControlElement(document) 1054 1058 , m_currentValue(0) 1055 1059 { … … 1068 1072 // ---------------------------- 1069 1073 1070 PassRefPtr<MediaControlTimeRemainingDisplayElement> MediaControlTimeRemainingDisplayElement::create( HTMLMediaElement* mediaElement)1071 { 1072 return adoptRef(new MediaControlTimeRemainingDisplayElement( mediaElement));1073 } 1074 1075 MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement( HTMLMediaElement* mediaElement)1076 : MediaControlTimeDisplayElement( mediaElement)1074 PassRefPtr<MediaControlTimeRemainingDisplayElement> MediaControlTimeRemainingDisplayElement::create(Document* document) 1075 { 1076 return adoptRef(new MediaControlTimeRemainingDisplayElement(document)); 1077 } 1078 1079 MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement(Document* document) 1080 : MediaControlTimeDisplayElement(document) 1077 1081 { 1078 1082 } … … 1091 1095 // ---------------------------- 1092 1096 1093 PassRefPtr<MediaControlCurrentTimeDisplayElement> MediaControlCurrentTimeDisplayElement::create( HTMLMediaElement* mediaElement)1094 { 1095 return adoptRef(new MediaControlCurrentTimeDisplayElement( mediaElement));1096 } 1097 1098 MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement( HTMLMediaElement* mediaElement)1099 : MediaControlTimeDisplayElement( mediaElement)1097 PassRefPtr<MediaControlCurrentTimeDisplayElement> MediaControlCurrentTimeDisplayElement::create(Document* document) 1098 { 1099 return adoptRef(new MediaControlCurrentTimeDisplayElement(document)); 1100 } 1101 1102 MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement(Document* document) 1103 : MediaControlTimeDisplayElement(document) 1100 1104 { 1101 1105 } -
trunk/Source/WebCore/html/shadow/MediaControlElements.h
r100408 r101810 34 34 #include "HTMLDivElement.h" 35 35 #include "HTMLInputElement.h" 36 #include " HTMLMediaElement.h"36 #include "MediaControllerInterface.h" 37 37 #include "RenderBlock.h" 38 38 … … 43 43 class Event; 44 44 class Frame; 45 class HTMLMediaElement; 45 46 class MediaControls; 46 47 … … 85 86 virtual MediaControlElementType displayType() const = 0; 86 87 87 HTMLMediaElement* mediaElement() const { return m_mediaElement; } 88 89 protected: 90 MediaControlElement(HTMLMediaElement*); 88 void setMediaController(MediaControllerInterface* controller) { m_mediaController = controller; } 89 MediaControllerInterface* mediaController() const { return m_mediaController; } 90 91 protected: 92 MediaControlElement(Document*); 91 93 92 94 private: 93 95 virtual bool isMediaControlElement() const { return true; } 94 96 95 HTMLMediaElement* m_mediaElement;97 MediaControllerInterface* m_mediaController; 96 98 }; 97 99 … … 100 102 class MediaControlPanelElement : public MediaControlElement { 101 103 public: 102 static PassRefPtr<MediaControlPanelElement> create( HTMLMediaElement*);104 static PassRefPtr<MediaControlPanelElement> create(Document*); 103 105 104 106 void setCanBeDragged(bool); … … 108 110 109 111 private: 110 MediaControlPanelElement( HTMLMediaElement*);112 MediaControlPanelElement(Document*); 111 113 virtual MediaControlElementType displayType() const; 112 114 virtual const AtomicString& shadowPseudoId() const; … … 130 132 class MediaControlTimelineContainerElement : public MediaControlElement { 131 133 public: 132 static PassRefPtr<MediaControlTimelineContainerElement> create( HTMLMediaElement*);133 134 private: 135 MediaControlTimelineContainerElement( HTMLMediaElement*);134 static PassRefPtr<MediaControlTimelineContainerElement> create(Document*); 135 136 private: 137 MediaControlTimelineContainerElement(Document*); 136 138 virtual const AtomicString& shadowPseudoId() const; 137 139 … … 143 145 class MediaControlVolumeSliderContainerElement : public MediaControlElement { 144 146 public: 145 static PassRefPtr<MediaControlVolumeSliderContainerElement> create( HTMLMediaElement*);146 147 private: 148 MediaControlVolumeSliderContainerElement( HTMLMediaElement*);147 static PassRefPtr<MediaControlVolumeSliderContainerElement> create(Document*); 148 149 private: 150 MediaControlVolumeSliderContainerElement(Document*); 149 151 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); 150 152 virtual void defaultEventHandler(Event*); … … 157 159 class MediaControlStatusDisplayElement : public MediaControlElement { 158 160 public: 159 static PassRefPtr<MediaControlStatusDisplayElement> create( HTMLMediaElement*);161 static PassRefPtr<MediaControlStatusDisplayElement> create(Document*); 160 162 161 163 void update(); 162 164 163 165 private: 164 MediaControlStatusDisplayElement( HTMLMediaElement*);166 MediaControlStatusDisplayElement(Document*); 165 167 166 168 virtual MediaControlElementType displayType() const; … … 180 182 MediaControlElementType displayType() const { return m_displayType; } 181 183 182 HTMLMediaElement* mediaElement() const { return m_mediaElement; } 183 184 protected: 185 MediaControlInputElement(HTMLMediaElement*, MediaControlElementType); 184 void setMediaController(MediaControllerInterface* controller) { m_mediaController = controller; } 185 MediaControllerInterface* mediaController() const { return m_mediaController; } 186 187 protected: 188 MediaControlInputElement(Document*, MediaControlElementType); 186 189 187 190 void setDisplayType(MediaControlElementType); … … 192 195 virtual void updateDisplayType() { } 193 196 194 HTMLMediaElement* m_mediaElement;197 MediaControllerInterface* m_mediaController; 195 198 MediaControlElementType m_displayType; 196 199 }; … … 203 206 204 207 protected: 205 MediaControlMuteButtonElement( HTMLMediaElement*, MediaControlElementType);208 MediaControlMuteButtonElement(Document*, MediaControlElementType); 206 209 virtual void defaultEventHandler(Event*); 207 210 … … 215 218 class MediaControlPanelMuteButtonElement : public MediaControlMuteButtonElement { 216 219 public: 217 static PassRefPtr<MediaControlPanelMuteButtonElement> create( HTMLMediaElement*, MediaControls*);218 219 private: 220 MediaControlPanelMuteButtonElement( HTMLMediaElement*, MediaControls*);220 static PassRefPtr<MediaControlPanelMuteButtonElement> create(Document*, MediaControls*); 221 222 private: 223 MediaControlPanelMuteButtonElement(Document*, MediaControls*); 221 224 222 225 virtual void defaultEventHandler(Event*); … … 230 233 class MediaControlVolumeSliderMuteButtonElement : public MediaControlMuteButtonElement { 231 234 public: 232 static PassRefPtr<MediaControlVolumeSliderMuteButtonElement> create( HTMLMediaElement*);233 234 private: 235 MediaControlVolumeSliderMuteButtonElement( HTMLMediaElement*);235 static PassRefPtr<MediaControlVolumeSliderMuteButtonElement> create(Document*); 236 237 private: 238 MediaControlVolumeSliderMuteButtonElement(Document*); 236 239 237 240 virtual const AtomicString& shadowPseudoId() const; … … 243 246 class MediaControlPlayButtonElement : public MediaControlInputElement { 244 247 public: 245 static PassRefPtr<MediaControlPlayButtonElement> create( HTMLMediaElement*);248 static PassRefPtr<MediaControlPlayButtonElement> create(Document*); 246 249 247 250 virtual void defaultEventHandler(Event*); … … 249 252 250 253 private: 251 MediaControlPlayButtonElement( HTMLMediaElement*);254 MediaControlPlayButtonElement(Document*); 252 255 253 256 virtual const AtomicString& shadowPseudoId() const; … … 261 264 262 265 protected: 263 MediaControlSeekButtonElement( HTMLMediaElement*, MediaControlElementType);266 MediaControlSeekButtonElement(Document*, MediaControlElementType); 264 267 265 268 private: … … 283 286 class MediaControlSeekForwardButtonElement : public MediaControlSeekButtonElement { 284 287 public: 285 static PassRefPtr<MediaControlSeekForwardButtonElement> create( HTMLMediaElement*);286 287 private: 288 MediaControlSeekForwardButtonElement( HTMLMediaElement*);288 static PassRefPtr<MediaControlSeekForwardButtonElement> create(Document*); 289 290 private: 291 MediaControlSeekForwardButtonElement(Document*); 289 292 290 293 virtual bool isForwardButton() const { return true; } … … 296 299 class MediaControlSeekBackButtonElement : public MediaControlSeekButtonElement { 297 300 public: 298 static PassRefPtr<MediaControlSeekBackButtonElement> create( HTMLMediaElement*);299 300 private: 301 MediaControlSeekBackButtonElement( HTMLMediaElement*);301 static PassRefPtr<MediaControlSeekBackButtonElement> create(Document*); 302 303 private: 304 MediaControlSeekBackButtonElement(Document*); 302 305 303 306 virtual bool isForwardButton() const { return false; } … … 309 312 class MediaControlRewindButtonElement : public MediaControlInputElement { 310 313 public: 311 static PassRefPtr<MediaControlRewindButtonElement> create( HTMLMediaElement*);312 313 virtual void defaultEventHandler(Event*); 314 315 private: 316 MediaControlRewindButtonElement( HTMLMediaElement*);314 static PassRefPtr<MediaControlRewindButtonElement> create(Document*); 315 316 virtual void defaultEventHandler(Event*); 317 318 private: 319 MediaControlRewindButtonElement(Document*); 317 320 318 321 virtual const AtomicString& shadowPseudoId() const; … … 323 326 class MediaControlReturnToRealtimeButtonElement : public MediaControlInputElement { 324 327 public: 325 static PassRefPtr<MediaControlReturnToRealtimeButtonElement> create( HTMLMediaElement*);326 327 virtual void defaultEventHandler(Event*); 328 329 private: 330 MediaControlReturnToRealtimeButtonElement( HTMLMediaElement*);328 static PassRefPtr<MediaControlReturnToRealtimeButtonElement> create(Document*); 329 330 virtual void defaultEventHandler(Event*); 331 332 private: 333 MediaControlReturnToRealtimeButtonElement(Document*); 331 334 332 335 virtual const AtomicString& shadowPseudoId() const; … … 337 340 class MediaControlToggleClosedCaptionsButtonElement : public MediaControlInputElement { 338 341 public: 339 static PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> create( HTMLMediaElement*);342 static PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> create(Document*); 340 343 341 344 virtual void defaultEventHandler(Event*); … … 343 346 344 347 private: 345 MediaControlToggleClosedCaptionsButtonElement( HTMLMediaElement*);348 MediaControlToggleClosedCaptionsButtonElement(Document*); 346 349 347 350 virtual const AtomicString& shadowPseudoId() const; … … 352 355 class MediaControlTimelineElement : public MediaControlInputElement { 353 356 public: 354 static PassRefPtr<MediaControlTimelineElement> create( HTMLMediaElement*, MediaControls*);357 static PassRefPtr<MediaControlTimelineElement> create(Document*, MediaControls*); 355 358 356 359 virtual void defaultEventHandler(Event*); … … 359 362 360 363 private: 361 MediaControlTimelineElement( HTMLMediaElement*, MediaControls*);364 MediaControlTimelineElement(Document*, MediaControls*); 362 365 363 366 virtual const AtomicString& shadowPseudoId() const; … … 370 373 class MediaControlVolumeSliderElement : public MediaControlInputElement { 371 374 public: 372 static PassRefPtr<MediaControlVolumeSliderElement> create( HTMLMediaElement*);375 static PassRefPtr<MediaControlVolumeSliderElement> create(Document*); 373 376 374 377 virtual void defaultEventHandler(Event*); … … 376 379 377 380 protected: 378 MediaControlVolumeSliderElement( HTMLMediaElement*);381 MediaControlVolumeSliderElement(Document*); 379 382 380 383 private: … … 386 389 class MediaControlFullscreenButtonElement : public MediaControlInputElement { 387 390 public: 388 static PassRefPtr<MediaControlFullscreenButtonElement> create( HTMLMediaElement*, MediaControls*);389 390 virtual void defaultEventHandler(Event*); 391 392 private: 393 MediaControlFullscreenButtonElement( HTMLMediaElement*, MediaControls*);391 static PassRefPtr<MediaControlFullscreenButtonElement> create(Document*, MediaControls*); 392 393 virtual void defaultEventHandler(Event*); 394 395 private: 396 MediaControlFullscreenButtonElement(Document*, MediaControls*); 394 397 395 398 virtual const AtomicString& shadowPseudoId() const; … … 402 405 class MediaControlFullscreenVolumeSliderElement : public MediaControlVolumeSliderElement { 403 406 public: 404 static PassRefPtr<MediaControlFullscreenVolumeSliderElement> create( HTMLMediaElement*);405 406 private: 407 MediaControlFullscreenVolumeSliderElement( HTMLMediaElement*);407 static PassRefPtr<MediaControlFullscreenVolumeSliderElement> create(Document*); 408 409 private: 410 MediaControlFullscreenVolumeSliderElement(Document*); 408 411 409 412 virtual const AtomicString& shadowPseudoId() const; … … 414 417 class MediaControlFullscreenVolumeMinButtonElement : public MediaControlInputElement { 415 418 public: 416 static PassRefPtr<MediaControlFullscreenVolumeMinButtonElement> create( HTMLMediaElement*);417 418 virtual void defaultEventHandler(Event*); 419 420 private: 421 MediaControlFullscreenVolumeMinButtonElement( HTMLMediaElement*);419 static PassRefPtr<MediaControlFullscreenVolumeMinButtonElement> create(Document*); 420 421 virtual void defaultEventHandler(Event*); 422 423 private: 424 MediaControlFullscreenVolumeMinButtonElement(Document*); 422 425 423 426 virtual const AtomicString& shadowPseudoId() const; … … 428 431 class MediaControlFullscreenVolumeMaxButtonElement : public MediaControlInputElement { 429 432 public: 430 static PassRefPtr<MediaControlFullscreenVolumeMaxButtonElement> create( HTMLMediaElement*);431 432 virtual void defaultEventHandler(Event*); 433 434 private: 435 MediaControlFullscreenVolumeMaxButtonElement( HTMLMediaElement*);433 static PassRefPtr<MediaControlFullscreenVolumeMaxButtonElement> create(Document*); 434 435 virtual void defaultEventHandler(Event*); 436 437 private: 438 MediaControlFullscreenVolumeMaxButtonElement(Document*); 436 439 437 440 virtual const AtomicString& shadowPseudoId() const; … … 446 449 447 450 protected: 448 MediaControlTimeDisplayElement( HTMLMediaElement*);451 MediaControlTimeDisplayElement(Document*); 449 452 450 453 private: … … 458 461 class MediaControlTimeRemainingDisplayElement : public MediaControlTimeDisplayElement { 459 462 public: 460 static PassRefPtr<MediaControlTimeRemainingDisplayElement> create( HTMLMediaElement*);461 462 private: 463 MediaControlTimeRemainingDisplayElement( HTMLMediaElement*);463 static PassRefPtr<MediaControlTimeRemainingDisplayElement> create(Document*); 464 465 private: 466 MediaControlTimeRemainingDisplayElement(Document*); 464 467 465 468 virtual MediaControlElementType displayType() const; … … 471 474 class MediaControlCurrentTimeDisplayElement : public MediaControlTimeDisplayElement { 472 475 public: 473 static PassRefPtr<MediaControlCurrentTimeDisplayElement> create( HTMLMediaElement*);474 475 private: 476 MediaControlCurrentTimeDisplayElement( HTMLMediaElement*);476 static PassRefPtr<MediaControlCurrentTimeDisplayElement> create(Document*); 477 478 private: 479 MediaControlCurrentTimeDisplayElement(Document*); 477 480 478 481 virtual MediaControlElementType displayType() const; -
trunk/Source/WebCore/html/shadow/MediaControlRootElement.cpp
r97157 r101810 31 31 32 32 #include "Chrome.h" 33 #include "HTMLMediaElement.h" 33 34 #include "MediaControlElements.h" 34 35 #include "MouseEvent.h" … … 42 43 static const double timeWithoutMouseMovementBeforeHidingControls = 3; 43 44 44 MediaControlRootElement::MediaControlRootElement( HTMLMediaElement* mediaElement)45 : MediaControls( mediaElement)46 , m_media Element(mediaElement)45 MediaControlRootElement::MediaControlRootElement(Document* document) 46 : MediaControls(document) 47 , m_mediaController(0) 47 48 , m_rewindButton(0) 48 49 , m_playButton(0) … … 70 71 } 71 72 72 PassRefPtr<MediaControls> MediaControls::create( HTMLMediaElement* mediaElement)73 { 74 return MediaControlRootElement::create( mediaElement);75 } 76 77 PassRefPtr<MediaControlRootElement> MediaControlRootElement::create( HTMLMediaElement* mediaElement)78 { 79 if (! mediaElement->document()->page())80 return 0; 81 82 RefPtr<MediaControlRootElement> controls = adoptRef(new MediaControlRootElement( mediaElement));83 84 RefPtr<MediaControlPanelElement> panel = MediaControlPanelElement::create( mediaElement);73 PassRefPtr<MediaControls> MediaControls::create(Document* document) 74 { 75 return MediaControlRootElement::create(document); 76 } 77 78 PassRefPtr<MediaControlRootElement> MediaControlRootElement::create(Document* document) 79 { 80 if (!document->page()) 81 return 0; 82 83 RefPtr<MediaControlRootElement> controls = adoptRef(new MediaControlRootElement(document)); 84 85 RefPtr<MediaControlPanelElement> panel = MediaControlPanelElement::create(document); 85 86 86 87 ExceptionCode ec; 87 88 88 RefPtr<MediaControlRewindButtonElement> rewindButton = MediaControlRewindButtonElement::create( mediaElement);89 RefPtr<MediaControlRewindButtonElement> rewindButton = MediaControlRewindButtonElement::create(document); 89 90 controls->m_rewindButton = rewindButton.get(); 90 91 panel->appendChild(rewindButton.release(), ec, true); … … 92 93 return 0; 93 94 94 RefPtr<MediaControlPlayButtonElement> playButton = MediaControlPlayButtonElement::create( mediaElement);95 RefPtr<MediaControlPlayButtonElement> playButton = MediaControlPlayButtonElement::create(document); 95 96 controls->m_playButton = playButton.get(); 96 97 panel->appendChild(playButton.release(), ec, true); … … 98 99 return 0; 99 100 100 RefPtr<MediaControlReturnToRealtimeButtonElement> returnToRealtimeButton = MediaControlReturnToRealtimeButtonElement::create( mediaElement);101 RefPtr<MediaControlReturnToRealtimeButtonElement> returnToRealtimeButton = MediaControlReturnToRealtimeButtonElement::create(document); 101 102 controls->m_returnToRealTimeButton = returnToRealtimeButton.get(); 102 103 panel->appendChild(returnToRealtimeButton.release(), ec, true); … … 104 105 return 0; 105 106 106 if ( mediaElement->document()->page()->theme()->usesMediaControlStatusDisplay()) {107 RefPtr<MediaControlStatusDisplayElement> statusDisplay = MediaControlStatusDisplayElement::create( mediaElement);107 if (document->page()->theme()->usesMediaControlStatusDisplay()) { 108 RefPtr<MediaControlStatusDisplayElement> statusDisplay = MediaControlStatusDisplayElement::create(document); 108 109 controls->m_statusDisplay = statusDisplay.get(); 109 110 panel->appendChild(statusDisplay.release(), ec, true); … … 112 113 } 113 114 114 RefPtr<MediaControlTimelineContainerElement> timelineContainer = MediaControlTimelineContainerElement::create( mediaElement);115 116 RefPtr<MediaControlCurrentTimeDisplayElement> currentTimeDisplay = MediaControlCurrentTimeDisplayElement::create( mediaElement);115 RefPtr<MediaControlTimelineContainerElement> timelineContainer = MediaControlTimelineContainerElement::create(document); 116 117 RefPtr<MediaControlCurrentTimeDisplayElement> currentTimeDisplay = MediaControlCurrentTimeDisplayElement::create(document); 117 118 controls->m_currentTimeDisplay = currentTimeDisplay.get(); 118 119 timelineContainer->appendChild(currentTimeDisplay.release(), ec, true); … … 120 121 return 0; 121 122 122 RefPtr<MediaControlTimelineElement> timeline = MediaControlTimelineElement::create( mediaElement, controls.get());123 RefPtr<MediaControlTimelineElement> timeline = MediaControlTimelineElement::create(document, controls.get()); 123 124 controls->m_timeline = timeline.get(); 124 125 timelineContainer->appendChild(timeline.release(), ec, true); … … 126 127 return 0; 127 128 128 RefPtr<MediaControlTimeRemainingDisplayElement> timeRemainingDisplay = MediaControlTimeRemainingDisplayElement::create( mediaElement);129 RefPtr<MediaControlTimeRemainingDisplayElement> timeRemainingDisplay = MediaControlTimeRemainingDisplayElement::create(document); 129 130 controls->m_timeRemainingDisplay = timeRemainingDisplay.get(); 130 131 timelineContainer->appendChild(timeRemainingDisplay.release(), ec, true); … … 138 139 139 140 // FIXME: Only create when needed <http://webkit.org/b/57163> 140 RefPtr<MediaControlSeekBackButtonElement> seekBackButton = MediaControlSeekBackButtonElement::create( mediaElement);141 RefPtr<MediaControlSeekBackButtonElement> seekBackButton = MediaControlSeekBackButtonElement::create(document); 141 142 controls->m_seekBackButton = seekBackButton.get(); 142 143 panel->appendChild(seekBackButton.release(), ec, true); … … 145 146 146 147 // FIXME: Only create when needed <http://webkit.org/b/57163> 147 RefPtr<MediaControlSeekForwardButtonElement> seekForwardButton = MediaControlSeekForwardButtonElement::create( mediaElement);148 RefPtr<MediaControlSeekForwardButtonElement> seekForwardButton = MediaControlSeekForwardButtonElement::create(document); 148 149 controls->m_seekForwardButton = seekForwardButton.get(); 149 150 panel->appendChild(seekForwardButton.release(), ec, true); … … 151 152 return 0; 152 153 153 if ( mediaElement->document()->page()->theme()->supportsClosedCaptioning()) {154 RefPtr<MediaControlToggleClosedCaptionsButtonElement> toggleClosedCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create( mediaElement);154 if (document->page()->theme()->supportsClosedCaptioning()) { 155 RefPtr<MediaControlToggleClosedCaptionsButtonElement> toggleClosedCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(document); 155 156 controls->m_toggleClosedCaptionsButton = toggleClosedCaptionsButton.get(); 156 157 panel->appendChild(toggleClosedCaptionsButton.release(), ec, true); … … 160 161 161 162 // FIXME: Only create when needed <http://webkit.org/b/57163> 162 RefPtr<MediaControlFullscreenButtonElement> fullScreenButton = MediaControlFullscreenButtonElement::create( mediaElement, controls.get());163 RefPtr<MediaControlFullscreenButtonElement> fullScreenButton = MediaControlFullscreenButtonElement::create(document, controls.get()); 163 164 controls->m_fullScreenButton = fullScreenButton.get(); 164 165 panel->appendChild(fullScreenButton.release(), ec, true); 165 166 166 RefPtr<MediaControlPanelMuteButtonElement> panelMuteButton = MediaControlPanelMuteButtonElement::create( mediaElement, controls.get());167 RefPtr<MediaControlPanelMuteButtonElement> panelMuteButton = MediaControlPanelMuteButtonElement::create(document, controls.get()); 167 168 controls->m_panelMuteButton = panelMuteButton.get(); 168 169 panel->appendChild(panelMuteButton.release(), ec, true); … … 170 171 return 0; 171 172 172 if ( mediaElement->document()->page()->theme()->usesMediaControlVolumeSlider()) {173 RefPtr<MediaControlVolumeSliderContainerElement> volumeSliderContainer = MediaControlVolumeSliderContainerElement::create( mediaElement);174 175 RefPtr<MediaControlVolumeSliderElement> slider = MediaControlVolumeSliderElement::create( mediaElement);173 if (document->page()->theme()->usesMediaControlVolumeSlider()) { 174 RefPtr<MediaControlVolumeSliderContainerElement> volumeSliderContainer = MediaControlVolumeSliderContainerElement::create(document); 175 176 RefPtr<MediaControlVolumeSliderElement> slider = MediaControlVolumeSliderElement::create(document); 176 177 controls->m_volumeSlider = slider.get(); 177 178 volumeSliderContainer->appendChild(slider.release(), ec, true); … … 179 180 return 0; 180 181 181 RefPtr<MediaControlVolumeSliderMuteButtonElement> volumeSliderMuteButton = MediaControlVolumeSliderMuteButtonElement::create( mediaElement);182 RefPtr<MediaControlVolumeSliderMuteButtonElement> volumeSliderMuteButton = MediaControlVolumeSliderMuteButtonElement::create(document); 182 183 controls->m_volumeSliderMuteButton = volumeSliderMuteButton.get(); 183 184 volumeSliderContainer->appendChild(volumeSliderMuteButton.release(), ec, true); … … 192 193 193 194 // FIXME: Only create when needed <http://webkit.org/b/57163> 194 RefPtr<MediaControlFullscreenVolumeMinButtonElement> fullScreenMinVolumeButton = MediaControlFullscreenVolumeMinButtonElement::create( mediaElement);195 RefPtr<MediaControlFullscreenVolumeMinButtonElement> fullScreenMinVolumeButton = MediaControlFullscreenVolumeMinButtonElement::create(document); 195 196 controls->m_fullScreenMinVolumeButton = fullScreenMinVolumeButton.get(); 196 197 panel->appendChild(fullScreenMinVolumeButton.release(), ec, true); … … 198 199 return 0; 199 200 200 RefPtr<MediaControlFullscreenVolumeSliderElement> fullScreenVolumeSlider = MediaControlFullscreenVolumeSliderElement::create( mediaElement);201 RefPtr<MediaControlFullscreenVolumeSliderElement> fullScreenVolumeSlider = MediaControlFullscreenVolumeSliderElement::create(document); 201 202 controls->m_fullScreenVolumeSlider = fullScreenVolumeSlider.get(); 202 203 panel->appendChild(fullScreenVolumeSlider.release(), ec, true); … … 204 205 return 0; 205 206 206 RefPtr<MediaControlFullscreenVolumeMaxButtonElement> fullScreenMaxVolumeButton = MediaControlFullscreenVolumeMaxButtonElement::create( mediaElement);207 RefPtr<MediaControlFullscreenVolumeMaxButtonElement> fullScreenMaxVolumeButton = MediaControlFullscreenVolumeMaxButtonElement::create(document); 207 208 controls->m_fullScreenMaxVolumeButton = fullScreenMaxVolumeButton.get(); 208 209 panel->appendChild(fullScreenMaxVolumeButton.release(), ec, true); … … 218 219 } 219 220 221 void MediaControlRootElement::setMediaController(MediaControllerInterface* controller) 222 { 223 if (m_mediaController == controller) 224 return; 225 m_mediaController = controller; 226 227 if (m_rewindButton) 228 m_rewindButton->setMediaController(controller); 229 if (m_playButton) 230 m_playButton->setMediaController(controller); 231 if (m_returnToRealTimeButton) 232 m_returnToRealTimeButton->setMediaController(controller); 233 if (m_statusDisplay) 234 m_statusDisplay->setMediaController(controller); 235 if (m_currentTimeDisplay) 236 m_currentTimeDisplay->setMediaController(controller); 237 if (m_timeline) 238 m_timeline->setMediaController(controller); 239 if (m_timeRemainingDisplay) 240 m_timeRemainingDisplay->setMediaController(controller); 241 if (m_timelineContainer) 242 m_timelineContainer->setMediaController(controller); 243 if (m_seekBackButton) 244 m_seekBackButton->setMediaController(controller); 245 if (m_seekForwardButton) 246 m_seekForwardButton->setMediaController(controller); 247 if (m_toggleClosedCaptionsButton) 248 m_toggleClosedCaptionsButton->setMediaController(controller); 249 if (m_panelMuteButton) 250 m_panelMuteButton->setMediaController(controller); 251 if (m_volumeSlider) 252 m_volumeSlider->setMediaController(controller); 253 if (m_volumeSliderMuteButton) 254 m_volumeSliderMuteButton->setMediaController(controller); 255 if (m_volumeSliderContainer) 256 m_volumeSliderContainer->setMediaController(controller); 257 if (m_fullScreenButton) 258 m_fullScreenButton->setMediaController(controller); 259 if (m_fullScreenMinVolumeButton) 260 m_fullScreenMinVolumeButton->setMediaController(controller); 261 if (m_fullScreenVolumeSlider) 262 m_fullScreenVolumeSlider->setMediaController(controller); 263 if (m_fullScreenMaxVolumeButton) 264 m_fullScreenMaxVolumeButton->setMediaController(controller); 265 if (m_panel) 266 m_panel->setMediaController(controller); 267 reset(); 268 } 269 220 270 void MediaControlRootElement::show() 221 271 { … … 246 296 updateStatusDisplay(); 247 297 248 if (m_media Element->supportsFullscreen())298 if (m_mediaController->supportsFullscreen()) 249 299 m_fullScreenButton->show(); 250 300 else 251 301 m_fullScreenButton->hide(); 252 302 253 float duration = m_media Element->duration();303 float duration = m_mediaController->duration(); 254 304 if (isfinite(duration) || page->theme()->hasOwnDisabledStateHandlingFor(MediaSliderPart)) { 255 305 m_timeline->setDuration(duration); 256 306 m_timelineContainer->show(); 257 m_timeline->setPosition(m_media Element->currentTime());307 m_timeline->setPosition(m_mediaController->currentTime()); 258 308 updateTimeDisplay(); 259 309 } else 260 310 m_timelineContainer->hide(); 261 311 262 if (m_media Element->hasAudio() || page->theme()->hasOwnDisabledStateHandlingFor(MediaMuteButtonPart))312 if (m_mediaController->hasAudio() || page->theme()->hasOwnDisabledStateHandlingFor(MediaMuteButtonPart)) 263 313 m_panelMuteButton->show(); 264 314 else … … 266 316 267 317 if (m_volumeSlider) 268 m_volumeSlider->setVolume(m_media Element->volume());318 m_volumeSlider->setVolume(m_mediaController->volume()); 269 319 270 320 if (m_toggleClosedCaptionsButton) { 271 if (m_media Element->hasClosedCaptions())321 if (m_mediaController->hasClosedCaptions()) 272 322 m_toggleClosedCaptionsButton->show(); 273 323 else … … 278 328 279 329 #if ENABLE(FULLSCREEN_API) 280 if (document()->webkitIsFullScreen() && document()->webkitCurrentFullScreenElement() == m_mediaElement) {281 if (m_media Element->movieLoadType() == MediaPlayer::LiveStream) {330 if (document()->webkitIsFullScreen() && document()->webkitCurrentFullScreenElement() == toParentMediaElement(this)) { 331 if (m_mediaController->isLiveStream()) { 282 332 m_seekBackButton->hide(); 283 333 m_seekForwardButton->hide(); … … 292 342 } else 293 343 #endif 294 if ( m_mediaElement->movieLoadType() != MediaPlayer::LiveStream) {344 if (!m_mediaController->isLiveStream()) { 295 345 m_returnToRealTimeButton->hide(); 296 346 m_rewindButton->show(); … … 306 356 { 307 357 m_playButton->updateDisplayType(); 308 m_timeline->setPosition(m_media Element->currentTime());358 m_timeline->setPosition(m_mediaController->currentTime()); 309 359 updateTimeDisplay(); 310 360 311 if (m_media Element->isFullscreen())361 if (m_mediaController->isFullscreen()) 312 362 startHideFullscreenControlsTimer(); 313 363 } … … 315 365 void MediaControlRootElement::playbackProgressed() 316 366 { 317 m_timeline->setPosition(m_media Element->currentTime());367 m_timeline->setPosition(m_mediaController->currentTime()); 318 368 updateTimeDisplay(); 319 369 320 if (!m_isMouseOverControls && m_media Element->hasVideo())370 if (!m_isMouseOverControls && m_mediaController->hasVideo()) 321 371 makeTransparent(); 322 372 } … … 325 375 { 326 376 m_playButton->updateDisplayType(); 327 m_timeline->setPosition(m_media Element->currentTime());377 m_timeline->setPosition(m_mediaController->currentTime()); 328 378 updateTimeDisplay(); 329 379 makeOpaque(); … … 334 384 void MediaControlRootElement::updateTimeDisplay() 335 385 { 336 float now = m_media Element->currentTime();337 float duration = m_media Element->duration();386 float now = m_mediaController->currentTime(); 387 float duration = m_mediaController->duration(); 338 388 339 389 Page* page = document()->page(); … … 377 427 void MediaControlRootElement::loadedMetadata() 378 428 { 379 if (m_statusDisplay && m_media Element->movieLoadType() != MediaPlayer::LiveStream)429 if (m_statusDisplay && m_mediaController->isLiveStream()) 380 430 m_statusDisplay->hide(); 381 431 … … 399 449 { 400 450 if (m_volumeSlider) 401 m_volumeSlider->setVolume(m_media Element->volume());451 m_volumeSlider->setVolume(m_mediaController->volume()); 402 452 } 403 453 404 454 void MediaControlRootElement::enteredFullscreen() 405 455 { 406 if (m_media Element->movieLoadType() == MediaPlayer::LiveStream) {456 if (m_mediaController->isLiveStream()) { 407 457 m_seekBackButton->hide(); 408 458 m_seekForwardButton->hide(); … … 418 468 m_panel->setCanBeDragged(true); 419 469 420 if (Page* page = m_mediaElement->document()->page())470 if (Page* page = document()->page()) 421 471 page->chrome()->setCursorHiddenUntilMouseMoves(true); 422 472 … … 446 496 void MediaControlRootElement::showVolumeSlider() 447 497 { 448 if (!m_media Element->hasAudio())498 if (!m_mediaController->hasAudio()) 449 499 return; 450 500 … … 475 525 if (!containsRelatedTarget(event)) { 476 526 m_isMouseOverControls = true; 477 if (!m_media Element->canPlay()) {527 if (!m_mediaController->canPlay()) { 478 528 makeOpaque(); 479 529 if (shouldHideControls()) … … 487 537 } 488 538 } else if (event->type() == eventNames().mousemoveEvent) { 489 if (m_media Element->isFullscreen()) {539 if (m_mediaController->isFullscreen()) { 490 540 // When we get a mouse move in fullscreen mode, show the media controls, and start a timer 491 541 // that will hide the media controls after a 3 seconds without a mouse move. … … 499 549 void MediaControlRootElement::startHideFullscreenControlsTimer() 500 550 { 501 if (!m_media Element->isFullscreen())551 if (!m_mediaController->isFullscreen()) 502 552 return; 503 553 … … 507 557 void MediaControlRootElement::hideFullscreenControlsTimerFired(Timer<MediaControlRootElement>*) 508 558 { 509 if ( !m_mediaElement->isPlaying())559 if (m_mediaController->paused()) 510 560 return; 511 561 512 if (!m_media Element->isFullscreen())562 if (!m_mediaController->isFullscreen()) 513 563 return; 514 564 … … 516 566 return; 517 567 518 if (Page* page = m_mediaElement->document()->page())568 if (Page* page = document()->page()) 519 569 page->chrome()->setCursorHiddenUntilMouseMoves(true); 520 570 -
trunk/Source/WebCore/html/shadow/MediaControlRootElement.h
r97157 r101810 69 69 class MediaControlRootElement : public MediaControls { 70 70 public: 71 static PassRefPtr<MediaControlRootElement> create( HTMLMediaElement*);71 static PassRefPtr<MediaControlRootElement> create(Document*); 72 72 73 73 // MediaControls implementation. 74 void setMediaController(MediaControllerInterface*); 75 74 76 void show(); 75 77 void hide(); … … 100 102 101 103 private: 102 MediaControlRootElement( HTMLMediaElement*);104 MediaControlRootElement(Document*); 103 105 104 106 virtual void defaultEventHandler(Event*); … … 111 113 bool containsRelatedTarget(Event*); 112 114 113 HTMLMediaElement* m_mediaElement;115 MediaControllerInterface* m_mediaController; 114 116 115 117 MediaControlRewindButtonElement* m_rewindButton; -
trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.cpp
r97157 r101810 39 39 namespace WebCore { 40 40 41 MediaControlRootElementChromium::MediaControlRootElementChromium( HTMLMediaElement* mediaElement)42 : MediaControls( mediaElement)43 , m_media Element(mediaElement)41 MediaControlRootElementChromium::MediaControlRootElementChromium(Document* document) 42 : MediaControls(document) 43 , m_mediaController(0) 44 44 , m_playButton(0) 45 45 , m_currentTimeDisplay(0) … … 55 55 } 56 56 57 PassRefPtr<MediaControls> MediaControls::create( HTMLMediaElement* mediaElement)58 { 59 return MediaControlRootElementChromium::create( mediaElement);60 } 61 62 PassRefPtr<MediaControlRootElementChromium> MediaControlRootElementChromium::create( HTMLMediaElement* mediaElement)63 { 64 if (! mediaElement->document()->page())65 return 0; 66 67 RefPtr<MediaControlRootElementChromium> controls = adoptRef(new MediaControlRootElementChromium( mediaElement));68 69 RefPtr<MediaControlPanelElement> panel = MediaControlPanelElement::create( mediaElement);57 PassRefPtr<MediaControls> MediaControls::create(Document* document) 58 { 59 return MediaControlRootElementChromium::create(document); 60 } 61 62 PassRefPtr<MediaControlRootElementChromium> MediaControlRootElementChromium::create(Document* document) 63 { 64 if (!document->page()) 65 return 0; 66 67 RefPtr<MediaControlRootElementChromium> controls = adoptRef(new MediaControlRootElementChromium(document)); 68 69 RefPtr<MediaControlPanelElement> panel = MediaControlPanelElement::create(document); 70 70 71 71 ExceptionCode ec; 72 72 73 RefPtr<MediaControlPlayButtonElement> playButton = MediaControlPlayButtonElement::create( mediaElement);73 RefPtr<MediaControlPlayButtonElement> playButton = MediaControlPlayButtonElement::create(document); 74 74 controls->m_playButton = playButton.get(); 75 75 panel->appendChild(playButton.release(), ec, true); … … 77 77 return 0; 78 78 79 RefPtr<MediaControlTimelineContainerElement> timelineContainer = MediaControlTimelineContainerElement::create( mediaElement);80 81 RefPtr<MediaControlTimelineElement> timeline = MediaControlTimelineElement::create( mediaElement, controls.get());79 RefPtr<MediaControlTimelineContainerElement> timelineContainer = MediaControlTimelineContainerElement::create(document); 80 81 RefPtr<MediaControlTimelineElement> timeline = MediaControlTimelineElement::create(document, controls.get()); 82 82 controls->m_timeline = timeline.get(); 83 83 timelineContainer->appendChild(timeline.release(), ec, true); … … 85 85 return 0; 86 86 87 RefPtr<MediaControlCurrentTimeDisplayElement> currentTimeDisplay = MediaControlCurrentTimeDisplayElement::create( mediaElement);87 RefPtr<MediaControlCurrentTimeDisplayElement> currentTimeDisplay = MediaControlCurrentTimeDisplayElement::create(document); 88 88 controls->m_currentTimeDisplay = currentTimeDisplay.get(); 89 89 timelineContainer->appendChild(currentTimeDisplay.release(), ec, true); … … 96 96 return 0; 97 97 98 RefPtr<MediaControlPanelMuteButtonElement> panelMuteButton = MediaControlPanelMuteButtonElement::create( mediaElement, controls.get());98 RefPtr<MediaControlPanelMuteButtonElement> panelMuteButton = MediaControlPanelMuteButtonElement::create(document, controls.get()); 99 99 controls->m_panelMuteButton = panelMuteButton.get(); 100 100 panel->appendChild(panelMuteButton.release(), ec, true); … … 102 102 return 0; 103 103 104 RefPtr<MediaControlVolumeSliderContainerElement> volumeSliderContainer = MediaControlVolumeSliderContainerElement::create( mediaElement);105 106 RefPtr<MediaControlVolumeSliderElement> slider = MediaControlVolumeSliderElement::create( mediaElement);104 RefPtr<MediaControlVolumeSliderContainerElement> volumeSliderContainer = MediaControlVolumeSliderContainerElement::create(document); 105 106 RefPtr<MediaControlVolumeSliderElement> slider = MediaControlVolumeSliderElement::create(document); 107 107 controls->m_volumeSlider = slider.get(); 108 108 volumeSliderContainer->appendChild(slider.release(), ec, true); … … 123 123 } 124 124 125 void MediaControlRootElementChromium::setMediaController(MediaControllerInterface* controller) 126 { 127 if (m_mediaController == controller) 128 return; 129 m_mediaController = controller; 130 131 if (m_playButton) 132 m_playButton->setMediaController(controller); 133 if (m_currentTimeDisplay) 134 m_currentTimeDisplay->setMediaController(controller); 135 if (m_timeline) 136 m_timeline->setMediaController(controller); 137 if (m_timelineContainer) 138 m_timelineContainer->setMediaController(controller); 139 if (m_panelMuteButton) 140 m_panelMuteButton->setMediaController(controller); 141 if (m_volumeSlider) 142 m_volumeSlider->setMediaController(controller); 143 if (m_volumeSliderContainer) 144 m_volumeSliderContainer->setMediaController(controller); 145 if (m_panel) 146 m_panel->setMediaController(controller); 147 reset(); 148 } 149 125 150 void MediaControlRootElementChromium::show() 126 151 { … … 151 176 updateStatusDisplay(); 152 177 153 float duration = m_media Element->duration();178 float duration = m_mediaController->duration(); 154 179 m_timeline->setDuration(duration); 155 180 m_timelineContainer->show(); 156 m_timeline->setPosition(m_media Element->currentTime());181 m_timeline->setPosition(m_mediaController->currentTime()); 157 182 updateTimeDisplay(); 158 183 … … 160 185 161 186 if (m_volumeSlider) 162 m_volumeSlider->setVolume(m_media Element->volume());187 m_volumeSlider->setVolume(m_mediaController->volume()); 163 188 164 189 makeOpaque(); … … 168 193 { 169 194 m_playButton->updateDisplayType(); 170 m_timeline->setPosition(m_media Element->currentTime());195 m_timeline->setPosition(m_mediaController->currentTime()); 171 196 updateTimeDisplay(); 172 197 } … … 174 199 void MediaControlRootElementChromium::playbackProgressed() 175 200 { 176 m_timeline->setPosition(m_media Element->currentTime());201 m_timeline->setPosition(m_mediaController->currentTime()); 177 202 updateTimeDisplay(); 178 203 179 if (!m_isMouseOverControls && m_media Element->hasVideo())204 if (!m_isMouseOverControls && m_mediaController->hasVideo()) 180 205 makeTransparent(); 181 206 } … … 184 209 { 185 210 m_playButton->updateDisplayType(); 186 m_timeline->setPosition(m_media Element->currentTime());211 m_timeline->setPosition(m_mediaController->currentTime()); 187 212 updateTimeDisplay(); 188 213 makeOpaque(); … … 191 216 void MediaControlRootElementChromium::updateTimeDisplay() 192 217 { 193 float now = m_media Element->currentTime();194 float duration = m_media Element->duration();218 float now = m_mediaController->currentTime(); 219 float duration = m_mediaController->duration(); 195 220 196 221 Page* page = document()->page(); … … 246 271 if (!containsRelatedTarget(event)) { 247 272 m_isMouseOverControls = true; 248 if (!m_media Element->canPlay())273 if (!m_mediaController->canPlay()) 249 274 makeOpaque(); 250 275 } … … 266 291 void MediaControlRootElementChromium::changedVolume() 267 292 { 268 m_volumeSlider->setVolume(m_media Element->volume());293 m_volumeSlider->setVolume(m_mediaController->volume()); 269 294 } 270 295 … … 279 304 void MediaControlRootElementChromium::showVolumeSlider() 280 305 { 281 if (!m_media Element->hasAudio())306 if (!m_mediaController->hasAudio()) 282 307 return; 283 308 -
trunk/Source/WebCore/html/shadow/MediaControlRootElementChromium.h
r95901 r101810 35 35 namespace WebCore { 36 36 37 class Document; 37 38 class HTMLInputElement; 38 class HTMLMediaElement;39 39 class Event; 40 40 class MediaControlPanelMuteButtonElement; … … 50 50 class MediaControlVolumeSliderContainerElement; 51 51 class MediaControlPanelElement; 52 class MediaControllerInterface; 52 53 class MediaPlayer; 53 54 … … 57 58 class MediaControlRootElementChromium : public MediaControls { 58 59 public: 59 static PassRefPtr<MediaControlRootElementChromium> create( HTMLMediaElement*);60 static PassRefPtr<MediaControlRootElementChromium> create(Document*); 60 61 61 62 // MediaControls implementation. 63 void setMediaController(MediaControllerInterface*); 64 62 65 void show(); 63 66 void hide(); … … 88 91 89 92 private: 90 MediaControlRootElementChromium( HTMLMediaElement*);93 MediaControlRootElementChromium(Document*); 91 94 92 95 virtual void defaultEventHandler(Event*); … … 96 99 bool containsRelatedTarget(Event*); 97 100 98 HTMLMediaElement* m_mediaElement;101 MediaControllerInterface* m_mediaController; 99 102 100 103 MediaControlPlayButtonElement* m_playButton; -
trunk/Source/WebCore/html/shadow/MediaControls.cpp
r95901 r101810 37 37 namespace WebCore { 38 38 39 MediaControls::MediaControls( HTMLMediaElement* mediaElement)40 : HTMLDivElement(HTMLNames::divTag, mediaElement->document())39 MediaControls::MediaControls(Document* document) 40 : HTMLDivElement(HTMLNames::divTag, document) 41 41 { 42 42 } -
trunk/Source/WebCore/html/shadow/MediaControls.h
r95901 r101810 34 34 namespace WebCore { 35 35 36 class HTMLMediaElement;36 class MediaControllerInterface; 37 37 38 38 class MediaControls : public HTMLDivElement { … … 42 42 // This function is to be implemented in your port-specific media 43 43 // controls implementation. 44 static PassRefPtr<MediaControls> create(HTMLMediaElement*); 44 static PassRefPtr<MediaControls> create(Document*); 45 46 virtual void setMediaController(MediaControllerInterface*) = 0; 45 47 46 48 virtual void show() = 0; … … 72 74 73 75 protected: 74 MediaControls( HTMLMediaElement*);76 MediaControls(Document*); 75 77 76 78 private:
Note: See TracChangeset
for help on using the changeset viewer.