Changeset 175596 in webkit
- Timestamp:
- Nov 4, 2014 5:36:42 PM (9 years ago)
- Location:
- trunk/Source
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r175588 r175596 1 2014-11-03 Jeremy Jones <jeremyj@apple.com> 2 3 Add button and enable optimized fullscreen. 4 https://bugs.webkit.org/show_bug.cgi?id=138351 5 6 Reviewed by Eric Carlson. 7 8 Added optimizedFullscreenButton to js media element controls. Remove #if conditional 9 and use optimizedFullscreenSupported to enable feature at runtime 10 11 * Modules/mediacontrols/MediaControlsHost.cpp: 12 (WebCore::MediaControlsHost::enterFullscreenOptimized): enable 13 (WebCore::MediaControlsHost::optimizedFullscreenSupported): added 14 * Modules/mediacontrols/MediaControlsHost.h: add optimizedFullscreenSupported 15 * Modules/mediacontrols/MediaControlsHost.idl: ditto 16 * Modules/mediacontrols/mediaControlsApple.css: 17 (audio::-webkit-media-controls-optimized-fullscreen-button): added 18 * Modules/mediacontrols/mediaControlsApple.js: 19 (Controller.prototype.createControls): add button 20 (Controller.prototype.handleReadyStateChange): update button 21 (Controller.prototype.updateOptimizedFullscreenButton): added 22 * Modules/mediacontrols/mediaControlsiOS.css: 23 (audio::-webkit-media-controls-optimized-fullscreen-button): added 24 (video::-webkit-media-controls-optimized-fullscreen-button): added 25 (video::-webkit-media-controls-optimized-fullscreen-button:active): added 26 * Modules/mediacontrols/mediaControlsiOS.js: 27 (ControllerIOS.prototype.createControls): listen for events from optimizedFullscreenButton 28 (ControllerIOS.prototype.configureInlineControls): add button for non-audio when supported. 29 (ControllerIOS.prototype.handleBaseGestureChange): 2-finger double-tap gesture for optimized fullscreen 30 (ControllerIOS.prototype.handleWrapperTouchStart): ditto 31 (ControllerIOS.prototype.handleOptimizedFullscreenButtonClicked): added 32 (ControllerIOS.prototype.handleOptimizedFullscreenTouchStart): added 33 (ControllerIOS.prototype.handleOptimizedFullscreenTouchEnd): added 34 (ControllerIOS.prototype.handleOptimizedFullscreenTouchCancel): added 35 (ControllerIOS.prototype.handleStartPlaybackButtonTouchStart): fix typo 36 (ControllerIOS.prototype.handleStartPlaybackButtonTouchEnd): fix typo 37 (ControllerIOS.prototype.handleStartPlaybackButtonTouchCancel): fix typo 38 * WebCore.exp.in: 39 * platform/ios/WebCoreSystemInterfaceIOS.h: added wkIsOptimizedFullscreenSupported 40 * platform/ios/WebCoreSystemInterfaceIOS.mm: added wkIsOptimizedFullscreenSupported 41 * platform/ios/WebVideoFullscreenInterfaceAVKit.h: 42 * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: 43 (WebVideoFullscreenInterfaceAVKit::enterFullscreen): enable feature 44 (WebVideoFullscreenInterfaceAVKit::exitFullscreen): enable feature 45 (WebVideoFullscreenInterfaceAVKit::cleanupFullscreen): only request exit when entered and not requested exit 46 (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen): ditto 47 1 48 2014-11-04 Joseph Pecoraro <pecoraro@apple.com> 2 49 -
trunk/Source/WebCore/English.lproj/mediaControlsLocalizedStrings.js
r174402 r175596 12 12 'Choose Wireless Display': 'Choose Wireless Display', 13 13 'Display Full Screen': 'Display Full Screen', 14 'Display Optimized Full Screen': 'Display Optimized Full Screen', 14 15 'Duration': 'Duration', 15 16 'Elapsed': 'Elapsed', -
trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp
r175279 r175596 191 191 void MediaControlsHost::enterFullscreenOptimized() 192 192 { 193 #if ENABLE(OPTIMIZED_FULLSCREEN)193 #if PLATFORM(IOS) 194 194 m_mediaElement->enterFullscreenOptimized(); 195 #endif 196 } 197 198 bool MediaControlsHost::optimizedFullscreenSupported() 199 { 200 #if PLATFORM(IOS) 201 return wkIsOptimizedFullscreenSupported(); 202 #else 203 return false; 195 204 #endif 196 205 } -
trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.h
r175279 r175596 72 72 void exitedFullscreen(); 73 73 void enterFullscreenOptimized(); 74 bool optimizedFullscreenSupported(); 74 75 75 76 String externalDeviceDisplayName() const; -
trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.idl
r175279 r175596 57 57 void exitedFullscreen(); 58 58 void enterFullscreenOptimized(); 59 readonly attribute boolean optimizedFullscreenSupported; 59 60 }; -
trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.css
r175492 r175596 390 390 background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 15" transform="rotate(90,0,0)"><linearGradient id="gradient" x2="0" y2="100%" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="rgb(216, 216, 216)"/><stop offset="0.4375" stop-color="rgb(216, 216, 216)"/><stop offset="0.4375" stop-color="rgb(208, 208, 208)"/><stop offset="0.5" stop-color="rgb(208, 208, 208)"/><stop offset="0.5" stop-color="rgb(200, 200, 200)"/><stop offset="1" stop-color="rgb(208, 208, 208)"/></linearGradient><path d="M 7,8 m 0,6 -2,-2 -2,2 c 0,0 -1,1 -2,0 -1,-1 0,-2 0,-2 l 2,-2 -2,-2 6,0 z" style="fill:url(#gradient) "/><path d="M 8,7 m 0,-6 2,2 2,-2 c 0,0 1,-1 2,0 1,1 0,2 0,2 l -2,2 2,2 -6,0 z" style="fill:url(#gradient) "/></svg>'); 391 391 } 392 video::-webkit-media-controls-optimized-fullscreen-button, 393 audio::-webkit-media-controls-optimized-fullscreen-button { 394 background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 15" transform="rotate(90,0,0)"><linearGradient id="gradient" x2="0" y2="100%" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="rgb(216, 216, 216)"/><stop offset="0.4375" stop-color="rgb(216, 216, 216)"/><stop offset="0.4375" stop-color="rgb(208, 208, 208)"/><stop offset="0.5" stop-color="rgb(208, 208, 208)"/><stop offset="0.5" stop-color="rgb(200, 200, 200)"/><stop offset="1" stop-color="rgb(208, 208, 208)"/></linearGradient><path d="M 7,8 m 0,6 -2,-2 -2,2 c 0,0 -1,1 -2,0 -1,-1 0,-2 0,-2 l 2,-2 -2,-2 6,0 z" style="fill:url(#gradient) "/><path d="M 8,7 m 0,-6 2,2 2,-2 c 0,0 1,-1 2,0 1,1 0,2 0,2 l -2,2 2,2 -6,0 z" style="fill:url(#gradient) "/></svg>'); 395 margin: 0 7px; 396 } 392 397 video::-webkit-media-controls-status-display, 393 398 audio::-webkit-media-controls-status-display { -
trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.js
r175460 r175596 396 396 fullscreenButton.setAttribute('aria-label', this.UIString('Display Full Screen')); 397 397 this.listenFor(fullscreenButton, 'click', this.handleFullscreenButtonClicked); 398 399 var optimizedFullscreenButton = this.controls.optimizedFullscreenButton = document.createElement('button'); 400 optimizedFullscreenButton.setAttribute('pseudo', '-webkit-media-controls-optimized-fullscreen-button'); 401 optimizedFullscreenButton.setAttribute('aria-label', this.UIString('Display Optimized Full Screen')); 402 this.listenFor(optimizedFullscreenButton, 'click', this.handleOptimizedFullscreenButtonClicked); 398 403 }, 399 404 … … 555 560 this.updateCaptionContainer(); 556 561 this.updateFullscreenButton(); 562 this.updateOptimizedFullscreenButton(); 557 563 this.updateProgress(); 558 564 }, … … 860 866 }, 861 867 868 updateOptimizedFullscreenButton: function() 869 { 870 this.controls.optimizedFullscreenButton.classList.toggle(this.ClassNames.hidden, !this.video.webkitSupportsFullscreen); 871 }, 872 862 873 handleFullscreenButtonClicked: function(event) 863 874 { -
trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.css
r172083 r175596 210 210 audio::-webkit-media-controls-play-button, 211 211 video::-webkit-media-controls-fullscreen-button, 212 audio::-webkit-media-controls-fullscreen-button { 212 audio::-webkit-media-controls-fullscreen-button, 213 video::-webkit-media-controls-optimized-fullscreen-button, 214 audio::-webkit-media-controls-optimized-fullscreen-button { 213 215 -webkit-appearance: none; 214 216 display: block; … … 242 244 } 243 245 246 video::-webkit-media-controls-optimized-fullscreen-button { 247 width: 35px; 248 height: 44px; 249 background-size: 35px 44px; 250 opacity: 0.9; 251 background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 35 44"><g stroke="rgba(0, 0, 0, 0.4)" fill="none"><path d="M 10,15 h 14 v 14 h -14 v -14"/></g></svg>'); 252 } 253 244 254 video::-webkit-media-controls-play-button { 245 255 width: 41px; … … 260 270 video::-webkit-media-controls-fullscreen-button:active { 261 271 background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 35 44"><g stroke="white" fill="none"><path d="M 10,20 v -5 h 5 M 10,15 l 5,5"/><path d="M 24,24 v 5 h -5 M 24,29 l -5,-5"/></g></svg>'); 272 } 273 274 video::-webkit-media-controls-optimized-fullscreen-button:active { 275 background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 35 44"><g stroke="white" fill="none"><path d="M 10,15 h 14 v 14 h -14 v -14"/></g></svg>'); 262 276 } 263 277 -
trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js
r175279 r175596 168 168 this.listenFor(this.controls.fullscreenButton, 'touchend', this.handleFullscreenTouchEnd); 169 169 this.listenFor(this.controls.fullscreenButton, 'touchcancel', this.handleFullscreenTouchCancel); 170 this.listenFor(this.controls.optimizedFullscreenButton, 'touchstart', this.handleOptimizedFullscreenTouchStart); 171 this.listenFor(this.controls.optimizedFullscreenButton, 'touchend', this.handleOptimizedFullscreenTouchEnd); 172 this.listenFor(this.controls.optimizedFullscreenButton, 'touchcancel', this.handleOptimizedFullscreenTouchCancel); 170 173 this.stopListeningFor(this.controls.playButton, 'click', this.handlePlayButtonClicked); 171 174 }, … … 205 208 this.controls.timelineBox.appendChild(this.controls.remainingTime); 206 209 } 207 if (!this.isAudio()) 210 if (!this.isAudio()) { 208 211 this.controls.panel.appendChild(this.controls.fullscreenButton); 212 if (this.host.optimizedFullscreenSupported) 213 this.controls.panel.appendChild(this.controls.optimizedFullscreenButton); 214 } 209 215 }, 210 216 … … 321 327 if (!this.video.controls || this.isAudio() || this.isFullScreen() || this.gestureStartTime === undefined || this.controlsType == ControllerIOS.StartPlaybackControls) 322 328 return; 329 330 var scaleDetectionThreshold = 0.2; 331 if (event.scale > 1 + scaleDetectionThreshold || event.scale < 1 - scaleDetectionThreshold) 332 delete this.lastDoubleTouchTime; 323 333 324 334 if (this.mostRecentNumberOfTargettedTouches == 2 && event.scale >= 1.0) … … 332 342 var velocity = Math.abs(event.scale - 1) / duration; 333 343 334 if (velocity < 2) 335 return; 336 337 if (event.scale >= 1.25) { 338 delete this.gestureStartTime; 339 this.video.webkitEnterFullscreen(); 340 } else if (event.scale <= 0.75) { 341 delete this.gestureStartTime; 342 this.host.enterFullscreenOptimized(); 343 } 344 var pinchOutVelocityThreshold = 2; 345 var pinchOutGestureScaleThreshold = 1.25; 346 if (velocity < pinchOutVelocityThreshold || event.scale < pinchOutGestureScaleThreshold) 347 return; 348 349 delete this.gestureStartTime; 350 this.video.webkitEnterFullscreen(); 344 351 }, 345 352 … … 353 360 354 361 this.mostRecentNumberOfTargettedTouches = event.targetTouches.length; 355 362 363 if (this.host.optimizedFullscreenSupported) { 364 if (this.mostRecentNumberOfTargettedTouches == 2) { 365 var now = new Date(); 366 if (this.lastDoubleTouchTime === undefined) { 367 this.lastDoubleTouchTime = now; 368 } else { 369 var doubleTouchIntervalThresholdms = 300 370 if (now - this.lastDoubleTouchTime < doubleTouchSpeedThreshold) { 371 delete this.lastDoubleTouchTime; 372 event.preventDefault(); 373 this.host.enterFullscreenOptimized(); 374 } else 375 this.lastDoubleTouchTime = now; 376 } 377 } 378 } 379 356 380 if (this.controlsAreHidden()) { 357 381 this.showControls(); … … 408 432 }, 409 433 434 handleOptimizedFullscreenButtonClicked: function(event) { 435 if (this.isFullenterFullscreenOptimizedScreen()) 436 this.video.webkitExitFullscreen(); 437 else 438 this.host.enterFullscreenOptimized(); 439 }, 440 441 handleOptimizedFullscreenTouchStart: function() { 442 this.controls.optimizedFullscreenButton.classList.add('active'); 443 }, 444 445 handleOptimizedFullscreenTouchEnd: function(event) { 446 this.controls.optimizedFullscreenButton.classList.remove('active'); 447 448 this.handleOptimizedFullscreenButtonClicked(); 449 450 return true; 451 }, 452 453 handleOptimizedFullscreenTouchCancel: function(event) { 454 this.controls.optimizedFullscreenButton.classList.remove('active'); 455 return true; 456 }, 457 410 458 handleStartPlaybackButtonTouchStart: function(event) { 411 this.controls. fullscreenButton.classList.add('active');459 this.controls.startPlaybackButton.classList.add('active'); 412 460 }, 413 461 414 462 handleStartPlaybackButtonTouchEnd: function(event) { 415 this.controls. fullscreenButton.classList.remove('active');463 this.controls.startPlaybackButton.classList.remove('active'); 416 464 if (this.video.error) 417 465 return true; … … 423 471 424 472 handleStartPlaybackButtonTouchCancel: function(event) { 425 this.controls. fullscreenButton.classList.remove('active');473 this.controls.startPlaybackButton.classList.remove('active'); 426 474 return true; 427 475 }, -
trunk/Source/WebCore/WebCore.exp.in
r175549 r175596 2849 2849 _wkGetVerticalGlyphsForCharacters 2850 2850 _wkIsGB18030ComplianceRequired 2851 _wkIsOptimizedFullscreenSupported 2851 2852 _wkSetLayerContentsScale 2852 2853 #endif -
trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.h
r165676 r175596 74 74 extern CFStringRef (*wkGetVendorNameForNavigator)(void); 75 75 76 extern bool (*wkIsOptimizedFullscreenSupported)(void); 77 76 78 #endif // WebCoreSystemInterfaceIOS_h -
trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm
r173276 r175596 131 131 WEBCORE_EXPORT CFStringRef (*wkGetVendorNameForNavigator)(void); 132 132 133 WEBCORE_EXPORT BOOL (*wkIsOptimizedFullscreenSupported)(void); 134 133 135 WEBCORE_EXPORT int (*wkExernalDeviceTypeForPlayer)(AVPlayer *); 134 136 WEBCORE_EXPORT NSString *(*wkExernalDeviceDisplayNameForPlayer)(AVPlayer *); -
trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h
r175585 r175596 106 106 bool m_exitRequested; 107 107 bool m_exitCompleted; 108 bool m_enterRequested; 108 109 109 110 WebAVPlayerController *playerController(); -
trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm
r175585 r175596 862 862 m_exitCompleted = false; 863 863 m_exitRequested = false; 864 m_enterRequested = true; 864 865 865 866 dispatch_async(dispatch_get_main_queue(), ^{ 866 867 [m_videoLayerContainer setBackgroundColor:[[getUIColorClass() blackColor] CGColor]]; 867 #if ENABLE(OPTIMIZED_FULLSCREEN)868 868 if (m_mode == HTMLMediaElement::VideoFullscreenModeOptimized) { 869 869 [m_playerViewController startOptimizedFullscreenWithStartCompletionHandler:^(BOOL success, NSError *) { … … 898 898 }]; 899 899 } else 900 #endif901 900 if (m_mode == HTMLMediaElement::VideoFullscreenModeStandard) { 902 901 [m_playerViewController enterFullScreenWithCompletionHandler:^(BOOL, NSError*) … … 942 941 [[m_playerViewController view] layoutIfNeeded]; 943 942 944 #if ENABLE(OPTIMIZED_FULLSCREEN)945 943 if (m_mode == HTMLMediaElement::VideoFullscreenModeOptimized) { 946 944 [m_window setHidden:NO]; 947 945 [m_playerViewController stopOptimizedFullscreen]; 948 946 } else 949 #endif950 947 if (m_mode == HTMLMediaElement::VideoFullscreenModeStandard) { 951 948 [m_playerViewController exitFullScreenWithCompletionHandler:^(BOOL, NSError*) { … … 1004 1001 if (m_fullscreenChangeObserver) 1005 1002 m_fullscreenChangeObserver->didCleanupFullscreen(); 1003 m_enterRequested = false; 1006 1004 protect = nullptr; 1007 1005 }); … … 1035 1033 void WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen() 1036 1034 { 1035 if (!m_enterRequested) 1036 return; 1037 1037 1038 if (m_mode == HTMLMediaElement::VideoFullscreenModeOptimized) 1038 1039 return; … … 1048 1049 }); 1049 1050 1050 if (m_videoFullscreenModel )1051 if (m_videoFullscreenModel && !m_exitRequested) 1051 1052 m_videoFullscreenModel->requestExitFullscreen(); 1052 1053 } -
trunk/Source/WebKit/mac/ChangeLog
r175583 r175596 1 2014-11-03 Jeremy Jones <jeremyj@apple.com> 2 3 Add button and enable optimized fullscreen. 4 https://bugs.webkit.org/show_bug.cgi?id=138351 5 6 Reviewed by Eric Carlson. 7 8 Add IsOptimizedFullscreenSupported to enable the feature only where appropriate. 9 10 * WebCoreSupport/WebSystemInterface.mm: 11 (InitWebCoreSystemInterface): added 12 1 13 2014-11-04 Chris Dumez <cdumez@apple.com> 2 14 -
trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
r174052 r175596 132 132 INIT(GetScreenScaleFactor); 133 133 INIT(IsGB18030ComplianceRequired); 134 INIT(IsOptimizedFullscreenSupported); 134 135 #endif 135 136 -
trunk/Source/WebKit2/ChangeLog
r175595 r175596 1 2014-11-03 Jeremy Jones <jeremyj@apple.com> 2 3 Add button and enable optimized fullscreen. 4 https://bugs.webkit.org/show_bug.cgi?id=138351 5 6 Reviewed by Eric Carlson. 7 8 Add IsOptimizedFullscreenSupported to enable the feature only where appropriate. 9 10 * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: 11 (InitWebCoreSystemInterface): add IsOptimizedFullscreenSupported 12 1 13 2014-11-04 Andy Estes <aestes@apple.com> 2 14 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm
r174052 r175596 208 208 INIT(GetScreenScaleFactor); 209 209 INIT(IsGB18030ComplianceRequired); 210 INIT(IsOptimizedFullscreenSupported); 210 211 #endif 211 212
Note: See TracChangeset
for help on using the changeset viewer.