Remove the Timer parameters from timer callbacks
[WebKit-https.git] / Source / WebCore / html / shadow / MediaControlElements.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 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 MediaControlElements_h
31 #define MediaControlElements_h
32
33 #if ENABLE(VIDEO)
34 #include "MediaControlElementTypes.h"
35 #include "TextTrackRepresentation.h"
36
37 namespace WebCore {
38
39 // ----------------------------
40
41 class MediaControlPanelElement final : public MediaControlDivElement {
42 public:
43     static PassRefPtr<MediaControlPanelElement> create(Document&);
44
45     void setCanBeDragged(bool);
46     void setIsDisplayed(bool);
47
48     void resetPosition();
49     void makeOpaque();
50     void makeTransparent();
51
52 #if !PLATFORM(IOS)
53     virtual bool willRespondToMouseMoveEvents() override { return true; }
54     virtual bool willRespondToMouseClickEvents() override { return true; }
55 #endif
56
57 private:
58     explicit MediaControlPanelElement(Document&);
59
60     virtual void defaultEventHandler(Event*) override;
61
62     void startDrag(const LayoutPoint& eventLocation);
63     void continueDrag(const LayoutPoint& eventLocation);
64     void endDrag();
65
66     void startTimer();
67     void stopTimer();
68     void transitionTimerFired();
69
70     void setPosition(const LayoutPoint&);
71
72     bool m_canBeDragged;
73     bool m_isBeingDragged;
74     bool m_isDisplayed;
75     bool m_opaque;
76     LayoutPoint m_lastDragEventLocation;
77     LayoutPoint m_cumulativeDragOffset;
78
79     Timer m_transitionTimer;
80 };
81
82 // ----------------------------
83
84 class MediaControlPanelEnclosureElement final : public MediaControlDivElement {
85 public:
86     static PassRefPtr<MediaControlPanelEnclosureElement> create(Document&);
87
88 private:
89     explicit MediaControlPanelEnclosureElement(Document&);
90 };
91
92 // ----------------------------
93
94 class MediaControlOverlayEnclosureElement final : public MediaControlDivElement {
95 public:
96     static PassRefPtr<MediaControlOverlayEnclosureElement> create(Document&);
97
98 private:
99     explicit MediaControlOverlayEnclosureElement(Document&);
100 };
101
102 // ----------------------------
103
104 class MediaControlTimelineContainerElement final : public MediaControlDivElement {
105 public:
106     static PassRefPtr<MediaControlTimelineContainerElement> create(Document&);
107
108     void setTimeDisplaysHidden(bool);
109
110 private:
111     explicit MediaControlTimelineContainerElement(Document&);
112
113     virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override;
114 };
115
116 // ----------------------------
117
118 class MediaControlVolumeSliderContainerElement final : public MediaControlDivElement {
119 public:
120     static PassRefPtr<MediaControlVolumeSliderContainerElement> create(Document&);
121
122 #if !PLATFORM(IOS)
123     virtual bool willRespondToMouseMoveEvents() override { return true; }
124 #endif
125
126 private:
127     explicit MediaControlVolumeSliderContainerElement(Document&);
128
129     virtual void defaultEventHandler(Event*) override;
130
131     virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override;
132 };
133
134 // ----------------------------
135
136 class MediaControlStatusDisplayElement final : public MediaControlDivElement {
137 public:
138     static PassRefPtr<MediaControlStatusDisplayElement> create(Document&);
139
140     void update();
141
142 private:
143     explicit MediaControlStatusDisplayElement(Document&);
144
145     enum StateBeingDisplayed { Nothing, Loading, LiveBroadcast };
146     StateBeingDisplayed m_stateBeingDisplayed;
147 };
148
149 // ----------------------------
150
151 class MediaControlPanelMuteButtonElement final : public MediaControlMuteButtonElement {
152 public:
153     static PassRefPtr<MediaControlPanelMuteButtonElement> create(Document&, MediaControls*);
154
155 #if !PLATFORM(IOS)
156     virtual bool willRespondToMouseMoveEvents() override { return true; }
157 #endif
158
159 private:
160     explicit MediaControlPanelMuteButtonElement(Document&, MediaControls*);
161
162     virtual void defaultEventHandler(Event*) override;
163
164     MediaControls* m_controls;
165 };
166
167 // ----------------------------
168
169 class MediaControlVolumeSliderMuteButtonElement final : public MediaControlMuteButtonElement {
170 public:
171     static PassRefPtr<MediaControlVolumeSliderMuteButtonElement> create(Document&);
172
173 private:
174     explicit MediaControlVolumeSliderMuteButtonElement(Document&);
175 };
176
177
178 // ----------------------------
179
180 class MediaControlPlayButtonElement final : public MediaControlInputElement {
181 public:
182     static PassRefPtr<MediaControlPlayButtonElement> create(Document&);
183
184 #if !PLATFORM(IOS)
185     virtual bool willRespondToMouseClickEvents() override { return true; }
186 #endif
187
188     virtual void updateDisplayType() override;
189
190 private:
191     explicit MediaControlPlayButtonElement(Document&);
192
193     virtual void defaultEventHandler(Event*) override;
194 };
195
196 // ----------------------------
197
198 class MediaControlOverlayPlayButtonElement final : public MediaControlInputElement {
199 public:
200     static PassRefPtr<MediaControlOverlayPlayButtonElement> create(Document&);
201
202     virtual void updateDisplayType() override;
203
204 private:
205     explicit MediaControlOverlayPlayButtonElement(Document&);
206
207     virtual void defaultEventHandler(Event*) override;
208 };
209
210 // ----------------------------
211
212 class MediaControlSeekForwardButtonElement final : public MediaControlSeekButtonElement {
213 public:
214     static PassRefPtr<MediaControlSeekForwardButtonElement> create(Document&);
215
216 private:
217     explicit MediaControlSeekForwardButtonElement(Document&);
218
219     virtual bool isForwardButton() const override { return true; }
220 };
221
222 // ----------------------------
223
224 class MediaControlSeekBackButtonElement final : public MediaControlSeekButtonElement {
225 public:
226     static PassRefPtr<MediaControlSeekBackButtonElement> create(Document&);
227
228 private:
229     explicit MediaControlSeekBackButtonElement(Document&);
230
231     virtual bool isForwardButton() const override { return false; }
232 };
233
234 // ----------------------------
235
236 class MediaControlRewindButtonElement final : public MediaControlInputElement {
237 public:
238     static PassRefPtr<MediaControlRewindButtonElement> create(Document&);
239
240 #if !PLATFORM(IOS)
241     virtual bool willRespondToMouseClickEvents() override { return true; }
242 #endif
243
244 private:
245     explicit MediaControlRewindButtonElement(Document&);
246
247     virtual void defaultEventHandler(Event*) override;
248 };
249
250 // ----------------------------
251
252 class MediaControlReturnToRealtimeButtonElement final : public MediaControlInputElement {
253 public:
254     static PassRefPtr<MediaControlReturnToRealtimeButtonElement> create(Document&);
255
256 #if !PLATFORM(IOS)
257     virtual bool willRespondToMouseClickEvents() override { return true; }
258 #endif
259
260 private:
261     explicit MediaControlReturnToRealtimeButtonElement(Document&);
262
263     virtual void defaultEventHandler(Event*) override;
264 };
265
266 // ----------------------------
267
268 class MediaControlToggleClosedCaptionsButtonElement final : public MediaControlInputElement {
269 public:
270     static PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> create(Document&, MediaControls*);
271
272 #if !PLATFORM(IOS)
273     virtual bool willRespondToMouseClickEvents() override { return true; }
274 #endif
275
276     virtual void updateDisplayType() override;
277
278 private:
279     explicit MediaControlToggleClosedCaptionsButtonElement(Document&, MediaControls*);
280
281     virtual void defaultEventHandler(Event*) override;
282
283 #if PLATFORM(COCOA) || PLATFORM(WIN) || PLATFORM(GTK)
284     MediaControls* m_controls;
285 #endif
286 };
287
288 // ----------------------------
289
290 class MediaControlClosedCaptionsContainerElement final : public MediaControlDivElement {
291 public:
292     static PassRefPtr<MediaControlClosedCaptionsContainerElement> create(Document&);
293
294 #if !PLATFORM(IOS)
295     virtual bool willRespondToMouseClickEvents() override { return true; }
296 #endif
297
298 private:
299     MediaControlClosedCaptionsContainerElement(Document&);
300 };
301
302 // ----------------------------
303
304 class MediaControlClosedCaptionsTrackListElement final : public MediaControlDivElement {
305 public:
306     static PassRefPtr<MediaControlClosedCaptionsTrackListElement> create(Document&, MediaControls*);
307
308 #if !PLATFORM(IOS)
309     virtual bool willRespondToMouseClickEvents() override { return true; }
310 #endif
311
312     void updateDisplay();
313
314 private:
315     MediaControlClosedCaptionsTrackListElement(Document&, MediaControls*);
316
317     void rebuildTrackListMenu();
318
319     virtual void defaultEventHandler(Event*) override;
320
321     typedef Vector<RefPtr<Element>> TrackMenuItems;
322     TrackMenuItems m_menuItems;
323 #if ENABLE(VIDEO_TRACK)
324     typedef HashMap<RefPtr<Element>, RefPtr<TextTrack>> MenuItemToTrackMap;
325     MenuItemToTrackMap m_menuToTrackMap;
326 #endif
327     MediaControls* m_controls;
328 };
329
330 // ----------------------------
331
332 class MediaControlTimelineElement final : public MediaControlInputElement {
333 public:
334     static PassRefPtr<MediaControlTimelineElement> create(Document&, MediaControls*);
335
336 #if !PLATFORM(IOS)
337     virtual bool willRespondToMouseClickEvents() override;
338 #endif
339
340     void setPosition(double);
341     void setDuration(double);
342
343 private:
344     explicit MediaControlTimelineElement(Document&, MediaControls*);
345
346     virtual void defaultEventHandler(Event*) override;
347
348     MediaControls* m_controls;
349 };
350
351 // ----------------------------
352
353 class MediaControlFullscreenButtonElement final : public MediaControlInputElement {
354 public:
355     static PassRefPtr<MediaControlFullscreenButtonElement> create(Document&);
356
357 #if !PLATFORM(IOS)
358     virtual bool willRespondToMouseClickEvents() override { return true; }
359 #endif
360
361     void setIsFullscreen(bool);
362
363 private:
364     explicit MediaControlFullscreenButtonElement(Document&);
365
366     virtual void defaultEventHandler(Event*) override;
367 };
368
369 // ----------------------------
370
371 class MediaControlPanelVolumeSliderElement final : public MediaControlVolumeSliderElement {
372 public:
373     static PassRefPtr<MediaControlPanelVolumeSliderElement> create(Document&);
374
375 private:
376     explicit MediaControlPanelVolumeSliderElement(Document&);
377 };
378 // ----------------------------
379
380 class MediaControlFullscreenVolumeSliderElement final : public MediaControlVolumeSliderElement {
381 public:
382     static PassRefPtr<MediaControlFullscreenVolumeSliderElement> create(Document&);
383
384 private:
385     explicit MediaControlFullscreenVolumeSliderElement(Document&);
386 };
387
388 // ----------------------------
389
390 class MediaControlFullscreenVolumeMinButtonElement final : public MediaControlInputElement {
391 public:
392     static PassRefPtr<MediaControlFullscreenVolumeMinButtonElement> create(Document&);
393
394 #if !PLATFORM(IOS)
395     virtual bool willRespondToMouseClickEvents() override { return true; }
396 #endif
397
398 private:
399     explicit MediaControlFullscreenVolumeMinButtonElement(Document&);
400     virtual void defaultEventHandler(Event*) override;
401 };
402
403 // ----------------------------
404
405 class MediaControlFullscreenVolumeMaxButtonElement final : public MediaControlInputElement {
406 public:
407     static PassRefPtr<MediaControlFullscreenVolumeMaxButtonElement> create(Document&);
408
409 #if !PLATFORM(IOS)
410     virtual bool willRespondToMouseClickEvents() override { return true; }
411 #endif
412
413 private:
414     explicit MediaControlFullscreenVolumeMaxButtonElement(Document&);
415
416     virtual void defaultEventHandler(Event*) override;
417 };
418
419
420 // ----------------------------
421
422 class MediaControlTimeRemainingDisplayElement final : public MediaControlTimeDisplayElement {
423 public:
424     static PassRefPtr<MediaControlTimeRemainingDisplayElement> create(Document&);
425
426 private:
427     explicit MediaControlTimeRemainingDisplayElement(Document&);
428 };
429
430 // ----------------------------
431
432 class MediaControlCurrentTimeDisplayElement final : public MediaControlTimeDisplayElement {
433 public:
434     static PassRefPtr<MediaControlCurrentTimeDisplayElement> create(Document&);
435
436 private:
437     explicit MediaControlCurrentTimeDisplayElement(Document&);
438 };
439
440 // ----------------------------
441
442 #if ENABLE(VIDEO_TRACK)
443
444 class MediaControlTextTrackContainerElement final : public MediaControlDivElement, public TextTrackRepresentationClient {
445 public:
446     static PassRefPtr<MediaControlTextTrackContainerElement> create(Document&);
447
448     void updateDisplay();
449     void updateSizes(bool forceUpdate = false);
450     void enteredFullscreen();
451     void exitedFullscreen();
452
453 private:
454     void updateTimerFired();
455     void updateActiveCuesFontSize();
456
457     explicit MediaControlTextTrackContainerElement(Document&);
458
459     virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override;
460
461     virtual PassRefPtr<Image> createTextTrackRepresentationImage() override;
462     virtual void textTrackRepresentationBoundsChanged(const IntRect&) override;
463     void updateTextTrackRepresentation();
464     void clearTextTrackRepresentation();
465     void updateStyleForTextTrackRepresentation();
466     OwnPtr<TextTrackRepresentation> m_textTrackRepresentation;
467
468     Timer m_updateTimer;
469     IntRect m_videoDisplaySize;
470     int m_fontSize;
471     bool m_fontSizeIsImportant;
472     bool m_updateTextTrackRepresentationStyle;
473 };
474
475 #endif
476
477 } // namespace WebCore
478
479 #endif // ENABLE(VIDEO)
480
481 #endif // MediaControlElements_h