diff --git a/modules/highgui/src/window_cocoa.mm b/modules/highgui/src/window_cocoa.mm index 86f38d0ae8..7e364220fa 100644 --- a/modules/highgui/src/window_cocoa.mm +++ b/modules/highgui/src/window_cocoa.mm @@ -195,6 +195,9 @@ CV_IMPL void cvDestroyWindow( const char* name) //cout << "cvDestroyWindow" << endl; CVWindow *window = cvGetWindow(name); if(window) { + if ([window styleMask] & NSFullScreenWindowMask) { + [window toggleFullScreen:nil]; + } [window close]; [windows removeObjectForKey:[NSString stringWithFormat:@"%s", name]]; } @@ -701,7 +704,11 @@ double cvGetModeWindow_COCOA( const char* name ) void cvSetModeWindow_COCOA( const char* name, double prop_value ) { CVWindow *window = nil; + +#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7 NSDictionary *fullscreenOptions = nil; +#endif + NSAutoreleasePool* localpool = nil; CV_FUNCNAME( "cvSetModeWindow_COCOA" ); @@ -725,6 +732,31 @@ void cvSetModeWindow_COCOA( const char* name, double prop_value ) localpool = [[NSAutoreleasePool alloc] init]; +#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_6 + if ( ([window styleMask] & NSFullScreenWindowMask) && prop_value==CV_WINDOW_NORMAL ) + { + [window toggleFullScreen:nil]; + + window.status=CV_WINDOW_NORMAL; + } + else if( !([window styleMask] & NSFullScreenWindowMask) && prop_value==CV_WINDOW_FULLSCREEN ) + { + [window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; + + NSScreen* screen = [window screen]; + + NSRect frame = [screen frame]; + [window setFrame:frame display:YES]; + + [window setContentSize:frame.size]; + + [window toggleFullScreen:nil]; + + [window setFrameTopLeftPoint: frame.origin]; + + window.status=CV_WINDOW_FULLSCREEN; + } +#else fullscreenOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSFullScreenModeSetting]; if ( [[window contentView] isInFullScreenMode] && prop_value==CV_WINDOW_NORMAL ) { @@ -736,7 +768,7 @@ void cvSetModeWindow_COCOA( const char* name, double prop_value ) [[window contentView] enterFullScreenMode:[NSScreen mainScreen] withOptions:fullscreenOptions]; window.status=CV_WINDOW_FULLSCREEN; } - +#endif [localpool drain]; __END__; @@ -810,7 +842,7 @@ void cvSetPropTopmost_COCOA( const char* name, const bool topmost ) CV_ERROR( CV_StsNullPtr, "NULL window" ); } - if ([[window contentView] isInFullScreenMode]) + if (([window styleMask] & NSFullScreenWindowMask)) { EXIT; }