18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 25af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke * Copyright (C) 2008, 2009, 2010 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(VIDEO) 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MediaControlElements.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "CSSStyleSelector.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "EventNames.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FloatConversion.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLNames.h" 40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "LocalizedStrings.h" 412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "MediaControls.h" 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "MouseEvent.h" 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Page.h" 442bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "RenderFlexibleBox.h" 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "RenderMedia.h" 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderSlider.h" 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "RenderTheme.h" 482bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "RenderView.h" 495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "Settings.h" 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace HTMLNames; 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockHTMLMediaElement* toParentMediaElement(RenderObject* o) 56231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Node* node = o->node(); 58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Node* mediaNode = node ? node->shadowAncestorNode() : 0; 59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!mediaNode || (!mediaNode->hasTagName(HTMLNames::videoTag) && !mediaNode->hasTagName(HTMLNames::audioTag))) 60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return 0; 61231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return static_cast<HTMLMediaElement*>(mediaNode); 63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 65231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// FIXME: These constants may need to be tweaked to better match the seeking in the QuickTime plug-in. 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic const float cSeekRepeatDelay = 0.1f; 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic const float cStepTime = 0.07f; 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic const float cSeekTime = 0.2f; 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// ---------------------------- 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 722fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMediaControlElement::MediaControlElement(HTMLMediaElement* mediaElement) 735af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke : HTMLDivElement(divTag, mediaElement->document()) 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_mediaElement(mediaElement) 75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic const String& displayString() 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch DEFINE_STATIC_LOCAL(String, s, ("display")); 812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return s; 82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 83635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid MediaControlElement::show() 850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ExceptionCode ec; 872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: Make more efficient <http://webkit.org/b/58157> 882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style()->removeProperty(displayString(), ec); 898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid MediaControlElement::hide() 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ExceptionCode ec; 942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: Make more efficient <http://webkit.org/b/58157> 952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch DEFINE_STATIC_LOCAL(String, none, ("none")); 962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style()->setProperty(displayString(), none, ec); 97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project// ---------------------------- 100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1012fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockinline MediaControlPanelElement::MediaControlPanelElement(HTMLMediaElement* mediaElement) 1022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlElement(mediaElement) 1032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1062fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockPassRefPtr<MediaControlPanelElement> MediaControlPanelElement::create(HTMLMediaElement* mediaElement) 1072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return adoptRef(new MediaControlPanelElement(mediaElement)); 1092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1112fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMediaControlElementType MediaControlPanelElement::displayType() const 1122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return MediaControlsPanel; 1142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1162fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlPanelElement::shadowPseudoId() const 1172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-panel")); 1192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 1202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block// ---------------------------- 1232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1245af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeinline MediaControlTimelineContainerElement::MediaControlTimelineContainerElement(HTMLMediaElement* mediaElement) 1252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlElement(mediaElement) 1265af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 1275af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 1285af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 1295af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkePassRefPtr<MediaControlTimelineContainerElement> MediaControlTimelineContainerElement::create(HTMLMediaElement* mediaElement) 1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch RefPtr<MediaControlTimelineContainerElement> element = adoptRef(new MediaControlTimelineContainerElement(mediaElement)); 1322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch element->hide(); 1332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return element.release(); 1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1362fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMediaControlElementType MediaControlTimelineContainerElement::displayType() const 1372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return MediaTimelineContainer; 1392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1412fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlTimelineContainerElement::shadowPseudoId() const 1422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-timeline-container")); 1442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 1452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// ---------------------------- 1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1492bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass RenderMediaVolumeSliderContainer : public RenderBlock { 1502bde8e466a4451c7319e3a072d118917957d6554Steve Blockpublic: 1512bde8e466a4451c7319e3a072d118917957d6554Steve Block RenderMediaVolumeSliderContainer(Node*); 1522bde8e466a4451c7319e3a072d118917957d6554Steve Block 1532bde8e466a4451c7319e3a072d118917957d6554Steve Blockprivate: 1542bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void layout(); 1552bde8e466a4451c7319e3a072d118917957d6554Steve Block}; 1562bde8e466a4451c7319e3a072d118917957d6554Steve Block 1572bde8e466a4451c7319e3a072d118917957d6554Steve BlockRenderMediaVolumeSliderContainer::RenderMediaVolumeSliderContainer(Node* node) 1582bde8e466a4451c7319e3a072d118917957d6554Steve Block : RenderBlock(node) 1592bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1602bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1612bde8e466a4451c7319e3a072d118917957d6554Steve Block 1622bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid RenderMediaVolumeSliderContainer::layout() 1632bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1642bde8e466a4451c7319e3a072d118917957d6554Steve Block RenderBlock::layout(); 1652bde8e466a4451c7319e3a072d118917957d6554Steve Block if (style()->display() == NONE || !previousSibling() || !previousSibling()->isBox()) 1662bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 1672bde8e466a4451c7319e3a072d118917957d6554Steve Block 1682bde8e466a4451c7319e3a072d118917957d6554Steve Block RenderBox* buttonBox = toRenderBox(previousSibling()); 1692bde8e466a4451c7319e3a072d118917957d6554Steve Block 1702bde8e466a4451c7319e3a072d118917957d6554Steve Block if (view()) 1712bde8e466a4451c7319e3a072d118917957d6554Steve Block view()->disableLayoutState(); 1722bde8e466a4451c7319e3a072d118917957d6554Steve Block 1732bde8e466a4451c7319e3a072d118917957d6554Steve Block IntPoint offset = theme()->volumeSliderOffsetFromMuteButton(buttonBox, IntSize(width(), height())); 1742bde8e466a4451c7319e3a072d118917957d6554Steve Block setX(offset.x() + buttonBox->offsetLeft()); 1752bde8e466a4451c7319e3a072d118917957d6554Steve Block setY(offset.y() + buttonBox->offsetTop()); 1762bde8e466a4451c7319e3a072d118917957d6554Steve Block 1772bde8e466a4451c7319e3a072d118917957d6554Steve Block if (view()) 1782bde8e466a4451c7319e3a072d118917957d6554Steve Block view()->enableLayoutState(); 1792bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1802bde8e466a4451c7319e3a072d118917957d6554Steve Block 1815af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeinline MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement(HTMLMediaElement* mediaElement) 1822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlElement(mediaElement) 183231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 184231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 185231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1865af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkePassRefPtr<MediaControlVolumeSliderContainerElement> MediaControlVolumeSliderContainerElement::create(HTMLMediaElement* mediaElement) 1875af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 1882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch RefPtr<MediaControlVolumeSliderContainerElement> element = adoptRef(new MediaControlVolumeSliderContainerElement(mediaElement)); 1892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch element->hide(); 1902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return element.release(); 1915af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 1925af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 1932bde8e466a4451c7319e3a072d118917957d6554Steve BlockRenderObject* MediaControlVolumeSliderContainerElement::createRenderer(RenderArena* arena, RenderStyle*) 1942bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1952bde8e466a4451c7319e3a072d118917957d6554Steve Block return new (arena) RenderMediaVolumeSliderContainer(this); 1962bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1972bde8e466a4451c7319e3a072d118917957d6554Steve Block 1982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid MediaControlVolumeSliderContainerElement::defaultEventHandler(Event* event) 199231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!event->isMouseEvent() || event->type() != eventNames().mouseoutEvent) 2012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 202231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Poor man's mouseleave event detection. 2042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); 2052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!mouseEvent->relatedTarget() || !mouseEvent->relatedTarget()->toNode()) 206231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 207231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (this->containsIncludingShadowDOM(mouseEvent->relatedTarget()->toNode())) 2092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 210231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch hide(); 212231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 213231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2152fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMediaControlElementType MediaControlVolumeSliderContainerElement::displayType() const 2162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 2172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return MediaVolumeSliderContainer; 2182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 2192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2202fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlVolumeSliderContainerElement::shadowPseudoId() const 2212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 2222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-volume-slider-container")); 2232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 2242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 2252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 226231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// ---------------------------- 227231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2285af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeinline MediaControlStatusDisplayElement::MediaControlStatusDisplayElement(HTMLMediaElement* mediaElement) 2292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlElement(mediaElement) 230231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block , m_stateBeingDisplayed(Nothing) 2310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2345af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkePassRefPtr<MediaControlStatusDisplayElement> MediaControlStatusDisplayElement::create(HTMLMediaElement* mediaElement) 2355af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 2362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch RefPtr<MediaControlStatusDisplayElement> element = adoptRef(new MediaControlStatusDisplayElement(mediaElement)); 2372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch element->hide(); 2382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return element.release(); 2395af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 2405af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 2410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid MediaControlStatusDisplayElement::update() 2420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Get the new state that we'll have to display. 2440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch StateBeingDisplayed newStateToDisplay = Nothing; 2450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2465af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (mediaElement()->readyState() != HTMLMediaElement::HAVE_ENOUGH_DATA && !mediaElement()->currentSrc().isEmpty()) 2470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch newStateToDisplay = Loading; 2485af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke else if (mediaElement()->movieLoadType() == MediaPlayer::LiveStream) 2490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch newStateToDisplay = LiveBroadcast; 2500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (newStateToDisplay == m_stateBeingDisplayed) 2520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 2530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ExceptionCode e; 2552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (m_stateBeingDisplayed == Nothing) 2572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch show(); 2582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else if (newStateToDisplay == Nothing) 2592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch hide(); 2602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_stateBeingDisplayed = newStateToDisplay; 2622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch switch (m_stateBeingDisplayed) { 2640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case Nothing: 2650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch setInnerText("", e); 2660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch break; 2670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case Loading: 2680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch setInnerText(mediaElementLoadingStateText(), e); 2690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch break; 2700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch case LiveBroadcast: 2710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch setInnerText(mediaElementLiveBroadcastStateText(), e); 2720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch break; 2730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 2740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2762fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMediaControlElementType MediaControlStatusDisplayElement::displayType() const 2772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 2782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return MediaStatusDisplay; 2792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 2802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2812fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlStatusDisplayElement::shadowPseudoId() const 2822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 2832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-status-display")); 2842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 2852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 2862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 2870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// ---------------------------- 2880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2892fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMediaControlInputElement::MediaControlInputElement(HTMLMediaElement* mediaElement, MediaControlElementType displayType) 2902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : HTMLInputElement(inputTag, mediaElement->document(), 0, false) 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_mediaElement(mediaElement) 2922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block , m_displayType(displayType) 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid MediaControlInputElement::show() 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ExceptionCode ec; 2992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style()->removeProperty(displayString(), ec); 3008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 3018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 3022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid MediaControlInputElement::hide() 3030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 3042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ExceptionCode ec; 3052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch DEFINE_STATIC_LOCAL(String, none, ("none")); 3062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch style()->setProperty(displayString(), none, ec); 3070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 3082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 309635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid MediaControlInputElement::setDisplayType(MediaControlElementType displayType) 3115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 3125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (displayType == m_displayType) 3135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return; 3145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 3155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian m_displayType = displayType; 316231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (RenderObject* object = renderer()) 317231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block object->repaint(); 3185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 3195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// ---------------------------- 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3222fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockinline MediaControlMuteButtonElement::MediaControlMuteButtonElement(HTMLMediaElement* mediaElement, MediaControlElementType displayType) 3232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlInputElement(mediaElement, displayType) 3245af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 3255af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 3265af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid MediaControlMuteButtonElement::defaultEventHandler(Event* event) 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (event->type() == eventNames().clickEvent) { 3305af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->setMuted(!mediaElement()->muted()); 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project event->setDefaultHandled(); 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLInputElement::defaultEventHandler(event); 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid MediaControlMuteButtonElement::changedMute() 3382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 3392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch updateDisplayType(); 3402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 3412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 34281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid MediaControlMuteButtonElement::updateDisplayType() 3432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 34481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch setDisplayType(mediaElement()->muted() ? MediaUnMuteButton : MediaMuteButton); 3452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 3462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 34781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// ---------------------------- 34881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochinline MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement(HTMLMediaElement* mediaElement, MediaControls* controls) 35081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch : MediaControlMuteButtonElement(mediaElement, MediaMuteButton) 3512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_controls(controls) 3525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 3535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 3545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 3552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochPassRefPtr<MediaControlPanelMuteButtonElement> MediaControlPanelMuteButtonElement::create(HTMLMediaElement* mediaElement, MediaControls* controls) 35681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 3572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(controls); 3582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 3592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch RefPtr<MediaControlPanelMuteButtonElement> button = adoptRef(new MediaControlPanelMuteButtonElement(mediaElement, controls)); 36081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch button->setType("button"); 36181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return button.release(); 36281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 36381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid MediaControlPanelMuteButtonElement::defaultEventHandler(Event* event) 3652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 3662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (event->type() == eventNames().mouseoverEvent) 3672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_controls->showVolumeSlider(); 3682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 3692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch MediaControlMuteButtonElement::defaultEventHandler(event); 3702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 3712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 37281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochconst AtomicString& MediaControlPanelMuteButtonElement::shadowPseudoId() const 37381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 37481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-mute-button")); 37581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return id; 37681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 37781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 37881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch// ---------------------------- 37981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3802fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockinline MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement(HTMLMediaElement* mediaElement) 3812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch : MediaControlMuteButtonElement(mediaElement, MediaMuteButton) 3822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 3832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 3842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3852fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockPassRefPtr<MediaControlVolumeSliderMuteButtonElement> MediaControlVolumeSliderMuteButtonElement::create(HTMLMediaElement* mediaElement) 3862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 3872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RefPtr<MediaControlVolumeSliderMuteButtonElement> button = adoptRef(new MediaControlVolumeSliderMuteButtonElement(mediaElement)); 3882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block button->setType("button"); 3892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return button.release(); 3902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 3912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3922fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlVolumeSliderMuteButtonElement::shadowPseudoId() const 3932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 3942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-volume-slider-mute-button")); 3952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 3962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 3972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// ---------------------------- 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4005af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeinline MediaControlPlayButtonElement::MediaControlPlayButtonElement(HTMLMediaElement* mediaElement) 4012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlInputElement(mediaElement, MediaPlayButton) 4025af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 4035af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 4045af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 4055af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkePassRefPtr<MediaControlPlayButtonElement> MediaControlPlayButtonElement::create(HTMLMediaElement* mediaElement) 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 407bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen RefPtr<MediaControlPlayButtonElement> button = adoptRef(new MediaControlPlayButtonElement(mediaElement)); 408bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen button->setType("button"); 409bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return button.release(); 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid MediaControlPlayButtonElement::defaultEventHandler(Event* event) 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (event->type() == eventNames().clickEvent) { 4155af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->togglePlayState(); 4162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch updateDisplayType(); 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project event->setDefaultHandled(); 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLInputElement::defaultEventHandler(event); 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid MediaControlPlayButtonElement::updateDisplayType() 4235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 4245af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke setDisplayType(mediaElement()->canPlay() ? MediaPlayButton : MediaPauseButton); 4255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 4265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 4272fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlPlayButtonElement::shadowPseudoId() const 4282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 4292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-play-button")); 4302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 4312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 4322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// ---------------------------- 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4352fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockinline MediaControlSeekButtonElement::MediaControlSeekButtonElement(HTMLMediaElement* mediaElement, MediaControlElementType displayType) 4362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlInputElement(mediaElement, displayType) 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_seeking(false) 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_capturing(false) 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_seekTimer(this, &MediaControlSeekButtonElement::seekTimerFired) 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid MediaControlSeekButtonElement::defaultEventHandler(Event* event) 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (event->type() == eventNames().mousedownEvent) { 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (Frame* frame = document()->frame()) { 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_capturing = true; 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frame->eventHandler()->setCapturingMouseEventsNode(this); 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4505af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->pause(event->fromUserGesture()); 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_seekTimer.startRepeating(cSeekRepeatDelay); 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project event->setDefaultHandled(); 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (event->type() == eventNames().mouseupEvent) { 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_capturing) 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (Frame* frame = document()->frame()) { 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_capturing = false; 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frame->eventHandler()->setCapturingMouseEventsNode(0); 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ExceptionCode ec; 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_seeking || m_seekTimer.isActive()) { 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_seeking) { 4625af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke float stepTime = isForwardButton() ? cStepTime : -cStepTime; 4635af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->setCurrentTime(mediaElement()->currentTime() + stepTime, ec); 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_seekTimer.stop(); 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_seeking = false; 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project event->setDefaultHandled(); 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLInputElement::defaultEventHandler(event); 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid MediaControlSeekButtonElement::seekTimerFired(Timer<MediaControlSeekButtonElement>*) 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ExceptionCode ec; 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_seeking = true; 4775af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke float seekTime = isForwardButton() ? cSeekTime : -cSeekTime; 4785af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->setCurrentTime(mediaElement()->currentTime() + seekTime, ec); 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid MediaControlSeekButtonElement::detach() 4820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 4830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_capturing) { 4840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (Frame* frame = document()->frame()) 4850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch frame->eventHandler()->setCapturingMouseEventsNode(0); 4860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 4870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch MediaControlInputElement::detach(); 4880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 4890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// ---------------------------- 4910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4922fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockinline MediaControlSeekForwardButtonElement::MediaControlSeekForwardButtonElement(HTMLMediaElement* mediaElement) 4932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlSeekButtonElement(mediaElement, MediaSeekForwardButton) 4942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 4952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 4962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4972fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockPassRefPtr<MediaControlSeekForwardButtonElement> MediaControlSeekForwardButtonElement::create(HTMLMediaElement* mediaElement) 4982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 4992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RefPtr<MediaControlSeekForwardButtonElement> button = adoptRef(new MediaControlSeekForwardButtonElement(mediaElement)); 5002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block button->setType("button"); 5012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return button.release(); 5022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 5032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5042fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlSeekForwardButtonElement::shadowPseudoId() const 5052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 5062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-seek-forward-button")); 5072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 5082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 5092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block// ---------------------------- 5112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5122fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockinline MediaControlSeekBackButtonElement::MediaControlSeekBackButtonElement(HTMLMediaElement* mediaElement) 5132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlSeekButtonElement(mediaElement, MediaSeekBackButton) 5142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 5152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 5162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5172fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockPassRefPtr<MediaControlSeekBackButtonElement> MediaControlSeekBackButtonElement::create(HTMLMediaElement* mediaElement) 5182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 5192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RefPtr<MediaControlSeekBackButtonElement> button = adoptRef(new MediaControlSeekBackButtonElement(mediaElement)); 5202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block button->setType("button"); 5212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return button.release(); 5222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 5232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5242fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlSeekBackButtonElement::shadowPseudoId() const 5252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 5262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-seek-back-button")); 5272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 5282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 5292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block// ---------------------------- 5312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5325af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeinline MediaControlRewindButtonElement::MediaControlRewindButtonElement(HTMLMediaElement* element) 5332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlInputElement(element, MediaRewindButton) 5340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 5350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 5360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5375af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkePassRefPtr<MediaControlRewindButtonElement> MediaControlRewindButtonElement::create(HTMLMediaElement* mediaElement) 5385af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 539bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen RefPtr<MediaControlRewindButtonElement> button = adoptRef(new MediaControlRewindButtonElement(mediaElement)); 540bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen button->setType("button"); 541bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return button.release(); 5425af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 5435af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 5440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid MediaControlRewindButtonElement::defaultEventHandler(Event* event) 5450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 5460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (event->type() == eventNames().clickEvent) { 5475af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->rewind(30); 5480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch event->setDefaultHandled(); 5490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 5500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HTMLInputElement::defaultEventHandler(event); 5510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 5520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5532fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlRewindButtonElement::shadowPseudoId() const 5542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 5552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-rewind-button")); 5562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 5572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 5582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// ---------------------------- 5600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5615af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeinline MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement(HTMLMediaElement* mediaElement) 5622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlInputElement(mediaElement, MediaReturnToRealtimeButton) 5630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 5640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 5650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5665af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkePassRefPtr<MediaControlReturnToRealtimeButtonElement> MediaControlReturnToRealtimeButtonElement::create(HTMLMediaElement* mediaElement) 5675af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 568bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen RefPtr<MediaControlReturnToRealtimeButtonElement> button = adoptRef(new MediaControlReturnToRealtimeButtonElement(mediaElement)); 569bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen button->setType("button"); 5702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch button->hide(); 571bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return button.release(); 5725af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 5735af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 5740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid MediaControlReturnToRealtimeButtonElement::defaultEventHandler(Event* event) 5750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 5760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (event->type() == eventNames().clickEvent) { 5775af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->returnToRealtime(); 5780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch event->setDefaultHandled(); 5790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 5800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HTMLInputElement::defaultEventHandler(event); 5810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 5820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5832fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlReturnToRealtimeButtonElement::shadowPseudoId() const 5842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 5852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-return-to-realtime-button")); 5862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 5872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 5880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// ---------------------------- 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5915af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeinline MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement(HTMLMediaElement* mediaElement) 5922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlInputElement(mediaElement, MediaShowClosedCaptionsButton) 593643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 594643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 595643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 5965af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkePassRefPtr<MediaControlToggleClosedCaptionsButtonElement> MediaControlToggleClosedCaptionsButtonElement::create(HTMLMediaElement* mediaElement) 5975af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 598bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen RefPtr<MediaControlToggleClosedCaptionsButtonElement> button = adoptRef(new MediaControlToggleClosedCaptionsButtonElement(mediaElement)); 599bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen button->setType("button"); 6002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch button->hide(); 601bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return button.release(); 6025af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 6035af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 604643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler(Event* event) 605643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 606643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (event->type() == eventNames().clickEvent) { 6075af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->setClosedCaptionsVisible(!mediaElement()->closedCaptionsVisible()); 6085af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke setChecked(mediaElement()->closedCaptionsVisible()); 6092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch updateDisplayType(); 610643ca7872b450ea4efacab6188849e5aac2ba161Steve Block event->setDefaultHandled(); 611643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 6122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 613643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HTMLInputElement::defaultEventHandler(event); 614643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 615643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 616643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid MediaControlToggleClosedCaptionsButtonElement::updateDisplayType() 617643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 6185af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke setDisplayType(mediaElement()->closedCaptionsVisible() ? MediaHideClosedCaptionsButton : MediaShowClosedCaptionsButton); 619643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 620643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 6212fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId() const 6222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 6232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-toggle-closed-captions-button")); 6242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 6252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 6262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 627643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// ---------------------------- 628643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 6292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochMediaControlTimelineElement::MediaControlTimelineElement(HTMLMediaElement* mediaElement, MediaControls* controls) 6302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlInputElement(mediaElement, MediaSlider) 6312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_controls(controls) 632231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochPassRefPtr<MediaControlTimelineElement> MediaControlTimelineElement::create(HTMLMediaElement* mediaElement, MediaControls* controls) 6365af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 6372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(controls); 6382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch RefPtr<MediaControlTimelineElement> timeline = adoptRef(new MediaControlTimelineElement(mediaElement, controls)); 640bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen timeline->setType("range"); 6412bde8e466a4451c7319e3a072d118917957d6554Steve Block timeline->setAttribute(precisionAttr, "float"); 642bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return timeline.release(); 6435af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 6445af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid MediaControlTimelineElement::defaultEventHandler(Event* event) 6468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 647231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Left button is 0. Rejects mouse events not from left button. 648231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (event->isMouseEvent() && static_cast<MouseEvent*>(event)->button()) 6490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 6500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 651dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!attached()) 652dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 653dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 6548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (event->type() == eventNames().mousedownEvent) 6555af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->beginScrubbing(); 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6570d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) 6580d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch if (event->type() == eventNames().touchstartEvent) 6590d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch mediaElement()->beginScrubbing(); 6600d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch#endif 6610d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch 6620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch MediaControlInputElement::defaultEventHandler(event); 6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (event->type() == eventNames().mouseoverEvent || event->type() == eventNames().mouseoutEvent || event->type() == eventNames().mousemoveEvent) 6658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return; 666635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6670d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) 6680d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch if (event->type() == eventNames().touchmoveEvent || event->type() == eventNames().touchcancelEvent) 6690d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch return; 6700d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch#endif 6710d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch 6728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian float time = narrowPrecisionToFloat(value().toDouble()); 6735af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (time != mediaElement()->currentTime()) { 6742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: This is fired 3 times on every click. We should not be doing that <http:/webkit.org/b/58160>. 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ExceptionCode ec; 6765af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->setCurrentTime(time, ec); 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 678635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RenderSlider* slider = toRenderSlider(renderer()); 6802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (slider && slider->inDragMode()) 6812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_controls->updateTimeDisplay(); 6828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (event->type() == eventNames().mouseupEvent) 6845af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->endScrubbing(); 6850d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch 6860d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch#if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) 6870d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch if (event->type() == eventNames().touchendEvent) 6880d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch mediaElement()->endScrubbing(); 6890d60bcd000865d49c38ca619815d4cd7b2afc87aBen Murdoch#endif 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid MediaControlTimelineElement::setPosition(float currentTime) 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch setValue(String::number(currentTime)); 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid MediaControlTimelineElement::setDuration(float duration) 6982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 6992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch setAttribute(maxAttr, String::number(isfinite(duration) ? duration : 0)); 7002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 7012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 7022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 7032fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlTimelineElement::shadowPseudoId() const 7042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 7052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-timeline")); 7062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 7072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 7082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// ---------------------------- 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7115af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeinline MediaControlVolumeSliderElement::MediaControlVolumeSliderElement(HTMLMediaElement* mediaElement) 7122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlInputElement(mediaElement, MediaVolumeSlider) 7135af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 7145af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 7155af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 7165af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkePassRefPtr<MediaControlVolumeSliderElement> MediaControlVolumeSliderElement::create(HTMLMediaElement* mediaElement) 7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 718bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen RefPtr<MediaControlVolumeSliderElement> slider = adoptRef(new MediaControlVolumeSliderElement(mediaElement)); 719bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen slider->setType("range"); 7202bde8e466a4451c7319e3a072d118917957d6554Steve Block slider->setAttribute(precisionAttr, "float"); 7212bde8e466a4451c7319e3a072d118917957d6554Steve Block slider->setAttribute(maxAttr, "1"); 7222bde8e466a4451c7319e3a072d118917957d6554Steve Block slider->setAttribute(valueAttr, String::number(mediaElement->volume())); 723bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return slider.release(); 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 726231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid MediaControlVolumeSliderElement::defaultEventHandler(Event* event) 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 728231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Left button is 0. Rejects mouse events not from left button. 729231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (event->isMouseEvent() && static_cast<MouseEvent*>(event)->button()) 730231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 731231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 732dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!attached()) 733dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 734dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 735231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block MediaControlInputElement::defaultEventHandler(event); 736231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 737231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (event->type() == eventNames().mouseoverEvent || event->type() == eventNames().mouseoutEvent || event->type() == eventNames().mousemoveEvent) 738231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 739231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 740231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block float volume = narrowPrecisionToFloat(value().toDouble()); 7415af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (volume != mediaElement()->volume()) { 742231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ExceptionCode ec = 0; 7435af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke mediaElement()->setVolume(volume, ec); 744231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ASSERT(!ec); 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid MediaControlVolumeSliderElement::setVolume(float volume) 749cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 750643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (value().toFloat() != volume) 751cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block setValue(String::number(volume)); 752cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 753cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 7542fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlVolumeSliderElement::shadowPseudoId() const 7552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 7562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-volume-slider")); 7572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 7582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 7592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 760231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// ---------------------------- 761231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 7622bde8e466a4451c7319e3a072d118917957d6554Steve Blockinline MediaControlFullscreenVolumeSliderElement::MediaControlFullscreenVolumeSliderElement(HTMLMediaElement* mediaElement) 7632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch : MediaControlVolumeSliderElement(mediaElement) 7642bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 7652bde8e466a4451c7319e3a072d118917957d6554Steve Block} 7662bde8e466a4451c7319e3a072d118917957d6554Steve Block 7672bde8e466a4451c7319e3a072d118917957d6554Steve BlockPassRefPtr<MediaControlFullscreenVolumeSliderElement> MediaControlFullscreenVolumeSliderElement::create(HTMLMediaElement* mediaElement) 7682bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 7692bde8e466a4451c7319e3a072d118917957d6554Steve Block RefPtr<MediaControlFullscreenVolumeSliderElement> slider = adoptRef(new MediaControlFullscreenVolumeSliderElement(mediaElement)); 7702bde8e466a4451c7319e3a072d118917957d6554Steve Block slider->setType("range"); 7712bde8e466a4451c7319e3a072d118917957d6554Steve Block slider->setAttribute(precisionAttr, "float"); 7722bde8e466a4451c7319e3a072d118917957d6554Steve Block slider->setAttribute(maxAttr, "1"); 7732bde8e466a4451c7319e3a072d118917957d6554Steve Block slider->setAttribute(valueAttr, String::number(mediaElement->volume())); 7742bde8e466a4451c7319e3a072d118917957d6554Steve Block return slider.release(); 7752bde8e466a4451c7319e3a072d118917957d6554Steve Block} 7762bde8e466a4451c7319e3a072d118917957d6554Steve Block 7772bde8e466a4451c7319e3a072d118917957d6554Steve Blockconst AtomicString& MediaControlFullscreenVolumeSliderElement::shadowPseudoId() const 7782bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 7792bde8e466a4451c7319e3a072d118917957d6554Steve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-fullscreen-volume-slider")); 7802bde8e466a4451c7319e3a072d118917957d6554Steve Block return id; 7812bde8e466a4451c7319e3a072d118917957d6554Steve Block} 7822bde8e466a4451c7319e3a072d118917957d6554Steve Block 7832bde8e466a4451c7319e3a072d118917957d6554Steve Block// ---------------------------- 7842bde8e466a4451c7319e3a072d118917957d6554Steve Block 7852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochinline MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement(HTMLMediaElement* mediaElement, MediaControls* controls) 7862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlInputElement(mediaElement, MediaFullscreenButton) 7872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_controls(controls) 7885af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke{ 7895af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} 7905af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 7912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochPassRefPtr<MediaControlFullscreenButtonElement> MediaControlFullscreenButtonElement::create(HTMLMediaElement* mediaElement, MediaControls* controls) 7920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 7932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(controls); 7942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 7952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch RefPtr<MediaControlFullscreenButtonElement> button = adoptRef(new MediaControlFullscreenButtonElement(mediaElement, controls)); 796bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen button->setType("button"); 7972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch button->hide(); 798bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return button.release(); 7990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 8000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 801231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid MediaControlFullscreenButtonElement::defaultEventHandler(Event* event) 802231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 803231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (event->type() == eventNames().clickEvent) { 8045ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(FULLSCREEN_API) 8055ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // Only use the new full screen API if the fullScreenEnabled setting has 8062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // been explicitly enabled. Otherwise, use the old fullscreen API. This 8075ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // allows apps which embed a WebView to retain the existing full screen 8085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // video implementation without requiring them to implement their own full 8095ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // screen behavior. 8105ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (document()->settings() && document()->settings()->fullScreenEnabled()) { 8112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (document()->webkitIsFullScreen() && document()->webkitCurrentFullScreenElement() == mediaElement()) { 8125ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen document()->webkitCancelFullScreen(); 8132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_controls->exitedFullscreen(); 8142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } else { 8155ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen mediaElement()->webkitRequestFullScreen(0); 8162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_controls->enteredFullscreen(); 8172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 8185ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen } else 8195ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif 8205ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen mediaElement()->enterFullscreen(); 821231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block event->setDefaultHandled(); 822231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 823231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block HTMLInputElement::defaultEventHandler(event); 824231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 8250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8262fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlFullscreenButtonElement::shadowPseudoId() const 8272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 8282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-fullscreen-button")); 8292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 8302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 8312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// ---------------------------- 8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8342bde8e466a4451c7319e3a072d118917957d6554Steve Blockinline MediaControlFullscreenVolumeMinButtonElement::MediaControlFullscreenVolumeMinButtonElement(HTMLMediaElement* mediaElement) 8352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch : MediaControlInputElement(mediaElement, MediaUnMuteButton) 8360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 8370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 8380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8392bde8e466a4451c7319e3a072d118917957d6554Steve BlockPassRefPtr<MediaControlFullscreenVolumeMinButtonElement> MediaControlFullscreenVolumeMinButtonElement::create(HTMLMediaElement* mediaElement) 8400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 8412bde8e466a4451c7319e3a072d118917957d6554Steve Block RefPtr<MediaControlFullscreenVolumeMinButtonElement> button = adoptRef(new MediaControlFullscreenVolumeMinButtonElement(mediaElement)); 8422bde8e466a4451c7319e3a072d118917957d6554Steve Block button->setType("button"); 8432bde8e466a4451c7319e3a072d118917957d6554Steve Block return button.release(); 8442bde8e466a4451c7319e3a072d118917957d6554Steve Block} 8452bde8e466a4451c7319e3a072d118917957d6554Steve Block 8462bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid MediaControlFullscreenVolumeMinButtonElement::defaultEventHandler(Event* event) 8472bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 8482bde8e466a4451c7319e3a072d118917957d6554Steve Block if (event->type() == eventNames().clickEvent) { 8492bde8e466a4451c7319e3a072d118917957d6554Steve Block ExceptionCode code = 0; 8502bde8e466a4451c7319e3a072d118917957d6554Steve Block mediaElement()->setVolume(0, code); 8512bde8e466a4451c7319e3a072d118917957d6554Steve Block event->setDefaultHandled(); 8520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 8532bde8e466a4451c7319e3a072d118917957d6554Steve Block HTMLInputElement::defaultEventHandler(event); 8540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 8550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8562bde8e466a4451c7319e3a072d118917957d6554Steve Blockconst AtomicString& MediaControlFullscreenVolumeMinButtonElement::shadowPseudoId() const 8570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 8582bde8e466a4451c7319e3a072d118917957d6554Steve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-fullscreen-volume-min-button")); 8592bde8e466a4451c7319e3a072d118917957d6554Steve Block return id; 8602bde8e466a4451c7319e3a072d118917957d6554Steve Block} 8610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8622bde8e466a4451c7319e3a072d118917957d6554Steve Block// ---------------------------- 8630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8642bde8e466a4451c7319e3a072d118917957d6554Steve Blockinline MediaControlFullscreenVolumeMaxButtonElement::MediaControlFullscreenVolumeMaxButtonElement(HTMLMediaElement* mediaElement) 8652bde8e466a4451c7319e3a072d118917957d6554Steve Block: MediaControlInputElement(mediaElement, MediaMuteButton) 8662bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 8672bde8e466a4451c7319e3a072d118917957d6554Steve Block} 8682bde8e466a4451c7319e3a072d118917957d6554Steve Block 8692bde8e466a4451c7319e3a072d118917957d6554Steve BlockPassRefPtr<MediaControlFullscreenVolumeMaxButtonElement> MediaControlFullscreenVolumeMaxButtonElement::create(HTMLMediaElement* mediaElement) 8702bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 8712bde8e466a4451c7319e3a072d118917957d6554Steve Block RefPtr<MediaControlFullscreenVolumeMaxButtonElement> button = adoptRef(new MediaControlFullscreenVolumeMaxButtonElement(mediaElement)); 8722bde8e466a4451c7319e3a072d118917957d6554Steve Block button->setType("button"); 8732bde8e466a4451c7319e3a072d118917957d6554Steve Block return button.release(); 8742bde8e466a4451c7319e3a072d118917957d6554Steve Block} 8752bde8e466a4451c7319e3a072d118917957d6554Steve Block 8762bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid MediaControlFullscreenVolumeMaxButtonElement::defaultEventHandler(Event* event) 8772bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 8782bde8e466a4451c7319e3a072d118917957d6554Steve Block if (event->type() == eventNames().clickEvent) { 8792bde8e466a4451c7319e3a072d118917957d6554Steve Block ExceptionCode code = 0; 8802bde8e466a4451c7319e3a072d118917957d6554Steve Block mediaElement()->setVolume(1, code); 8812bde8e466a4451c7319e3a072d118917957d6554Steve Block event->setDefaultHandled(); 8822bde8e466a4451c7319e3a072d118917957d6554Steve Block } 8832bde8e466a4451c7319e3a072d118917957d6554Steve Block HTMLInputElement::defaultEventHandler(event); 8842bde8e466a4451c7319e3a072d118917957d6554Steve Block} 8852bde8e466a4451c7319e3a072d118917957d6554Steve Block 8862bde8e466a4451c7319e3a072d118917957d6554Steve Blockconst AtomicString& MediaControlFullscreenVolumeMaxButtonElement::shadowPseudoId() const 8872bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 8882bde8e466a4451c7319e3a072d118917957d6554Steve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-fullscreen-volume-max-button")); 8892bde8e466a4451c7319e3a072d118917957d6554Steve Block return id; 8902bde8e466a4451c7319e3a072d118917957d6554Steve Block} 8912bde8e466a4451c7319e3a072d118917957d6554Steve Block 8922bde8e466a4451c7319e3a072d118917957d6554Steve Block// ---------------------------- 8932bde8e466a4451c7319e3a072d118917957d6554Steve Block 8942bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass RenderMediaControlTimeDisplay : public RenderFlexibleBox { 8952bde8e466a4451c7319e3a072d118917957d6554Steve Blockpublic: 8962bde8e466a4451c7319e3a072d118917957d6554Steve Block RenderMediaControlTimeDisplay(Node*); 8972bde8e466a4451c7319e3a072d118917957d6554Steve Block 8982bde8e466a4451c7319e3a072d118917957d6554Steve Blockprivate: 8992bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void layout(); 9002bde8e466a4451c7319e3a072d118917957d6554Steve Block}; 9012bde8e466a4451c7319e3a072d118917957d6554Steve Block 9022bde8e466a4451c7319e3a072d118917957d6554Steve BlockRenderMediaControlTimeDisplay::RenderMediaControlTimeDisplay(Node* node) 9032bde8e466a4451c7319e3a072d118917957d6554Steve Block : RenderFlexibleBox(node) 9042bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 9052bde8e466a4451c7319e3a072d118917957d6554Steve Block} 9062bde8e466a4451c7319e3a072d118917957d6554Steve Block 9072bde8e466a4451c7319e3a072d118917957d6554Steve Block// We want the timeline slider to be at least 100 pixels wide. 9082bde8e466a4451c7319e3a072d118917957d6554Steve Block// FIXME: Eliminate hard-coded widths altogether. 9092bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic const int minWidthToDisplayTimeDisplays = 45 + 100 + 45; 9102bde8e466a4451c7319e3a072d118917957d6554Steve Block 9112bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid RenderMediaControlTimeDisplay::layout() 9122bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 9132bde8e466a4451c7319e3a072d118917957d6554Steve Block RenderFlexibleBox::layout(); 9142bde8e466a4451c7319e3a072d118917957d6554Steve Block RenderBox* timelineContainerBox = parentBox(); 9152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch while (timelineContainerBox && timelineContainerBox->isAnonymous()) 9162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch timelineContainerBox = timelineContainerBox->parentBox(); 9172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 9182bde8e466a4451c7319e3a072d118917957d6554Steve Block if (timelineContainerBox && timelineContainerBox->width() < minWidthToDisplayTimeDisplays) 9192bde8e466a4451c7319e3a072d118917957d6554Steve Block setWidth(0); 9202bde8e466a4451c7319e3a072d118917957d6554Steve Block} 9212bde8e466a4451c7319e3a072d118917957d6554Steve Block 9222bde8e466a4451c7319e3a072d118917957d6554Steve Blockinline MediaControlTimeDisplayElement::MediaControlTimeDisplayElement(HTMLMediaElement* mediaElement) 9232bde8e466a4451c7319e3a072d118917957d6554Steve Block : MediaControlElement(mediaElement) 9242bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_currentValue(0) 9252bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 9260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 9270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 928231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid MediaControlTimeDisplayElement::setCurrentValue(float time) 929231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 930231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_currentValue = time; 931231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 932231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 9332bde8e466a4451c7319e3a072d118917957d6554Steve BlockRenderObject* MediaControlTimeDisplayElement::createRenderer(RenderArena* arena, RenderStyle*) 9342bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 9352bde8e466a4451c7319e3a072d118917957d6554Steve Block return new (arena) RenderMediaControlTimeDisplay(this); 9362bde8e466a4451c7319e3a072d118917957d6554Steve Block} 9372bde8e466a4451c7319e3a072d118917957d6554Steve Block 9382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block// ---------------------------- 9392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9402fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockPassRefPtr<MediaControlTimeRemainingDisplayElement> MediaControlTimeRemainingDisplayElement::create(HTMLMediaElement* mediaElement) 9412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 9422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return adoptRef(new MediaControlTimeRemainingDisplayElement(mediaElement)); 9432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 9442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9452fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement(HTMLMediaElement* mediaElement) 9462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlTimeDisplayElement(mediaElement) 9472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 9482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 9492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9502fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMediaControlElementType MediaControlTimeRemainingDisplayElement::displayType() const 9512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 9522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return MediaTimeRemainingDisplay; 9532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 9542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9552fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlTimeRemainingDisplayElement::shadowPseudoId() const 9562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 9572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-time-remaining-display")); 9582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 9592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 9602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block// ---------------------------- 9622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9632fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockPassRefPtr<MediaControlCurrentTimeDisplayElement> MediaControlCurrentTimeDisplayElement::create(HTMLMediaElement* mediaElement) 9642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 9652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return adoptRef(new MediaControlCurrentTimeDisplayElement(mediaElement)); 9662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 9672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9682fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement(HTMLMediaElement* mediaElement) 9692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : MediaControlTimeDisplayElement(mediaElement) 9702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 9712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 9722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9732fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockMediaControlElementType MediaControlCurrentTimeDisplayElement::displayType() const 9742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 9752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return MediaCurrentTimeDisplay; 9762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 9772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9782fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockconst AtomicString& MediaControlCurrentTimeDisplayElement::shadowPseudoId() const 9792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 9802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-current-time-display")); 9812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return id; 9822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 9832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 9845af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} // namespace WebCore 9850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9865af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#endif // ENABLE(VIDEO) 987