Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Unified Diff: Source/WebCore/platform/mac/WebVideoFullscreenController.mm

Issue 13713003: Remove all of WebCore/platform/mac which is not mentioned in WebCore.gypi. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Added back a couple needed headers Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/WebCore/platform/mac/WebVideoFullscreenController.mm
diff --git a/Source/WebCore/platform/mac/WebVideoFullscreenController.mm b/Source/WebCore/platform/mac/WebVideoFullscreenController.mm
deleted file mode 100644
index 3edc36145db2f53e8db987dcca77d0a64ec8245f..0000000000000000000000000000000000000000
--- a/Source/WebCore/platform/mac/WebVideoFullscreenController.mm
+++ /dev/null
@@ -1,556 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#import "config.h"
-
-#if ENABLE(VIDEO)
-
-#import "WebVideoFullscreenController.h"
-
-#import "WebVideoFullscreenHUDWindowController.h"
-#import "WebWindowAnimation.h"
-#import <Carbon/Carbon.h>
-#import <QTKit/QTKit.h>
-#import <WebCore/DisplaySleepDisabler.h>
-#import <WebCore/HTMLMediaElement.h>
-#import <WebCore/SoftLinking.h>
-#import <objc/runtime.h>
-#import <wtf/UnusedParam.h>
-
-#if USE(GSTREAMER)
-#import <WebCore/GStreamerGWorld.h>
-#endif
-
-using namespace WebCore;
-
-SOFT_LINK_FRAMEWORK(QTKit)
-SOFT_LINK_CLASS(QTKit, QTMovieLayer)
-
-SOFT_LINK_POINTER(QTKit, QTMovieRateDidChangeNotification, NSString *)
-
-#define QTMovieRateDidChangeNotification getQTMovieRateDidChangeNotification()
-
-@interface WebVideoFullscreenWindow : NSWindow
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
-<NSAnimationDelegate>
-#endif
-{
- SEL _controllerActionOnAnimationEnd;
- WebWindowScaleAnimation *_fullscreenAnimation; // (retain)
-}
-- (void)animateFromRect:(NSRect)startRect toRect:(NSRect)endRect withSubAnimation:(NSAnimation *)subAnimation controllerAction:(SEL)controllerAction;
-@end
-
-@interface WebVideoFullscreenController(HUDWindowControllerDelegate) <WebVideoFullscreenHUDWindowControllerDelegate>
-- (void)requestExitFullscreenWithAnimation:(BOOL)animation;
-- (void)updateMenuAndDockForFullscreen;
-- (void)updatePowerAssertions;
-@end
-
-@interface NSWindow(IsOnActiveSpaceAdditionForTigerAndLeopard)
-- (BOOL)isOnActiveSpace;
-@end
-
-@implementation WebVideoFullscreenController
-- (id)init
-{
- // Do not defer window creation, to make sure -windowNumber is created (needed by WebWindowScaleAnimation).
- NSWindow *window = [[WebVideoFullscreenWindow alloc] initWithContentRect:NSZeroRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
- self = [super initWithWindow:window];
- [window release];
- if (!self)
- return nil;
- [self windowDidLoad];
- return self;
-
-}
-- (void)dealloc
-{
- ASSERT(!_backgroundFullscreenWindow);
- ASSERT(!_fadeAnimation);
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- [super dealloc];
-}
-
-- (WebVideoFullscreenWindow *)fullscreenWindow
-{
- return (WebVideoFullscreenWindow *)[super window];
-}
-
-- (void)setupVideoOverlay:(QTMovieLayer*)layer
-{
- WebVideoFullscreenWindow *window = [self fullscreenWindow];
-#if USE(GSTREAMER)
- if (_mediaElement && _mediaElement->platformMedia().type == PlatformMedia::GStreamerGWorldType) {
- GStreamerGWorld* gstGworld = _mediaElement->platformMedia().media.gstreamerGWorld;
- if (gstGworld->enterFullscreen())
- [window setContentView:gstGworld->platformVideoWindow()->window()];
- }
-#else
- [[window contentView] setLayer:layer];
- [[window contentView] setWantsLayer:YES];
- if (_mediaElement && _mediaElement->platformMedia().type == PlatformMedia::QTMovieType)
- [layer setMovie:_mediaElement->platformMedia().media.qtMovie];
-#endif
-}
-
-- (void)windowDidLoad
-{
- WebVideoFullscreenWindow *window = [self fullscreenWindow];
- [window setHasShadow:YES]; // This is nicer with a shadow.
- [window setLevel:NSPopUpMenuWindowLevel-1];
-
- QTMovieLayer *layer = [[getQTMovieLayerClass() alloc] init];
- [self setupVideoOverlay:layer];
- [layer release];
-
-#if !USE(GSTREAMER)
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidResignActive:) name:NSApplicationDidResignActiveNotification object:NSApp];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidChangeScreenParameters:) name:NSApplicationDidChangeScreenParametersNotification object:NSApp];
-#endif
-}
-
-- (HTMLMediaElement*)mediaElement
-{
- return _mediaElement.get();
-}
-
-- (void)setMediaElement:(HTMLMediaElement*)mediaElement
-{
- _mediaElement = mediaElement;
- if ([self isWindowLoaded]) {
- QTMovieLayer *movieLayer = (QTMovieLayer *)[[[self fullscreenWindow] contentView] layer];
-
- ASSERT(movieLayer && [movieLayer isKindOfClass:[getQTMovieLayerClass() class]]);
- [self setupVideoOverlay:movieLayer];
-#if !USE(GSTREAMER)
- ASSERT([movieLayer movie]);
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(rateChanged:)
- name:QTMovieRateDidChangeNotification
- object:[movieLayer movie]];
-#endif
- }
-}
-
-- (id <WebVideoFullscreenControllerDelegate>)delegate
-{
- return _delegate;
-}
-
-- (void)setDelegate:(id <WebVideoFullscreenControllerDelegate>)delegate
-{
- _delegate = delegate;
-}
-
-- (CGFloat)clearFadeAnimation
-{
- [_fadeAnimation stopAnimation];
- CGFloat previousAlpha = [_fadeAnimation currentAlpha];
- [_fadeAnimation setWindow:nil];
- [_fadeAnimation release];
- _fadeAnimation = nil;
- return previousAlpha;
-}
-
-- (void)windowDidExitFullscreen
-{
-#if USE(GSTREAMER)
- if (_mediaElement && _mediaElement->platformMedia().type == PlatformMedia::GStreamerGWorldType)
- _mediaElement->platformMedia().media.gstreamerGWorld->exitFullscreen();
-#endif
- [self clearFadeAnimation];
- [[self window] close];
- [self setWindow:nil];
- [self updateMenuAndDockForFullscreen];
- [self updatePowerAssertions];
- [_hudController setDelegate:nil];
- [_hudController release];
- _hudController = nil;
- [_backgroundFullscreenWindow close];
- [_backgroundFullscreenWindow release];
- _backgroundFullscreenWindow = nil;
-
- [self autorelease]; // Associated -retain is in -exitFullscreen.
- _isEndingFullscreen = NO;
-}
-
-- (void)windowDidEnterFullscreen
-{
- [self clearFadeAnimation];
-
- ASSERT(!_hudController);
- _hudController = [[WebVideoFullscreenHUDWindowController alloc] init];
- [_hudController setDelegate:self];
-
- [self updateMenuAndDockForFullscreen];
- [self updatePowerAssertions];
- [NSCursor setHiddenUntilMouseMoves:YES];
-
- // Give the HUD keyboard focus initially
- [_hudController fadeWindowIn];
-}
-
-- (NSRect)mediaElementRect
-{
- return _mediaElement->screenRect();
-}
-
-- (void)applicationDidResignActive:(NSNotification*)notification
-{
- UNUSED_PARAM(notification);
- // Check to see if the fullscreenWindow is on the active space; this function is available
- // on 10.6 and later, so default to YES if the function is not available:
- NSWindow* fullscreenWindow = [self fullscreenWindow];
- BOOL isOnActiveSpace = ([fullscreenWindow respondsToSelector:@selector(isOnActiveSpace)] ? [fullscreenWindow isOnActiveSpace] : YES);
-
- // Replicate the QuickTime Player (X) behavior when losing active application status:
- // Is the fullscreen screen the main screen? (Note: this covers the case where only a
- // single screen is available.) Is the fullscreen screen on the current space? IFF so,
- // then exit fullscreen mode.
- if ([fullscreenWindow screen] == [[NSScreen screens] objectAtIndex:0] && isOnActiveSpace)
- [self requestExitFullscreenWithAnimation:NO];
-}
-
-
-// MARK: -
-// MARK: Exposed Interface
-
-static void constrainFrameToRatioOfFrame(NSRect *frameToConstrain, const NSRect *frame)
-{
- // Keep a constrained aspect ratio for the destination window
- CGFloat originalRatio = frame->size.width / frame->size.height;
- CGFloat newRatio = frameToConstrain->size.width / frameToConstrain->size.height;
- if (newRatio > originalRatio) {
- CGFloat newWidth = originalRatio * frameToConstrain->size.height;
- CGFloat diff = frameToConstrain->size.width - newWidth;
- frameToConstrain->size.width = newWidth;
- frameToConstrain->origin.x += diff / 2;
- } else {
- CGFloat newHeight = frameToConstrain->size.width / originalRatio;
- CGFloat diff = frameToConstrain->size.height - newHeight;
- frameToConstrain->size.height = newHeight;
- frameToConstrain->origin.y += diff / 2;
- }
-}
-
-static NSWindow *createBackgroundFullscreenWindow(NSRect frame, int level)
-{
- NSWindow *window = [[NSWindow alloc] initWithContentRect:frame styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
- [window setOpaque:YES];
- [window setBackgroundColor:[NSColor blackColor]];
- [window setLevel:level];
- [window setReleasedWhenClosed:NO];
- return window;
-}
-
-- (void)setupFadeAnimationIfNeededAndFadeIn:(BOOL)fadeIn
-{
- CGFloat initialAlpha = fadeIn ? 0 : 1;
- if (_fadeAnimation) {
- // Make sure we support queuing animation if the previous one isn't over yet
- initialAlpha = [self clearFadeAnimation];
- }
- if (!_forceDisableAnimation)
- _fadeAnimation = [[WebWindowFadeAnimation alloc] initWithDuration:0.2 window:_backgroundFullscreenWindow initialAlpha:initialAlpha finalAlpha:fadeIn ? 1 : 0];
-}
-
-- (void)enterFullscreen:(NSScreen *)screen
-{
- if (!screen)
- screen = [NSScreen mainScreen];
-
- NSRect frame = [self mediaElementRect];
- NSRect endFrame = [screen frame];
- constrainFrameToRatioOfFrame(&endFrame, &frame);
-
- // Create a black window if needed
- if (!_backgroundFullscreenWindow)
- _backgroundFullscreenWindow = createBackgroundFullscreenWindow([screen frame], [[self window] level]-1);
- else
- [_backgroundFullscreenWindow setFrame:[screen frame] display:NO];
-
- [self setupFadeAnimationIfNeededAndFadeIn:YES];
- if (_forceDisableAnimation) {
- // This will disable scale animation
- frame = NSZeroRect;
- }
- [[self fullscreenWindow] animateFromRect:frame toRect:endFrame withSubAnimation:_fadeAnimation controllerAction:@selector(windowDidEnterFullscreen)];
-
- [_backgroundFullscreenWindow orderWindow:NSWindowBelow relativeTo:[[self fullscreenWindow] windowNumber]];
-}
-
-- (void)exitFullscreen
-{
- if (_isEndingFullscreen)
- return;
- _isEndingFullscreen = YES;
- [_hudController closeWindow];
-
- NSRect endFrame = [self mediaElementRect];
-
- [self setupFadeAnimationIfNeededAndFadeIn:NO];
- if (_forceDisableAnimation) {
- // This will disable scale animation
- endFrame = NSZeroRect;
- }
-
- // We have to retain ourselves because we want to be alive for the end of the animation.
- // If our owner releases us we could crash if this is not the case.
- // Balanced in windowDidExitFullscreen
- [self retain];
-
- [[self fullscreenWindow] animateFromRect:[[self window] frame] toRect:endFrame withSubAnimation:_fadeAnimation controllerAction:@selector(windowDidExitFullscreen)];
-}
-
-- (void)applicationDidChangeScreenParameters:(NSNotification*)notification
-{
- UNUSED_PARAM(notification);
- // The user may have changed the main screen by moving the menu bar, or they may have changed
- // the Dock's size or location, or they may have changed the fullscreen screen's dimensions.
- // Update our presentation parameters, and ensure that the full screen window occupies the
- // entire screen:
- [self updateMenuAndDockForFullscreen];
- [[self window] setFrame:[[[self window] screen] frame] display:YES];
-}
-
-- (void)updateMenuAndDockForFullscreen
-{
- // NSApplicationPresentationOptions is available on > 10.6 only:
-#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
- NSApplicationPresentationOptions options = NSApplicationPresentationDefault;
- NSScreen* fullscreenScreen = [[self window] screen];
-
- if (!_isEndingFullscreen) {
- // Auto-hide the menu bar if the fullscreenScreen contains the menu bar:
- // NOTE: if the fullscreenScreen contains the menu bar but not the dock, we must still
- // auto-hide the dock, or an exception will be thrown.
- if ([[NSScreen screens] objectAtIndex:0] == fullscreenScreen)
- options |= (NSApplicationPresentationAutoHideMenuBar | NSApplicationPresentationAutoHideDock);
- // Check if the current screen contains the dock by comparing the screen's frame to its
- // visibleFrame; if a dock is present, the visibleFrame will differ. If the current screen
- // contains the dock, hide it.
- else if (!NSEqualRects([fullscreenScreen frame], [fullscreenScreen visibleFrame]))
- options |= NSApplicationPresentationAutoHideDock;
- }
-
- if ([NSApp respondsToSelector:@selector(setPresentationOptions:)])
- [NSApp setPresentationOptions:options];
- else
-#endif
- SetSystemUIMode(_isEndingFullscreen ? kUIModeNormal : kUIModeAllHidden, 0);
-}
-
-- (void)updatePowerAssertions
-{
- float rate = 0;
- if (_mediaElement && _mediaElement->platformMedia().type == PlatformMedia::QTMovieType)
- rate = [_mediaElement->platformMedia().media.qtMovie rate];
-
- if (rate && !_isEndingFullscreen) {
- if (!_displaySleepDisabler)
- _displaySleepDisabler = DisplaySleepDisabler::create("com.apple.WebCore - Fullscreen video");
- } else
- _displaySleepDisabler = nullptr;
-}
-
-// MARK: -
-// MARK: Window callback
-
-- (void)_requestExit
-{
- if (_mediaElement)
- _mediaElement->exitFullscreen();
- _forceDisableAnimation = NO;
-}
-
-- (void)requestExitFullscreenWithAnimation:(BOOL)animation
-{
- if (_isEndingFullscreen)
- return;
-
- _forceDisableAnimation = !animation;
- [self performSelector:@selector(_requestExit) withObject:nil afterDelay:0];
-
-}
-
-- (void)requestExitFullscreen
-{
- [self requestExitFullscreenWithAnimation:YES];
-}
-
-- (void)fadeHUDIn
-{
- [_hudController fadeWindowIn];
-}
-
-// MARK: -
-// MARK: QTMovie callbacks
-
-- (void)rateChanged:(NSNotification *)unusedNotification
-{
- UNUSED_PARAM(unusedNotification);
- [_hudController updateRate];
- [self updatePowerAssertions];
-}
-
-@end
-
-@implementation WebVideoFullscreenWindow
-
-- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag
-{
- UNUSED_PARAM(aStyle);
- self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag];
- if (!self)
- return nil;
- [self setOpaque:NO];
- [self setBackgroundColor:[NSColor clearColor]];
- [self setIgnoresMouseEvents:NO];
- [self setAcceptsMouseMovedEvents:YES];
- return self;
-}
-
-- (void)dealloc
-{
- ASSERT(!_fullscreenAnimation);
- [super dealloc];
-}
-
-- (BOOL)resignFirstResponder
-{
- return NO;
-}
-
-- (BOOL)canBecomeKeyWindow
-{
- return NO;
-}
-
-- (void)mouseDown:(NSEvent *)theEvent
-{
- UNUSED_PARAM(theEvent);
-}
-
-- (void)cancelOperation:(id)sender
-{
- UNUSED_PARAM(sender);
- [[self windowController] requestExitFullscreen];
-}
-
-- (void)animatedResizeDidEnd
-{
- // Call our windowController.
- if (_controllerActionOnAnimationEnd)
- [[self windowController] performSelector:_controllerActionOnAnimationEnd];
- _controllerActionOnAnimationEnd = NULL;
-}
-
-//
-// This function will animate a change of frame rectangle
-// We support queuing animation, that means that we'll correctly
-// interrupt the running animation, and queue the next one.
-//
-- (void)animateFromRect:(NSRect)startRect toRect:(NSRect)endRect withSubAnimation:(NSAnimation *)subAnimation controllerAction:(SEL)controllerAction
-{
- _controllerActionOnAnimationEnd = controllerAction;
-
- BOOL wasAnimating = NO;
- if (_fullscreenAnimation) {
- wasAnimating = YES;
-
- // Interrupt any running animation.
- [_fullscreenAnimation stopAnimation];
-
- // Save the current rect to ensure a smooth transition.
- startRect = [_fullscreenAnimation currentFrame];
- [_fullscreenAnimation release];
- _fullscreenAnimation = nil;
- }
-
- if (NSIsEmptyRect(startRect) || NSIsEmptyRect(endRect)) {
- // Fakely end the subanimation.
- [subAnimation setCurrentProgress:1];
- // And remove the weak link to the window.
- [subAnimation stopAnimation];
-
- [self setFrame:endRect display:NO];
- [self makeKeyAndOrderFront:self];
- [self animatedResizeDidEnd];
- return;
- }
-
- if (!wasAnimating) {
- // We'll downscale the window during the animation based on the higher resolution rect
- BOOL higherResolutionIsEndRect = startRect.size.width < endRect.size.width && startRect.size.height < endRect.size.height;
- [self setFrame:higherResolutionIsEndRect ? endRect : startRect display:NO];
- }
-
- ASSERT(!_fullscreenAnimation);
- _fullscreenAnimation = [[WebWindowScaleAnimation alloc] initWithHintedDuration:0.2 window:self initalFrame:startRect finalFrame:endRect];
- [_fullscreenAnimation setSubAnimation:subAnimation];
- [_fullscreenAnimation setDelegate:self];
-
- // Make sure the animation has scaled the window before showing it.
- [_fullscreenAnimation setCurrentProgress:0];
- [self makeKeyAndOrderFront:self];
-
- [_fullscreenAnimation startAnimation];
-}
-
-- (void)animationDidEnd:(NSAnimation *)animation
-{
- if (![NSThread isMainThread]) {
- [self performSelectorOnMainThread:@selector(animationDidEnd:) withObject:animation waitUntilDone:NO];
- return;
- }
- if (animation != _fullscreenAnimation)
- return;
-
- // The animation is not really over and was interrupted
- // Don't send completion events.
- if ([animation currentProgress] < 1.0)
- return;
-
- // Ensure that animation (and subanimation) don't keep
- // the weak reference to the window ivar that may be destroyed from
- // now on.
- [_fullscreenAnimation setWindow:nil];
-
- [_fullscreenAnimation autorelease];
- _fullscreenAnimation = nil;
-
- [self animatedResizeDidEnd];
-}
-
-- (void)mouseMoved:(NSEvent *)theEvent
-{
- UNUSED_PARAM(theEvent);
- [[self windowController] fadeHUDIn];
-}
-
-@end
-
-#endif /* ENABLE(VIDEO) */

Powered by Google App Engine
This is Rietveld 408576698