2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 * its contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #ifndef MediaControlElements_h
30 #define MediaControlElements_h
34 #include "HTMLDivElement.h"
35 #include "HTMLInputElement.h"
36 #include "HTMLMediaElement.h"
37 #include "RenderBlock.h"
39 // These are the shadow elements used in RenderMedia
47 // Must match WebKitSystemInterface.h
48 enum MediaControlElementType {
49 MediaFullscreenButton = 0,
53 MediaSeekForwardButton,
57 MediaReturnToRealtimeButton,
58 MediaShowClosedCaptionsButton,
59 MediaHideClosedCaptionsButton,
62 MediaTimelineContainer,
63 MediaCurrentTimeDisplay,
64 MediaTimeRemainingDisplay,
67 MediaVolumeSliderContainer,
69 MediaVolumeSliderThumb,
70 MediaVolumeSliderMuteButton,
73 HTMLMediaElement* toParentMediaElement(Node*);
74 inline HTMLMediaElement* toParentMediaElement(RenderObject* renderer) { return toParentMediaElement(renderer->node()); }
76 MediaControlElementType mediaControlElementType(Node*);
78 // ----------------------------
80 class MediaControlElement : public HTMLDivElement {
85 virtual MediaControlElementType displayType() const = 0;
87 HTMLMediaElement* mediaElement() const { return m_mediaElement; }
90 MediaControlElement(HTMLMediaElement*);
93 virtual bool isMediaControlElement() const { return true; }
95 HTMLMediaElement* m_mediaElement;
98 // ----------------------------
100 class MediaControlPanelElement : public MediaControlElement {
102 static PassRefPtr<MediaControlPanelElement> create(HTMLMediaElement*);
104 void setCanBeDragged(bool);
105 void resetPosition();
107 void makeTransparent();
110 MediaControlPanelElement(HTMLMediaElement*);
111 virtual MediaControlElementType displayType() const;
112 virtual const AtomicString& shadowPseudoId() const;
113 virtual void defaultEventHandler(Event*);
115 void startDrag(const LayoutPoint& eventLocation);
116 void continueDrag(const LayoutPoint& eventLocation);
119 void setPosition(const LayoutPoint&);
122 bool m_isBeingDragged;
124 LayoutPoint m_dragStartPosition;
125 LayoutPoint m_dragStartEventLocation;
128 // ----------------------------
130 class MediaControlTimelineContainerElement : public MediaControlElement {
132 static PassRefPtr<MediaControlTimelineContainerElement> create(HTMLMediaElement*);
135 MediaControlTimelineContainerElement(HTMLMediaElement*);
136 virtual const AtomicString& shadowPseudoId() const;
138 virtual MediaControlElementType displayType() const;
141 // ----------------------------
143 class MediaControlVolumeSliderContainerElement : public MediaControlElement {
145 static PassRefPtr<MediaControlVolumeSliderContainerElement> create(HTMLMediaElement*);
148 MediaControlVolumeSliderContainerElement(HTMLMediaElement*);
149 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
150 virtual void defaultEventHandler(Event*);
151 virtual MediaControlElementType displayType() const;
152 virtual const AtomicString& shadowPseudoId() const;
155 // ----------------------------
157 class MediaControlStatusDisplayElement : public MediaControlElement {
159 static PassRefPtr<MediaControlStatusDisplayElement> create(HTMLMediaElement*);
164 MediaControlStatusDisplayElement(HTMLMediaElement*);
166 virtual MediaControlElementType displayType() const;
167 virtual const AtomicString& shadowPseudoId() const;
169 enum StateBeingDisplayed { Nothing, Loading, LiveBroadcast };
170 StateBeingDisplayed m_stateBeingDisplayed;
173 // ----------------------------
175 class MediaControlInputElement : public HTMLInputElement {
180 MediaControlElementType displayType() const { return m_displayType; }
182 HTMLMediaElement* mediaElement() const { return m_mediaElement; }
185 MediaControlInputElement(HTMLMediaElement*, MediaControlElementType);
187 void setDisplayType(MediaControlElementType);
190 virtual bool isMediaControlElement() const { return true; }
192 virtual void updateDisplayType() { }
194 HTMLMediaElement* m_mediaElement;
195 MediaControlElementType m_displayType;
198 // ----------------------------
200 class MediaControlMuteButtonElement : public MediaControlInputElement {
205 MediaControlMuteButtonElement(HTMLMediaElement*, MediaControlElementType);
206 virtual void defaultEventHandler(Event*);
210 virtual void updateDisplayType();
213 // ----------------------------
215 class MediaControlPanelMuteButtonElement : public MediaControlMuteButtonElement {
217 static PassRefPtr<MediaControlPanelMuteButtonElement> create(HTMLMediaElement*, MediaControls*);
220 MediaControlPanelMuteButtonElement(HTMLMediaElement*, MediaControls*);
222 virtual void defaultEventHandler(Event*);
223 virtual const AtomicString& shadowPseudoId() const;
225 MediaControls* m_controls;
228 // ----------------------------
230 class MediaControlVolumeSliderMuteButtonElement : public MediaControlMuteButtonElement {
232 static PassRefPtr<MediaControlVolumeSliderMuteButtonElement> create(HTMLMediaElement*);
235 MediaControlVolumeSliderMuteButtonElement(HTMLMediaElement*);
237 virtual const AtomicString& shadowPseudoId() const;
241 // ----------------------------
243 class MediaControlPlayButtonElement : public MediaControlInputElement {
245 static PassRefPtr<MediaControlPlayButtonElement> create(HTMLMediaElement*);
247 virtual void defaultEventHandler(Event*);
248 virtual void updateDisplayType();
251 MediaControlPlayButtonElement(HTMLMediaElement*);
253 virtual const AtomicString& shadowPseudoId() const;
256 // ----------------------------
258 class MediaControlSeekButtonElement : public MediaControlInputElement {
260 virtual void defaultEventHandler(Event*);
263 MediaControlSeekButtonElement(HTMLMediaElement*, MediaControlElementType);
266 virtual bool isForwardButton() const = 0;
267 virtual void setActive(bool /*flag*/ = true, bool /*pause*/ = false);
271 float nextRate() const;
272 void seekTimerFired(Timer<MediaControlSeekButtonElement>*);
274 enum ActionType { Nothing, Play, Pause };
275 ActionType m_actionOnStop;
276 enum SeekType { Skip, Scan };
278 Timer<MediaControlSeekButtonElement> m_seekTimer;
281 // ----------------------------
283 class MediaControlSeekForwardButtonElement : public MediaControlSeekButtonElement {
285 static PassRefPtr<MediaControlSeekForwardButtonElement> create(HTMLMediaElement*);
288 MediaControlSeekForwardButtonElement(HTMLMediaElement*);
290 virtual bool isForwardButton() const { return true; }
291 virtual const AtomicString& shadowPseudoId() const;
294 // ----------------------------
296 class MediaControlSeekBackButtonElement : public MediaControlSeekButtonElement {
298 static PassRefPtr<MediaControlSeekBackButtonElement> create(HTMLMediaElement*);
301 MediaControlSeekBackButtonElement(HTMLMediaElement*);
303 virtual bool isForwardButton() const { return false; }
304 virtual const AtomicString& shadowPseudoId() const;
307 // ----------------------------
309 class MediaControlRewindButtonElement : public MediaControlInputElement {
311 static PassRefPtr<MediaControlRewindButtonElement> create(HTMLMediaElement*);
313 virtual void defaultEventHandler(Event*);
316 MediaControlRewindButtonElement(HTMLMediaElement*);
318 virtual const AtomicString& shadowPseudoId() const;
321 // ----------------------------
323 class MediaControlReturnToRealtimeButtonElement : public MediaControlInputElement {
325 static PassRefPtr<MediaControlReturnToRealtimeButtonElement> create(HTMLMediaElement*);
327 virtual void defaultEventHandler(Event*);
330 MediaControlReturnToRealtimeButtonElement(HTMLMediaElement*);
332 virtual const AtomicString& shadowPseudoId() const;
335 // ----------------------------
337 class MediaControlToggleClosedCaptionsButtonElement : public MediaControlInputElement {
339 static PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> create(HTMLMediaElement*);
341 virtual void defaultEventHandler(Event*);
342 virtual void updateDisplayType();
345 MediaControlToggleClosedCaptionsButtonElement(HTMLMediaElement*);
347 virtual const AtomicString& shadowPseudoId() const;
350 // ----------------------------
352 class MediaControlTimelineElement : public MediaControlInputElement {
354 static PassRefPtr<MediaControlTimelineElement> create(HTMLMediaElement*, MediaControls*);
356 virtual void defaultEventHandler(Event*);
357 void setPosition(float);
358 void setDuration(float);
361 MediaControlTimelineElement(HTMLMediaElement*, MediaControls*);
363 virtual const AtomicString& shadowPseudoId() const;
365 MediaControls* m_controls;
368 // ----------------------------
370 class MediaControlVolumeSliderElement : public MediaControlInputElement {
372 static PassRefPtr<MediaControlVolumeSliderElement> create(HTMLMediaElement*);
374 virtual void defaultEventHandler(Event*);
375 void setVolume(float);
378 MediaControlVolumeSliderElement(HTMLMediaElement*);
381 virtual const AtomicString& shadowPseudoId() const;
384 // ----------------------------
386 class MediaControlFullscreenButtonElement : public MediaControlInputElement {
388 static PassRefPtr<MediaControlFullscreenButtonElement> create(HTMLMediaElement*, MediaControls*);
390 virtual void defaultEventHandler(Event*);
393 MediaControlFullscreenButtonElement(HTMLMediaElement*, MediaControls*);
395 virtual const AtomicString& shadowPseudoId() const;
397 MediaControls* m_controls;
400 // ----------------------------
402 class MediaControlFullscreenVolumeSliderElement : public MediaControlVolumeSliderElement {
404 static PassRefPtr<MediaControlFullscreenVolumeSliderElement> create(HTMLMediaElement*);
407 MediaControlFullscreenVolumeSliderElement(HTMLMediaElement*);
409 virtual const AtomicString& shadowPseudoId() const;
412 // ----------------------------
414 class MediaControlFullscreenVolumeMinButtonElement : public MediaControlInputElement {
416 static PassRefPtr<MediaControlFullscreenVolumeMinButtonElement> create(HTMLMediaElement*);
418 virtual void defaultEventHandler(Event*);
421 MediaControlFullscreenVolumeMinButtonElement(HTMLMediaElement*);
423 virtual const AtomicString& shadowPseudoId() const;
426 // ----------------------------
428 class MediaControlFullscreenVolumeMaxButtonElement : public MediaControlInputElement {
430 static PassRefPtr<MediaControlFullscreenVolumeMaxButtonElement> create(HTMLMediaElement*);
432 virtual void defaultEventHandler(Event*);
435 MediaControlFullscreenVolumeMaxButtonElement(HTMLMediaElement*);
437 virtual const AtomicString& shadowPseudoId() const;
440 // ----------------------------
442 class MediaControlTimeDisplayElement : public MediaControlElement {
444 void setCurrentValue(float);
445 float currentValue() const { return m_currentValue; }
448 MediaControlTimeDisplayElement(HTMLMediaElement*);
451 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
453 float m_currentValue;
456 // ----------------------------
458 class MediaControlTimeRemainingDisplayElement : public MediaControlTimeDisplayElement {
460 static PassRefPtr<MediaControlTimeRemainingDisplayElement> create(HTMLMediaElement*);
463 MediaControlTimeRemainingDisplayElement(HTMLMediaElement*);
465 virtual MediaControlElementType displayType() const;
466 virtual const AtomicString& shadowPseudoId() const;
469 // ----------------------------
471 class MediaControlCurrentTimeDisplayElement : public MediaControlTimeDisplayElement {
473 static PassRefPtr<MediaControlCurrentTimeDisplayElement> create(HTMLMediaElement*);
476 MediaControlCurrentTimeDisplayElement(HTMLMediaElement*);
478 virtual MediaControlElementType displayType() const;
479 virtual const AtomicString& shadowPseudoId() const;
482 // ----------------------------
484 } // namespace WebCore
486 #endif // ENABLE(VIDEO)
488 #endif // MediaControlElements_h