2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2012 Google Inc. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. Neither the name of Apple Inc. ("Apple") nor the names of
15 * its contributors may be used to endorse or promote products derived
16 * from this software without specific prior written permission.
18 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
22 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #ifndef MediaControlElements_h
31 #define MediaControlElements_h
34 #include "MediaControlElementTypes.h"
35 #include "TextTrackRepresentation.h"
39 // ----------------------------
41 class MediaControlPanelElement final : public MediaControlDivElement {
43 static PassRefPtr<MediaControlPanelElement> create(Document&);
45 void setCanBeDragged(bool);
46 void setIsDisplayed(bool);
50 void makeTransparent();
53 virtual bool willRespondToMouseMoveEvents() override { return true; }
54 virtual bool willRespondToMouseClickEvents() override { return true; }
58 explicit MediaControlPanelElement(Document&);
60 virtual const AtomicString& shadowPseudoId() const override;
61 virtual void defaultEventHandler(Event*) override;
63 void startDrag(const LayoutPoint& eventLocation);
64 void continueDrag(const LayoutPoint& eventLocation);
69 void transitionTimerFired(Timer<MediaControlPanelElement>&);
71 void setPosition(const LayoutPoint&);
74 bool m_isBeingDragged;
77 LayoutPoint m_lastDragEventLocation;
78 LayoutPoint m_cumulativeDragOffset;
80 Timer<MediaControlPanelElement> m_transitionTimer;
83 // ----------------------------
85 class MediaControlPanelEnclosureElement final : public MediaControlDivElement {
87 static PassRefPtr<MediaControlPanelEnclosureElement> create(Document&);
90 explicit MediaControlPanelEnclosureElement(Document&);
91 virtual const AtomicString& shadowPseudoId() const override;
94 // ----------------------------
96 class MediaControlOverlayEnclosureElement final : public MediaControlDivElement {
98 static PassRefPtr<MediaControlOverlayEnclosureElement> create(Document&);
101 explicit MediaControlOverlayEnclosureElement(Document&);
102 virtual const AtomicString& shadowPseudoId() const override;
105 // ----------------------------
107 class MediaControlTimelineContainerElement : public MediaControlDivElement {
109 static PassRefPtr<MediaControlTimelineContainerElement> create(Document&);
111 void setTimeDisplaysHidden(bool);
114 explicit MediaControlTimelineContainerElement(Document&);
115 virtual const AtomicString& shadowPseudoId() const override;
117 virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override;
120 // ----------------------------
122 class MediaControlVolumeSliderContainerElement : public MediaControlDivElement {
124 static PassRefPtr<MediaControlVolumeSliderContainerElement> create(Document&);
127 virtual bool willRespondToMouseMoveEvents() override { return true; }
131 explicit MediaControlVolumeSliderContainerElement(Document&);
133 virtual const AtomicString& shadowPseudoId() const override;
134 virtual void defaultEventHandler(Event*) override;
136 virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override;
139 // ----------------------------
141 class MediaControlStatusDisplayElement : public MediaControlDivElement {
143 static PassRefPtr<MediaControlStatusDisplayElement> create(Document&);
148 explicit MediaControlStatusDisplayElement(Document&);
149 virtual const AtomicString& shadowPseudoId() const override;
151 enum StateBeingDisplayed { Nothing, Loading, LiveBroadcast };
152 StateBeingDisplayed m_stateBeingDisplayed;
155 // ----------------------------
157 class MediaControlPanelMuteButtonElement final : public MediaControlMuteButtonElement {
159 static PassRefPtr<MediaControlPanelMuteButtonElement> create(Document&, MediaControls*);
162 virtual bool willRespondToMouseMoveEvents() override { return true; }
166 explicit MediaControlPanelMuteButtonElement(Document&, MediaControls*);
168 virtual const AtomicString& shadowPseudoId() const override;
169 virtual void defaultEventHandler(Event*) override;
171 MediaControls* m_controls;
174 // ----------------------------
176 class MediaControlVolumeSliderMuteButtonElement final : public MediaControlMuteButtonElement {
178 static PassRefPtr<MediaControlVolumeSliderMuteButtonElement> create(Document&);
181 explicit MediaControlVolumeSliderMuteButtonElement(Document&);
182 virtual const AtomicString& shadowPseudoId() const override;
186 // ----------------------------
188 class MediaControlPlayButtonElement final : public MediaControlInputElement {
190 static PassRefPtr<MediaControlPlayButtonElement> create(Document&);
193 virtual bool willRespondToMouseClickEvents() override { return true; }
196 virtual void updateDisplayType() override;
199 explicit MediaControlPlayButtonElement(Document&);
201 virtual const AtomicString& shadowPseudoId() const override;
202 virtual void defaultEventHandler(Event*) override;
205 // ----------------------------
207 class MediaControlOverlayPlayButtonElement final : public MediaControlInputElement {
209 static PassRefPtr<MediaControlOverlayPlayButtonElement> create(Document&);
211 virtual void updateDisplayType() override;
214 explicit MediaControlOverlayPlayButtonElement(Document&);
216 virtual const AtomicString& shadowPseudoId() const override;
217 virtual void defaultEventHandler(Event*) override;
220 // ----------------------------
222 class MediaControlSeekForwardButtonElement : public MediaControlSeekButtonElement {
224 static PassRefPtr<MediaControlSeekForwardButtonElement> create(Document&);
227 explicit MediaControlSeekForwardButtonElement(Document&);
228 virtual const AtomicString& shadowPseudoId() const override;
230 virtual bool isForwardButton() const override { return true; }
233 // ----------------------------
235 class MediaControlSeekBackButtonElement : public MediaControlSeekButtonElement {
237 static PassRefPtr<MediaControlSeekBackButtonElement> create(Document&);
240 explicit MediaControlSeekBackButtonElement(Document&);
241 virtual const AtomicString& shadowPseudoId() const override;
243 virtual bool isForwardButton() const override { return false; }
246 // ----------------------------
248 class MediaControlRewindButtonElement : public MediaControlInputElement {
250 static PassRefPtr<MediaControlRewindButtonElement> create(Document&);
253 virtual bool willRespondToMouseClickEvents() override { return true; }
257 explicit MediaControlRewindButtonElement(Document&);
259 virtual const AtomicString& shadowPseudoId() const override;
260 virtual void defaultEventHandler(Event*) override;
263 // ----------------------------
265 class MediaControlReturnToRealtimeButtonElement : public MediaControlInputElement {
267 static PassRefPtr<MediaControlReturnToRealtimeButtonElement> create(Document&);
270 virtual bool willRespondToMouseClickEvents() override { return true; }
274 explicit MediaControlReturnToRealtimeButtonElement(Document&);
276 virtual const AtomicString& shadowPseudoId() const override;
277 virtual void defaultEventHandler(Event*) override;
280 // ----------------------------
282 class MediaControlToggleClosedCaptionsButtonElement final : public MediaControlInputElement {
284 static PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> create(Document&, MediaControls*);
287 virtual bool willRespondToMouseClickEvents() override { return true; }
290 virtual void updateDisplayType() override;
293 explicit MediaControlToggleClosedCaptionsButtonElement(Document&, MediaControls*);
295 virtual const AtomicString& shadowPseudoId() const override;
296 virtual void defaultEventHandler(Event*) override;
298 #if PLATFORM(COCOA) || PLATFORM(WIN) || PLATFORM(GTK)
299 MediaControls* m_controls;
303 // ----------------------------
305 class MediaControlClosedCaptionsContainerElement final : public MediaControlDivElement {
307 static PassRefPtr<MediaControlClosedCaptionsContainerElement> create(Document&);
310 virtual bool willRespondToMouseClickEvents() override { return true; }
314 MediaControlClosedCaptionsContainerElement(Document&);
315 virtual const AtomicString& shadowPseudoId() const override;
318 // ----------------------------
320 class MediaControlClosedCaptionsTrackListElement final : public MediaControlDivElement {
322 static PassRefPtr<MediaControlClosedCaptionsTrackListElement> create(Document&, MediaControls*);
325 virtual bool willRespondToMouseClickEvents() override { return true; }
328 void updateDisplay();
331 MediaControlClosedCaptionsTrackListElement(Document&, MediaControls*);
333 void rebuildTrackListMenu();
335 virtual const AtomicString& shadowPseudoId() const override;
336 virtual void defaultEventHandler(Event*) override;
338 typedef Vector<RefPtr<Element>> TrackMenuItems;
339 TrackMenuItems m_menuItems;
340 #if ENABLE(VIDEO_TRACK)
341 typedef HashMap<RefPtr<Element>, RefPtr<TextTrack>> MenuItemToTrackMap;
342 MenuItemToTrackMap m_menuToTrackMap;
344 MediaControls* m_controls;
347 // ----------------------------
349 class MediaControlTimelineElement final : public MediaControlInputElement {
351 static PassRefPtr<MediaControlTimelineElement> create(Document&, MediaControls*);
354 virtual bool willRespondToMouseClickEvents() override;
357 void setPosition(double);
358 void setDuration(double);
361 explicit MediaControlTimelineElement(Document&, MediaControls*);
363 virtual const AtomicString& shadowPseudoId() const override;
364 virtual void defaultEventHandler(Event*) override;
366 MediaControls* m_controls;
369 // ----------------------------
371 class MediaControlFullscreenButtonElement final : public MediaControlInputElement {
373 static PassRefPtr<MediaControlFullscreenButtonElement> create(Document&);
376 virtual bool willRespondToMouseClickEvents() override { return true; }
379 virtual void setIsFullscreen(bool);
382 explicit MediaControlFullscreenButtonElement(Document&);
384 virtual const AtomicString& shadowPseudoId() const override;
385 virtual void defaultEventHandler(Event*) override;
388 // ----------------------------
390 class MediaControlPanelVolumeSliderElement final : public MediaControlVolumeSliderElement {
392 static PassRefPtr<MediaControlPanelVolumeSliderElement> create(Document&);
395 explicit MediaControlPanelVolumeSliderElement(Document&);
396 virtual const AtomicString& shadowPseudoId() const override;
398 // ----------------------------
400 class MediaControlFullscreenVolumeSliderElement : public MediaControlVolumeSliderElement {
402 static PassRefPtr<MediaControlFullscreenVolumeSliderElement> create(Document&);
405 explicit MediaControlFullscreenVolumeSliderElement(Document&);
406 virtual const AtomicString& shadowPseudoId() const override;
409 // ----------------------------
411 class MediaControlFullscreenVolumeMinButtonElement : public MediaControlInputElement {
413 static PassRefPtr<MediaControlFullscreenVolumeMinButtonElement> create(Document&);
416 virtual bool willRespondToMouseClickEvents() override { return true; }
420 explicit MediaControlFullscreenVolumeMinButtonElement(Document&);
421 virtual const AtomicString& shadowPseudoId() const override;
422 virtual void defaultEventHandler(Event*) override;
425 // ----------------------------
427 class MediaControlFullscreenVolumeMaxButtonElement : public MediaControlInputElement {
429 static PassRefPtr<MediaControlFullscreenVolumeMaxButtonElement> create(Document&);
432 virtual bool willRespondToMouseClickEvents() override { return true; }
436 explicit MediaControlFullscreenVolumeMaxButtonElement(Document&);
438 virtual const AtomicString& shadowPseudoId() const override;
439 virtual void defaultEventHandler(Event*) override;
443 // ----------------------------
445 class MediaControlTimeRemainingDisplayElement final : public MediaControlTimeDisplayElement {
447 static PassRefPtr<MediaControlTimeRemainingDisplayElement> create(Document&);
450 explicit MediaControlTimeRemainingDisplayElement(Document&);
451 virtual const AtomicString& shadowPseudoId() const override;
454 // ----------------------------
456 class MediaControlCurrentTimeDisplayElement final : public MediaControlTimeDisplayElement {
458 static PassRefPtr<MediaControlCurrentTimeDisplayElement> create(Document&);
461 explicit MediaControlCurrentTimeDisplayElement(Document&);
462 virtual const AtomicString& shadowPseudoId() const override;
465 // ----------------------------
467 #if ENABLE(VIDEO_TRACK)
469 class MediaControlTextTrackContainerElement final : public MediaControlDivElement, public TextTrackRepresentationClient {
471 static PassRefPtr<MediaControlTextTrackContainerElement> create(Document&);
473 void updateDisplay();
474 void updateSizes(bool forceUpdate = false);
475 void enteredFullscreen();
476 void exitedFullscreen();
477 static const AtomicString& textTrackContainerElementShadowPseudoId();
480 void updateTimerFired(Timer<MediaControlTextTrackContainerElement>&);
481 void updateActiveCuesFontSize();
483 explicit MediaControlTextTrackContainerElement(Document&);
484 virtual const AtomicString& shadowPseudoId() const override;
486 virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override;
488 virtual PassRefPtr<Image> createTextTrackRepresentationImage() override;
489 virtual void textTrackRepresentationBoundsChanged(const IntRect&) override;
490 void updateTextTrackRepresentation();
491 void clearTextTrackRepresentation();
492 void updateStyleForTextTrackRepresentation();
493 OwnPtr<TextTrackRepresentation> m_textTrackRepresentation;
495 Timer<MediaControlTextTrackContainerElement> m_updateTimer;
496 IntRect m_videoDisplaySize;
498 bool m_fontSizeIsImportant;
499 bool m_updateTextTrackRepresentationStyle;
504 } // namespace WebCore
506 #endif // ENABLE(VIDEO)
508 #endif // MediaControlElements_h