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 #import "cocoa_full_screen_window.h" 12 #include "trace.h" 13 14 using 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