Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / html / shadow / MediaControlElementTypes.h
1 /*
2  * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
3  * Copyright (C) 2012 Google Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
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 Computer, 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.
17  *
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.
28  */
29
30 #ifndef MediaControlElementTypes_h
31 #define MediaControlElementTypes_h
32
33 #include "core/html/HTMLDivElement.h"
34 #include "core/html/HTMLInputElement.h"
35 #include "core/html/HTMLMediaElement.h"
36 #include "core/html/MediaControllerInterface.h"
37 #include "core/rendering/RenderBlock.h"
38
39 namespace WebCore {
40
41 enum MediaControlElementType {
42     MediaEnterFullscreenButton = 0,
43     MediaMuteButton,
44     MediaPlayButton,
45     MediaSlider,
46     MediaSliderThumb,
47     MediaShowClosedCaptionsButton,
48     MediaHideClosedCaptionsButton,
49     MediaUnMuteButton,
50     MediaPauseButton,
51     MediaTimelineContainer,
52     MediaCurrentTimeDisplay,
53     MediaTimeRemainingDisplay,
54     MediaStatusDisplay,
55     MediaControlsPanel,
56     MediaVolumeSliderContainer,
57     MediaVolumeSlider,
58     MediaVolumeSliderThumb,
59     MediaFullScreenVolumeSlider,
60     MediaFullScreenVolumeSliderThumb,
61     MediaTextTrackDisplayContainer,
62     MediaTextTrackDisplay,
63     MediaExitFullscreenButton,
64     MediaOverlayPlayButton,
65 };
66
67 HTMLMediaElement* toParentMediaElement(Node*);
68 inline HTMLMediaElement* toParentMediaElement(RenderObject* renderer) { return toParentMediaElement(renderer->node()); }
69
70 MediaControlElementType mediaControlElementType(Node*);
71
72 // ----------------------------
73
74 class MediaControlElement {
75 public:
76     void hide();
77     void show();
78
79     MediaControlElementType displayType() { return m_displayType; }
80
81     void setMediaController(MediaControllerInterface* controller) { m_mediaController = controller; }
82     MediaControllerInterface* mediaController() const { return m_mediaController; }
83
84 protected:
85     explicit MediaControlElement(MediaControlElementType, HTMLElement*);
86     ~MediaControlElement() { }
87
88     void setDisplayType(MediaControlElementType);
89
90 private:
91     MediaControllerInterface* m_mediaController;
92     MediaControlElementType m_displayType;
93     HTMLElement* m_element;
94 };
95
96 // ----------------------------
97
98 class MediaControlDivElement : public HTMLDivElement, public MediaControlElement {
99 protected:
100     virtual bool isMediaControlElement() const OVERRIDE FINAL { return true; }
101     explicit MediaControlDivElement(Document&, MediaControlElementType);
102 };
103
104 // ----------------------------
105
106 class MediaControlInputElement : public HTMLInputElement, public MediaControlElement {
107 protected:
108     virtual bool isMediaControlElement() const OVERRIDE FINAL { return true; }
109     explicit MediaControlInputElement(Document&, MediaControlElementType);
110
111 private:
112     virtual void updateDisplayType() { }
113     virtual bool isMouseFocusable() const OVERRIDE;
114 };
115
116 // ----------------------------
117
118 class MediaControlTimeDisplayElement : public MediaControlDivElement {
119 public:
120     void setCurrentValue(double);
121     double currentValue() const { return m_currentValue; }
122
123 protected:
124     explicit MediaControlTimeDisplayElement(Document&, MediaControlElementType);
125
126 private:
127     double m_currentValue;
128 };
129
130 // ----------------------------
131
132 class MediaControlMuteButtonElement : public MediaControlInputElement {
133 public:
134     void changedMute();
135
136     virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
137
138 protected:
139     explicit MediaControlMuteButtonElement(Document&, MediaControlElementType);
140
141     virtual void defaultEventHandler(Event*) OVERRIDE;
142
143 private:
144     virtual void updateDisplayType() OVERRIDE;
145 };
146
147 // ----------------------------
148
149 class MediaControlVolumeSliderElement : public MediaControlInputElement {
150 public:
151     virtual bool willRespondToMouseMoveEvents() OVERRIDE;
152     virtual bool willRespondToMouseClickEvents() OVERRIDE;
153     void setVolume(double);
154     void setClearMutedOnUserInteraction(bool);
155
156 protected:
157     explicit MediaControlVolumeSliderElement(Document&);
158
159     virtual void defaultEventHandler(Event*) OVERRIDE;
160
161 private:
162     bool m_clearMutedOnUserInteraction;
163 };
164
165 } // namespace WebCore
166
167 #endif // MediaControlElementTypes_h