1/* 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#include "webrtc/modules/video_render/mac/cocoa_full_screen_window.h" 12#include "webrtc/system_wrappers/include/trace.h" 13 14using namespace webrtc; 15 16@implementation CocoaFullScreenWindow 17 18-(id)init{ 19 20 self = [super init]; 21 if(!self){ 22 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, 0, "%s:%d COULD NOT CREATE INSTANCE", __FUNCTION__, __LINE__); 23 return nil; 24 } 25 26 27 WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, 0, "%s:%d Created instance", __FUNCTION__, __LINE__); 28 return self; 29} 30 31-(void)grabFullScreen{ 32 33#ifdef GRAB_ALL_SCREENS 34 if(CGCaptureAllDisplays() != kCGErrorSuccess) 35#else 36 if(CGDisplayCapture(kCGDirectMainDisplay) != kCGErrorSuccess) 37#endif 38 { 39 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, 0, "%s:%d Could not capture main level", __FUNCTION__, __LINE__); 40 } 41 42 // get the shielding window level 43 int windowLevel = CGShieldingWindowLevel(); 44 45 // get the screen rect of main display 46 NSRect screenRect = [[NSScreen mainScreen]frame]; 47 48 _window = [[NSWindow alloc]initWithContentRect:screenRect 49 styleMask:NSBorderlessWindowMask 50 backing:NSBackingStoreBuffered 51 defer:NO 52 screen:[NSScreen mainScreen]]; 53 54 [_window setLevel:windowLevel]; 55 [_window setBackgroundColor:[NSColor blackColor]]; 56 [_window makeKeyAndOrderFront:nil]; 57 58} 59 60-(void)releaseFullScreen 61{ 62 [_window orderOut:self]; 63 64#ifdef GRAB_ALL_SCREENS 65 if(CGReleaseAllDisplays() != kCGErrorSuccess) 66#else 67 if(CGDisplayRelease(kCGDirectMainDisplay) != kCGErrorSuccess) 68#endif 69 { 70 WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, 0, "%s:%d Could not release the displays", __FUNCTION__, __LINE__); 71 } 72} 73 74- (NSWindow*)window 75{ 76 return _window; 77} 78 79- (void) dealloc 80{ 81 [self releaseFullScreen]; 82 [super dealloc]; 83} 84 85 86 87@end 88