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