OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. |
3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 3 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 18 matching lines...) Expand all Loading... |
29 | 29 |
30 #include "bindings/v8/ExceptionStatePlaceholder.h" | 30 #include "bindings/v8/ExceptionStatePlaceholder.h" |
31 #include "core/events/MouseEvent.h" | 31 #include "core/events/MouseEvent.h" |
32 #include "core/html/HTMLMediaElement.h" | 32 #include "core/html/HTMLMediaElement.h" |
33 #include "core/html/MediaController.h" | 33 #include "core/html/MediaController.h" |
34 #include "core/rendering/RenderTheme.h" | 34 #include "core/rendering/RenderTheme.h" |
35 | 35 |
36 namespace WebCore { | 36 namespace WebCore { |
37 | 37 |
38 #if OS(ANDROID) | 38 #if OS(ANDROID) |
39 static const bool alwaysHideFullscreenControls = true; | |
40 static const bool needOverlayPlayButton = true; | 39 static const bool needOverlayPlayButton = true; |
41 #else | 40 #else |
42 static const bool alwaysHideFullscreenControls = false; | |
43 static const bool needOverlayPlayButton = false; | 41 static const bool needOverlayPlayButton = false; |
44 #endif | 42 #endif |
45 | 43 |
46 static const double timeWithoutMouseMovementBeforeHidingFullscreenControls = 3; | 44 static const double timeWithoutMouseMovementBeforeHidingMediaControls = 3; |
47 | 45 |
48 MediaControls::MediaControls(HTMLMediaElement& mediaElement) | 46 MediaControls::MediaControls(HTMLMediaElement& mediaElement) |
49 : HTMLDivElement(mediaElement.document()) | 47 : HTMLDivElement(mediaElement.document()) |
50 , m_mediaElement(mediaElement) | 48 , m_mediaElement(mediaElement) |
51 , m_panel(0) | 49 , m_panel(0) |
52 , m_textDisplayContainer(0) | 50 , m_textDisplayContainer(0) |
53 , m_overlayPlayButton(0) | 51 , m_overlayPlayButton(0) |
54 , m_overlayEnclosure(0) | 52 , m_overlayEnclosure(0) |
55 , m_playButton(0) | 53 , m_playButton(0) |
56 , m_currentTimeDisplay(0) | 54 , m_currentTimeDisplay(0) |
57 , m_timeline(0) | 55 , m_timeline(0) |
58 , m_muteButton(0) | 56 , m_muteButton(0) |
59 , m_volumeSlider(0) | 57 , m_volumeSlider(0) |
60 , m_toggleClosedCaptionsButton(0) | 58 , m_toggleClosedCaptionsButton(0) |
61 , m_fullScreenButton(0) | 59 , m_fullScreenButton(0) |
62 , m_durationDisplay(0) | 60 , m_durationDisplay(0) |
63 , m_enclosure(0) | 61 , m_enclosure(0) |
64 , m_hideFullscreenControlsTimer(this, &MediaControls::hideFullscreenControls
TimerFired) | 62 , m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired
) |
65 , m_isFullscreen(false) | |
66 , m_isMouseOverControls(false) | 63 , m_isMouseOverControls(false) |
67 , m_isPausedForScrubbing(false) | 64 , m_isPausedForScrubbing(false) |
68 { | 65 { |
69 } | 66 } |
70 | 67 |
71 PassRefPtr<MediaControls> MediaControls::create(HTMLMediaElement& mediaElement) | 68 PassRefPtr<MediaControls> MediaControls::create(HTMLMediaElement& mediaElement) |
72 { | 69 { |
73 RefPtr<MediaControls> controls = adoptRef(new MediaControls(mediaElement)); | 70 RefPtr<MediaControls> controls = adoptRef(new MediaControls(mediaElement)); |
74 | 71 |
75 if (controls->initializeControls()) | 72 if (controls->initializeControls()) |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 void MediaControls::makeOpaque() | 205 void MediaControls::makeOpaque() |
209 { | 206 { |
210 m_panel->makeOpaque(); | 207 m_panel->makeOpaque(); |
211 } | 208 } |
212 | 209 |
213 void MediaControls::makeTransparent() | 210 void MediaControls::makeTransparent() |
214 { | 211 { |
215 m_panel->makeTransparent(); | 212 m_panel->makeTransparent(); |
216 } | 213 } |
217 | 214 |
218 bool MediaControls::shouldHideFullscreenControls() | 215 bool MediaControls::shouldHideMediaControls() |
219 { | 216 { |
220 return alwaysHideFullscreenControls || !m_panel->hovered(); | 217 return !m_panel->hovered(); |
221 } | 218 } |
222 | 219 |
223 void MediaControls::playbackStarted() | 220 void MediaControls::playbackStarted() |
224 { | 221 { |
225 m_currentTimeDisplay->show(); | 222 m_currentTimeDisplay->show(); |
226 m_durationDisplay->hide(); | 223 m_durationDisplay->hide(); |
227 | 224 |
228 updatePlayState(); | 225 updatePlayState(); |
229 m_timeline->setPosition(mediaElement().currentTime()); | 226 m_timeline->setPosition(mediaElement().currentTime()); |
230 updateCurrentTimeDisplay(); | 227 updateCurrentTimeDisplay(); |
231 | 228 |
232 if (m_isFullscreen) | 229 startHideMediaControlsTimer(); |
233 startHideFullscreenControlsTimer(); | |
234 } | 230 } |
235 | 231 |
236 void MediaControls::playbackProgressed() | 232 void MediaControls::playbackProgressed() |
237 { | 233 { |
238 m_timeline->setPosition(mediaElement().currentTime()); | 234 m_timeline->setPosition(mediaElement().currentTime()); |
239 updateCurrentTimeDisplay(); | 235 updateCurrentTimeDisplay(); |
240 | 236 |
241 if (!m_isMouseOverControls && mediaElement().hasVideo()) | 237 if (!m_isMouseOverControls && mediaElement().hasVideo()) |
242 makeTransparent(); | 238 makeTransparent(); |
243 } | 239 } |
244 | 240 |
245 void MediaControls::playbackStopped() | 241 void MediaControls::playbackStopped() |
246 { | 242 { |
247 updatePlayState(); | 243 updatePlayState(); |
248 m_timeline->setPosition(mediaElement().currentTime()); | 244 m_timeline->setPosition(mediaElement().currentTime()); |
249 updateCurrentTimeDisplay(); | 245 updateCurrentTimeDisplay(); |
250 makeOpaque(); | 246 makeOpaque(); |
251 | 247 |
252 stopHideFullscreenControlsTimer(); | 248 stopHideMediaControlsTimer(); |
253 } | 249 } |
254 | 250 |
255 void MediaControls::updatePlayState() | 251 void MediaControls::updatePlayState() |
256 { | 252 { |
257 if (m_isPausedForScrubbing) | 253 if (m_isPausedForScrubbing) |
258 return; | 254 return; |
259 | 255 |
260 if (m_overlayPlayButton) | 256 if (m_overlayPlayButton) |
261 m_overlayPlayButton->updateDisplayType(); | 257 m_overlayPlayButton->updateDisplayType(); |
262 m_playButton->updateDisplayType(); | 258 m_playButton->updateDisplayType(); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 m_toggleClosedCaptionsButton->hide(); | 316 m_toggleClosedCaptionsButton->hide(); |
321 } | 317 } |
322 | 318 |
323 void MediaControls::closedCaptionTracksChanged() | 319 void MediaControls::closedCaptionTracksChanged() |
324 { | 320 { |
325 refreshClosedCaptionsButtonVisibility(); | 321 refreshClosedCaptionsButtonVisibility(); |
326 } | 322 } |
327 | 323 |
328 void MediaControls::enteredFullscreen() | 324 void MediaControls::enteredFullscreen() |
329 { | 325 { |
330 m_isFullscreen = true; | |
331 m_fullScreenButton->setIsFullscreen(true); | 326 m_fullScreenButton->setIsFullscreen(true); |
332 startHideFullscreenControlsTimer(); | 327 stopHideMediaControlsTimer(); |
| 328 startHideMediaControlsTimer(); |
333 } | 329 } |
334 | 330 |
335 void MediaControls::exitedFullscreen() | 331 void MediaControls::exitedFullscreen() |
336 { | 332 { |
337 m_isFullscreen = false; | |
338 m_fullScreenButton->setIsFullscreen(false); | 333 m_fullScreenButton->setIsFullscreen(false); |
339 stopHideFullscreenControlsTimer(); | 334 stopHideMediaControlsTimer(); |
| 335 startHideMediaControlsTimer(); |
340 } | 336 } |
341 | 337 |
342 void MediaControls::defaultEventHandler(Event* event) | 338 void MediaControls::defaultEventHandler(Event* event) |
343 { | 339 { |
344 HTMLDivElement::defaultEventHandler(event); | 340 HTMLDivElement::defaultEventHandler(event); |
345 | 341 |
346 if (event->type() == EventTypeNames::mouseover) { | 342 if (event->type() == EventTypeNames::mouseover) { |
347 if (!containsRelatedTarget(event)) { | 343 if (!containsRelatedTarget(event)) { |
348 m_isMouseOverControls = true; | 344 m_isMouseOverControls = true; |
349 if (!mediaElement().togglePlayStateWillPlay()) { | 345 if (!mediaElement().togglePlayStateWillPlay()) { |
350 makeOpaque(); | 346 makeOpaque(); |
351 if (shouldHideFullscreenControls()) | 347 if (shouldHideMediaControls()) |
352 startHideFullscreenControlsTimer(); | 348 startHideMediaControlsTimer(); |
353 } | 349 } |
354 } | 350 } |
355 return; | 351 return; |
356 } | 352 } |
357 | 353 |
358 if (event->type() == EventTypeNames::mouseout) { | 354 if (event->type() == EventTypeNames::mouseout) { |
359 if (!containsRelatedTarget(event)) { | 355 if (!containsRelatedTarget(event)) { |
360 m_isMouseOverControls = false; | 356 m_isMouseOverControls = false; |
361 stopHideFullscreenControlsTimer(); | 357 stopHideMediaControlsTimer(); |
362 } | 358 } |
363 return; | 359 return; |
364 } | 360 } |
365 | 361 |
366 if (event->type() == EventTypeNames::mousemove) { | 362 if (event->type() == EventTypeNames::mousemove) { |
367 if (m_isFullscreen) { | 363 // When we get a mouse move, show the media controls, and start a timer |
368 // When we get a mouse move in fullscreen mode, show the media contr
ols, and start a timer | 364 // that will hide the media controls after a 3 seconds without a mouse m
ove. |
369 // that will hide the media controls after a 3 seconds without a mou
se move. | 365 makeOpaque(); |
370 makeOpaque(); | 366 if (shouldHideMediaControls()) |
371 if (shouldHideFullscreenControls()) | 367 startHideMediaControlsTimer(); |
372 startHideFullscreenControlsTimer(); | |
373 } | |
374 return; | 368 return; |
375 } | 369 } |
376 } | 370 } |
377 | 371 |
378 void MediaControls::hideFullscreenControlsTimerFired(Timer<MediaControls>*) | 372 void MediaControls::hideMediaControlsTimerFired(Timer<MediaControls>*) |
379 { | 373 { |
380 if (mediaElement().togglePlayStateWillPlay()) | 374 if (mediaElement().togglePlayStateWillPlay()) |
381 return; | 375 return; |
382 | 376 |
383 if (!m_isFullscreen) | 377 if (!shouldHideMediaControls()) |
384 return; | |
385 | |
386 if (!shouldHideFullscreenControls()) | |
387 return; | 378 return; |
388 | 379 |
389 makeTransparent(); | 380 makeTransparent(); |
390 } | 381 } |
391 | 382 |
392 void MediaControls::startHideFullscreenControlsTimer() | 383 void MediaControls::startHideMediaControlsTimer() |
393 { | 384 { |
394 if (!m_isFullscreen) | 385 m_hideMediaControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingMe
diaControls, FROM_HERE); |
395 return; | |
396 | |
397 m_hideFullscreenControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHid
ingFullscreenControls, FROM_HERE); | |
398 } | 386 } |
399 | 387 |
400 void MediaControls::stopHideFullscreenControlsTimer() | 388 void MediaControls::stopHideMediaControlsTimer() |
401 { | 389 { |
402 m_hideFullscreenControlsTimer.stop(); | 390 m_hideMediaControlsTimer.stop(); |
403 } | 391 } |
404 | 392 |
405 const AtomicString& MediaControls::shadowPseudoId() const | 393 const AtomicString& MediaControls::shadowPseudoId() const |
406 { | 394 { |
407 DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls")); | 395 DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls")); |
408 return id; | 396 return id; |
409 } | 397 } |
410 | 398 |
411 bool MediaControls::containsRelatedTarget(Event* event) | 399 bool MediaControls::containsRelatedTarget(Event* event) |
412 { | 400 { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 | 437 |
450 void MediaControls::updateTextTrackDisplay() | 438 void MediaControls::updateTextTrackDisplay() |
451 { | 439 { |
452 if (!m_textDisplayContainer) | 440 if (!m_textDisplayContainer) |
453 createTextTrackDisplay(); | 441 createTextTrackDisplay(); |
454 | 442 |
455 m_textDisplayContainer->updateDisplay(); | 443 m_textDisplayContainer->updateDisplay(); |
456 } | 444 } |
457 | 445 |
458 } | 446 } |
OLD | NEW |